function [Zval, Variance] = focusstack_3(s,vid,z) t1 = toc;currzpos=z; % fINECRUDE AF. Z_travel_for_crude = 1000; crude_step_count = 50; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% crude_pulse_count = Z_travel_for_crude / crude_step_count; crude_max_var=0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % go to starting Z loc (we've hit limit switch via arduino already so its z=0) crude_start_loc = z - (Z_travel_for_crude/2); gotoZ(s,crude_start_loc,currzpos); currzpos=crude_start_loc; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % now keep going up and taking var crude_curr_loc = crude_start_loc; for i=1: crude_pulse_count % variance crude_img = double(getsnapshot(vid)); crude_curr_var=var(crude_img(:)); if (crude_curr_var > crude_max_var) crude_max_var = crude_curr_var; crude_loc_max_var = crude_curr_loc; end % update loc crude_curr_loc = crude_curr_loc + crude_step_count ; gotoZ(s,crude_curr_loc,currzpos); currzpos=crude_curr_loc; end gotoZ(s,crude_loc_max_var,currzpos);currzpos=crude_loc_max_var; % The fine AF begins here %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Ztotaltravel = 100; final_go_backpulses = 0 ; currZ = crude_loc_max_var; % first go above start_above_loc = currZ - (Ztotaltravel/2); gotoZ(s,start_above_loc,currzpos);currzpos=start_above_loc; % now build the var array localAF_loc_array = zeros(1,Ztotaltravel); localAF_var_array = zeros(1,Ztotaltravel); localAF_curr_loc = start_above_loc; for q=1:(Ztotaltravel/5) % location localAF_loc_array(q) = localAF_curr_loc; % variance localAF_img = double(getsnapshot(vid)); localAF_var_array(q)=var(localAF_img(:)); % move and update loc localAF_curr_loc = localAF_curr_loc + 5; gotoZ(s,localAF_curr_loc,currzpos); currzpos=localAF_curr_loc; end % Finally go to the max var location index_of_max_var = localAF_var_array == max(localAF_var_array); loc_of_max_var = localAF_loc_array(index_of_max_var) - final_go_backpulses ; gotoZ(s,loc_of_max_var,currzpos);currzpos=loc_of_max_var; Zval = loc_of_max_var; Variance = max(localAF_var_array); t2 = toc; disp(t2-t1) end