Files
ofm/Flowcytometer_Focusing_Jeevan2018/focusstack_3.m
moonanjum26 188e46804b first commit
2018-08-10 12:01:05 +05:30

60 lines
2.4 KiB
Matlab

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