From c5e82aafc4b14648664b834992e2ec1ae359125f Mon Sep 17 00:00:00 2001 From: Bryan Roessler Date: Thu, 25 Jul 2024 17:11:41 -0400 Subject: [PATCH] Format NIscanIntensBGparGblFnc.m --- .../templates/easy/NIscanIntensBGpar4GblFnc.m | 2415 ++++++++--------- 1 file changed, 1111 insertions(+), 1304 deletions(-) diff --git a/workflow/templates/easy/NIscanIntensBGpar4GblFnc.m b/workflow/templates/easy/NIscanIntensBGpar4GblFnc.m index 9c002c7c..07936674 100755 --- a/workflow/templates/easy/NIscanIntensBGpar4GblFnc.m +++ b/workflow/templates/easy/NIscanIntensBGpar4GblFnc.m @@ -3,1379 +3,1186 @@ function [Tmpsbdg2, scanIntens, F_spots, bmtp, optomizedPos, TmpexpScanIntens2, NIscanIntensBGpar4GblFnc(Fflg, tifFileLst, ImParMat,PTmapPos,optCirMask,diaExt,doCircle,cirPixA,numRows,numCols,ImHeigth,ImWidth,cirMask, ... tptLength,selScan,Empsc,~, ~, ~, ~,resDir, Tmpsbdg1) -global ExpOutmat -global CSrchRng + global ExpOutmat + global CSrchRng + searchIntens=[]; intensMax=[]; detMaxPos=[]; scIntens=[]; areaOfIntensAboveBG=[]; BkgrdMat=[]; -%*************************************************************** - -searchIntens=[]; intensMax=[]; detMaxPos=[]; scIntens=[]; areaOfIntensAboveBG=[]; BkgrdMat=[]; - -if Fflg==1 - %*****PreAllocation ***** -tPtLength=length(tifFileLst); - -optomizedPos= cell(24,16,tPtLength); -F_spots=cell(24,16,tPtLength); %Foto spot coordinates Preallocation -bmtp=zeros(24,16,tPtLength); %Added/used for FOTOS Preallocation - -MPnum=ImParMat(1); -destPerMP=ImParMat(2); -spotThres=ImParMat(4)/100; -%width=ImParMat(5); -CSrchRng = ImParMat(12); -width=24; %absolute fixed after Sept 2014 -ditherF=ImParMat(6); -ditherF=1; %absolute fixed after Sept 2014 - - -%Get PTmap data (detPos) and create PTimage with cirMask 2019_0904 - PTmapOnesDbl= zeros(2075,1400); - for r=1:24 - for c=1:16 - [PTrefPt]=PTmapPos{r,c}; + if Fflg==1 + % Preallocation + tPtLength=length(tifFileLst); + optomizedPos=cell(24,16,tPtLength); + F_spots=cell(24,16,tPtLength); % Foto spot coordinates Preallocation + bmtp=zeros(24,16,tPtLength); % Added/used for FOTOS Preallocation + MPnum=ImParMat(1); + destPerMP=ImParMat(2); + spotThres=ImParMat(4)/100; + % width=ImParMat(5); + CSrchRng=ImParMat(12); + width=24; % absolute fixed after Sept 2014 + ditherF=ImParMat(6); + ditherF=1; % absolute fixed after Sept 2014 + % Get PTmap data (detPos) and create PTimage with cirMask 2019_0904 + PTmapOnesDbl=zeros(2075,1400); + for r=1:24 + for c=1:16 + [PTrefPt]=PTmapPos{r,c}; PTrefPtR=PTrefPt(1); PTrefPtC=PTrefPt(2); - %******* doCircle - PTmapOnesDbl(PTrefPtR:(PTrefPtR+(diaExt-1)),PTrefPtC:(PTrefPtC+(diaExt-1)))=optCirMask; + % doCircle + PTmapOnesDbl(PTrefPtR:(PTrefPtR+(diaExt-1)),PTrefPtC:(PTrefPtC+(diaExt-1)))=optCirMask; + end end + end %if Fflg==1 + % Zeroth Initial Search Parameters + rRangeUpper=-12; + rRangeLower=12; + cRangeLower=-12; + cRangeUpper=12; + ditherI=width/3; + searchRange=floor(width*0.75); %generally -/+18 + %searchRange=CSrchRng + rCRangeUpper=-searchRange; % -12 % -8; %Ranges should be multiples of dither + rCRangeLower=searchRange; %12; %Ranges should be multiples of dither + cCRangeLower=-searchRange; %-12 %-8; %-12; %Ranges should be multiples of dither + cCRangeUpper=searchRange; %12; %8; %Ranges should be multiples of dither + ditherC=floor((2*searchRange)/9); %gnerally /6 0r /9 -> dither=6 or 4 pixels + if ditherC==0,ditherC=1;end + rFRangeUpper=-floor(1/2*width); %(searchRange*2/3) %-12 % -8; %Ranges should be multiples of dither + rFRangeLower=floor(1/2*width); %(searchRange*2/3); %12; %Ranges should be multiples of dither + cFRangeLower=-floor(1/2*width); %(searchRange*2/3); %-12 %-8; %-12; %Ranges should be multiples of dither + cFRangeUpper=floor(1/2*width); %(searchRange*2/3) %12; %8; %Ranges should be multiples of dither + ditherF=1; + % The purpose is to reduce incidence of 'chasing' scratches and abrasions to + % the edge of a frame and also to limit late timept finds of overgrown + % spot(that are yet small). The idea is to make the threshold high enough to + % prevent the tracking of scratches and small contaminants(overgrowth) while + % not limiting detection of small slow grow cultures. Recommend value + % slightly above the expected background level. + noSpotThres=60; % If PixelIntensity for area < area*this, use the Orig.search Refpt + if doCircle==1 + noSpot=cirPixA*noSpotThres; + else + noSpot=(width^2)*noSpotThres; %Area * (a selected background pixel level i.e., 70) end - %********************************************************************* - -end %if Fflg==1 -%******* Zeroth Initial Search Parameters***************************************** - rRangeUpper=-12; - rRangeLower=12; - cRangeLower=-12; - cRangeUpper=12; - ditherI= width/3; %8; - -%***************************************** -searchRange= floor(width*0.75); %generally -/+18 -%searchRange=CSrchRng -rCRangeUpper= -searchRange; % -12 % -8; %Ranges should be multiples of dither -rCRangeLower= searchRange; %12; %Ranges should be multiples of dither -cCRangeLower= -searchRange; %-12 %-8; %-12; %Ranges should be multiples of dither -cCRangeUpper= searchRange; %12; %8; %Ranges should be multiples of dither -ditherC= floor((2*searchRange)/9); %gnerally /6 0r /9 -> dither=6 or 4 pixels -if ditherC==0, ditherC=1;end - - -%********************************************************************* -% -rFRangeUpper= -floor(1/2*width); %(searchRange*2/3) %-12 % -8; %Ranges should be multiples of dither -rFRangeLower= floor(1/2*width); %(searchRange*2/3); %12; %Ranges should be multiples of dither -cFRangeLower= -floor(1/2*width); %(searchRange*2/3); %-12 %-8; %-12; %Ranges should be multiples of dither -cFRangeUpper= floor(1/2*width); %(searchRange*2/3) %12; %8; %Ranges should be multiples of dither -ditherF=1; - -% -%********************************************************* -%********************************************************* -%The purpose is to reduce incidence of 'chasing' scratches and abrasions to -%the edge of a frame and also to limit late timept finds of overgrown -%spot(that are yet small). The idea is to make the threshold high enough to -%prevent the tracking of scratches and small contaminants(overgrowth) while -%not limiting detection of small slow grow cultures. Recommend value -%slightly above the expected background level. -noSpotThres=60; %If PixelIntensity for area < area*this, use the Orig.search Refpt -if doCircle==1 -noSpot= cirPixA*noSpotThres; -else -noSpot= (width^2)*noSpotThres; %Area * (a selected background pixel level i.e., 70) -end -%*************************************************************** - -%********************************************************** -%Begin Time series loop - -%preallocation -stopSearch=zeros(numRows,numCols); %set all spots 'stopSearch' to false -intens=zeros(24,16); -intensPrev=zeros(24,16); -cent = cell(24,16); - -BGTav=zeros(numRows,numCols); -BGthres(1:numRows,1:numCols)= 95; %70;before incr.to95 to accommodate dark media %50forEpson;%Initialize for first tPt run *****************************************************<< -if length(tifFileLst) >2 -%**************************************************************************** - -%******Determine a good Plate Image from all the timepoints to use for Registration -%Plate Intensity curve over time points -%clear plateImage - plateImage= {}; -% { -%******Version compatability fixes*******assoc'd with diff and solve -%{ -v11a='7.12.0.635 (R2011a)'; -v14a='8.3.0.532 (R2014a)'; -%v14b='8.4.0.150421 (R2014b)'; -v18a='9.4.0.813654 (R2018a)'; -v18b='9.5.0.944444 (R2018b)'; -pool= 2; -if isequal(v11a,version)|| isequal(v14a,version) - if matlabpool('size')==0 - matlabpool(pool) - end - -else - if parpool('local')==0 - parpool('local', pool) - end -end -%} -%parfor iii=1:length(tifFileLst) -for iii=1:length(tifFileLst) - %tifFileLst - %asdf - tifFile= char(tifFileLst(iii)); - fullplt= imread(tifFile); %Ncode actually reading a .bmp file for Ncode - fullpl= 255 - fullplt(:,:,1); - %fullpl= (fullplt(1:ImHeigth,1:ImWidth)); - pltInts(iii)= sum(sum(fullpl(:,:)))/(ImHeigth*ImWidth); - plateImage{iii}= fullpl; %190919 to use instead of re-reading in NIscanIntensBG.m -end -guessOffsetAdj= 0.5; %Half(0.5) is the midpoint intensity -guessOffset= (max(pltInts)- min(pltInts)) * guessOffsetAdj; %Could plug-in a curvefit routine to determine an 'L' value -guessVal = max(pltInts)- guessOffset; -guesTpt= find(pltInts > guessVal,1,'first'); -if isempty(guesTpt) - guesTpt= 1; -end - -%************************************************************************** - PtptIm= tifFileLst(guesTpt); - PtptImg= char(tifFileLst(guesTpt)); - ImageRd= imread(PtptImg); %Ncode actually reading a .bmp file for Ncode - PltImg= (ImageRd(1:ImHeigth,1:ImWidth)); - PltImg= 255 - PltImg; - -%Convert to image to BW then AND with PTmapOnesDbl - GraythrShift= 1; - BWimage= im2bw(PltImg, GraythrShift*graythresh(PltImg)); - matchAnded= BWimage & PTmapOnesDbl; - initPTANDed= matchAnded; - ANDValInitPT=sum(sum(initPTANDed(:,:))); - -%******************************************************************* -%*********Begin Image Registration for Pintool***************************** -%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -MaxANDVal= 0; %sum(sum(BWimage(:,:))); %seed MaxANDVal from the BWimage -regDith= 4; -TestmapOnesDbl= zeros(2075,1400); -%##################################################################### -%Create a Search Range centered on C==1 and R==1 of the PinTool map -RtopBndry= 96; RbotBndry= 176; -ClfBndry = 96; CrtBndry= 154; - [PTrefPt]=PTmapPos{1,1}; - PTrefPtR=PTrefPt(1); - PTrefPtC=PTrefPt(2); - - rngUpper= RtopBndry - PTrefPtR; - quotT= round(abs(rngUpper)/regDith); - topRang= regDith * quotT; - if rngUpper<0, topRang= -1*topRang; end - - rngLower= RbotBndry - PTrefPtR; - quotB= round(abs(rngLower)/regDith); - botRang= regDith * quotB; - if rngLower<0, botRang= -1*botRang; end - - %----------------------------- - rngLeft= ClfBndry - PTrefPtC; - quotLf= round(abs(rngLeft)/regDith); - leftRang= regDith * quotLf; - if rngLeft<0, leftRang= -1*leftRang; end - - rngRight= CrtBndry - PTrefPtC; - quotRt= round(abs(rngRight)/regDith); - rightRang= regDith * quotRt; - if rngRight<0, rightRang= -1*rightRang; end -%######################################################################### -%*************Orthagonal Registration ************************ - testPos = cell(24,16); - for shiftPosR= topRang:regDith:botRang - for shiftPosC=leftRang:regDith:rightRang - TestmapOnesDbl= zeros(2075,1400); - for r=1:24 - for c=1:16 - [PTrefPt]=PTmapPos{r,c}; - testPosR= PTrefPt(1) + shiftPosR; - testPosC= PTrefPt(2) + shiftPosC; - - a=[testPosR,testPosC]; %testPos(r,c)= {testPosR,testPosC}; - testPos(r,c)={a}; - - %******* doCircle - TestmapOnesDbl(testPosR:(testPosR+(diaExt-1)),testPosC:(testPosC+(diaExt-1)))= cirMask; %optCirMask; - - end - end - GraythrShift= 1.0; - BWtestimage= im2bw(TestmapOnesDbl, GraythrShift*graythresh(TestmapOnesDbl)); - matchAnded= BWimage & BWtestimage; - ANDVal=sum(sum(matchAnded(:,:))); - if ANDVal> MaxANDVal - MaxANDVal= ANDVal; - MaxPos= testPos; - MaxPosDbl= TestmapOnesDbl; - end - end - end - if MaxANDVal> ANDValInitPT - MaxPosDbl= MaxPosDbl; - MaxPos= MaxPos; + % Begin Time series loop + % Preallocation + stopSearch=zeros(numRows,numCols); %set all spots 'stopSearch' to false + intens=zeros(24,16); + intensPrev=zeros(24,16); + cent=cell(24,16); + BGTav=zeros(numRows,numCols); + BGthres(1:numRows,1:numCols)=95; %70;before incr.to95 to accommodate dark media %50forEpson;%Initialize for first tPt run *****************************************************<< + if length(tifFileLst) >2 + %******Determine a good Plate Image from all the timepoints to use for Registration + %Plate Intensity curve over time points + %clear plateImage + plateImage={}; + %{ + % Version compatability fixes + v11a='7.12.0.635 (R2011a)'; + v14a='8.3.0.532 (R2014a)'; + %v14b='8.4.0.150421 (R2014b)'; + v18a='9.4.0.813654 (R2018a)'; + v18b='9.5.0.944444 (R2018b)'; + pool=2; + if isequal(v11a,version)|| isequal(v14a,version) + if matlabpool('size')==0 + matlabpool(pool) + end else - MaxPosDbl= PTmapOnesDbl; - MaxPos= PTmapPos; - end - - -%*************SKEW Registration******************** - testSkPos= MaxPos; - MaxANDValSk= 0; %MaxANDVal; - skQty= 0.05; + if parpool('local')==0 + parpool('local', pool) + end + end + %} + % parfor iii=1:length(tifFileLst) + for iii=1:length(tifFileLst) + tifFile=char(tifFileLst(iii)); + fullplt=imread(tifFile); % Ncode actually reading a .bmp file for Ncode + fullpl=255 - fullplt(:,:,1); + %fullpl=(fullplt(1:ImHeigth,1:ImWidth)); + pltInts(iii)=sum(sum(fullpl(:,:)))/(ImHeigth*ImWidth); + plateImage{iii}=fullpl; % 190919 to use instead of re-reading in NIscanIntensBG.m + end + guessOffsetAdj=0.5; %Half(0.5) is the midpoint intensity + guessOffset=(max(pltInts)- min(pltInts)) * guessOffsetAdj; %Could plug-in a curvefit routine to determine an 'L' value + guessVal=max(pltInts)- guessOffset; + guesTpt=find(pltInts > guessVal,1,'first'); + if isempty(guesTpt) + guesTpt=1; + end + PtptIm=tifFileLst(guesTpt); + PtptImg=char(tifFileLst(guesTpt)); + ImageRd=imread(PtptImg); %Ncode actually reading a .bmp file for Ncode + PltImg=(ImageRd(1:ImHeigth,1:ImWidth)); + PltImg=255 - PltImg; + % Convert to image to BW then AND with PTmapOnesDbl + GraythrShift=1; + BWimage=im2bw(PltImg, GraythrShift*graythresh(PltImg)); + matchAnded=BWimage & PTmapOnesDbl; + initPTANDed=matchAnded; + ANDValInitPT=sum(sum(initPTANDed(:,:))); + + % Begin Image Registration for Pintool + MaxANDVal=0; % sum(sum(BWimage(:,:))); %seed MaxANDVal from the BWimage regDith=4; - for shiftPos= -regDith/2:regDith/2 - for k= -5:5 - sk= k* skQty; - TestmapSkDbl= zeros(2075,1400); - for r=1:24 - for c=1:16 - [skrefPt]=testSkPos{r,c}; - testSkPosR= round(skrefPt(1) + (c*sk + shiftPos)); - testSkPosC= round(skrefPt(2) + (-r*sk + shiftPos)); - - a=[testSkPosR,testSkPosC]; %testPos(r,c)= {testPosR,testPosC}; - testSkPos(r,c)={a}; - - %******* doCircle - TestmapSkDbl(testSkPosR:(testSkPosR+(diaExt-1)),testSkPosC:(testSkPosC+(diaExt-1)))= cirMask; %optCirMask; - - end + TestmapOnesDbl=zeros(2075,1400); + + % Create a Search Range centered on C==1 and R==1 of the PinTool map + RtopBndry=96; RbotBndry=176; + ClfBndry=96; CrtBndry=154; + [PTrefPt]=PTmapPos{1,1}; + PTrefPtR=PTrefPt(1); + PTrefPtC=PTrefPt(2); + rngUpper=RtopBndry - PTrefPtR; + quotT=round(abs(rngUpper)/regDith); + topRang=regDith * quotT; + if rngUpper<0, topRang=-1*topRang; end + rngLower=RbotBndry - PTrefPtR; + quotB=round(abs(rngLower)/regDith); + botRang=regDith * quotB; + if rngLower<0, botRang=-1*botRang; end + rngLeft=ClfBndry - PTrefPtC; + quotLf=round(abs(rngLeft)/regDith); + leftRang=regDith * quotLf; + if rngLeft<0, leftRang=-1*leftRang; end + rngRight=CrtBndry - PTrefPtC; + quotRt=round(abs(rngRight)/regDith); + rightRang=regDith * quotRt; + if rngRight<0, rightRang=-1*rightRang; end + + % Orthagonal Registration + testPos=cell(24,16); + for shiftPosR=topRang:regDith:botRang + for shiftPosC=leftRang:regDith:rightRang + TestmapOnesDbl=zeros(2075,1400); + for r=1:24 + for c=1:16 + [PTrefPt]=PTmapPos{r,c}; + testPosR=PTrefPt(1) + shiftPosR; + testPosC=PTrefPt(2) + shiftPosC; + a=[testPosR,testPosC]; %testPos(r,c)={testPosR,testPosC}; + testPos(r,c)={a}; + doCircle + TestmapOnesDbl(testPosR:(testPosR+(diaExt-1)),testPosC:(testPosC+(diaExt-1)))=cirMask; %optCirMask; end - GraythrShift= 1; - BWtestSkimage= im2bw(TestmapSkDbl, GraythrShift*graythresh(TestmapSkDbl)); - matchAndedSk= BWimage & BWtestSkimage; - ANDValSk=sum(sum(matchAndedSk(:,:))); - if ANDValSk> MaxANDValSk - MaxANDValSk= ANDValSk; - MaxPosSk= testSkPos; - MaxPosSkDbl= TestmapSkDbl; + end + GraythrShift=1.0; + BWtestimage=im2bw(TestmapOnesDbl, GraythrShift*graythresh(TestmapOnesDbl)); + matchAnded=BWimage & BWtestimage; + ANDVal=sum(sum(matchAnded(:,:))); + if ANDVal> MaxANDVal + MaxANDVal=ANDVal; + MaxPos=testPos; + MaxPosDbl=TestmapOnesDbl; + end + end + end + if MaxANDVal>ANDValInitPT + MaxPosDbl=MaxPosDbl; + MaxPos=MaxPos; + else + MaxPosDbl=PTmapOnesDbl; + MaxPos=PTmapPos; + end + + % SKEW Registration + testSkPos=MaxPos; + MaxANDValSk=0; %MaxANDVal; + skQty=0.05; + regDith=4; + for shiftPos=-regDith/2:regDith/2 + for k=-5:5 + sk=k* skQty; + TestmapSkDbl=zeros(2075,1400); + for r=1:24 + for c=1:16 + [skrefPt]=testSkPos{r,c}; + testSkPosR=round(skrefPt(1) + (c*sk + shiftPos)); + testSkPosC=round(skrefPt(2) + (-r*sk + shiftPos)); + a=[testSkPosR,testSkPosC]; % testPos(r,c)={testPosR,testPosC}; + testSkPos(r,c)={a}; + % doCircle + TestmapSkDbl(testSkPosR:(testSkPosR+(diaExt-1)),testSkPosC:(testSkPosC+(diaExt-1)))=cirMask; % optCirMask; end - end - end + end + GraythrShift=1; + BWtestSkimage=im2bw(TestmapSkDbl, GraythrShift*graythresh(TestmapSkDbl)); + matchAndedSk=BWimage & BWtestSkimage; + ANDValSk=sum(sum(matchAndedSk(:,:))); + if ANDValSk> MaxANDValSk + MaxANDValSk=ANDValSk; + MaxPosSk=testSkPos; + MaxPosSkDbl=TestmapSkDbl; + end + end + end - if MaxANDValSk> MaxANDVal - MaxANDVal= MaxANDValSk; - MaxPosDbl= MaxPosSkDbl; - MaxPos= MaxPosSk; - end + if MaxANDValSk> MaxANDVal + MaxANDVal=MaxANDValSk; + MaxPosDbl=MaxPosSkDbl; + MaxPos=MaxPosSk; + end -%----------------------------------------- -%*********Center of Area for Final Registration**************************** -%Note GraythrShift in NImapPT can be used to a lower or higher 'decider' -%and thus effect the centroid(center of area) that this module determines. -%GraythrShift= 1.0 normally allowing the Matlab graythresh to calc. the BW decider - -range= 0; -lastDetMaxCentDbl= zeros(2075,1400); -lastDetMaxPos= cell(24,16); -%*************CIRCLE related************************* -for r=1:24 - for c=1:16 + % Center of Area for Final Registration + % Note GraythrShift in NImapPT can be used to a lower or higher 'decider' + % and thus effect the centroid(center of area) that this module determines. + % GraythrShift=1.0 normally allowing the Matlab graythresh to calc. the BW decider + range=0; + lastDetMaxCentDbl=zeros(2075,1400); + lastDetMaxPos=cell(24,16); + % CIRCLE related + for r=1:24 + for c=1:16 [refPt]=MaxPos{r,c}; refPtR=refPt(1); refPtC=refPt(2); - - - %>>>>>>>>>>>>>>>>>>>>>>>Calc. Centroid Position of spot>>>>>>>>>>>>>>>>>>>> - detPrLo= (MaxPos{r,c}(1)) -(range); detPrHi= (MaxPos{r,c}(1)) + (diaExt+range); - detPcLo= (MaxPos{r,c}(2)) -(range); detPcHi= (MaxPos{r,c}(2)) + (diaExt+range); - - rsum=(sum(BWimage(detPrLo:detPrHi,detPcLo:detPcHi),2)); - csum=(sum(BWimage(detPrLo:detPrHi,detPcLo:detPcHi),1)); - if sum(rsum)>1 && sum(csum)>1 - Rvec = detPrLo:detPrHi; - Cvec = detPcLo:detPcHi; - centR= round((sum(Rvec .*rsum')) /sum(rsum)); - centC= round((sum(Cvec .*csum)) /sum(csum)); - aa=[(centR-diaExt/2) (centC-diaExt/2)]; - else - rsum=(sum(MaxPosDbl(detPrLo:detPrHi,detPcLo:detPcHi),2)); - csum=(sum(MaxPosDbl(detPrLo:detPrHi,detPcLo:detPcHi),1)); - Rvec = detPrLo:detPrHi; - Cvec = detPcLo:detPcHi; - centR= round((sum(Rvec .*rsum')) /sum(rsum)); - centC= round((sum(Cvec .*csum)) /sum(csum)); - %} - end - aa=[(centR-diaExt/2) (centC-diaExt/2)]; - lastDetMaxPos(r,c)={aa}; - %**********2nd Recenter Based on Previous ***************************** - detPrLo= lastDetMaxPos{r,c}(1) -(range); detPrHi= lastDetMaxPos{r,c}(1) + (diaExt+range); - detPcLo= lastDetMaxPos{r,c}(2) -(range); detPcHi= lastDetMaxPos{r,c}(2) + (diaExt+range); - - rsum=(sum(BWimage(detPrLo:detPrHi,detPcLo:detPcHi),2)); - csum=(sum(BWimage(detPrLo:detPrHi,detPcLo:detPcHi),1)); - if sum(rsum)>1 && sum(csum)>1 - Rvec = detPrLo:detPrHi; - Cvec = detPcLo:detPcHi; - centR= round((sum(Rvec .*rsum')) /sum(rsum)); - centC= round((sum(Cvec .*csum)) /sum(csum)); - aa=[(centR-diaExt/2) (centC-diaExt/2)]; - else - rsum=(sum(MaxPosDbl(detPrLo:detPrHi,detPcLo:detPcHi),2)); - csum=(sum(MaxPosDbl(detPrLo:detPrHi,detPcLo:detPcHi),1)); - Rvec = detPrLo:detPrHi; - Cvec = detPcLo:detPcHi; - centR= round((sum(Rvec .*rsum')) /sum(rsum)); - centC= round((sum(Cvec .*csum)) /sum(csum)); - end - aa=[(centR-diaExt/2) (centC-diaExt/2)]; - lastDetMaxPos(r,c)={aa}; - - [CentPt]= lastDetMaxPos{r,c}; - CentPtR= CentPt(1); - CentPtC= CentPt(2); - %******* doCircle - lastDetMaxCentDbl(CentPtR:(CentPtR+(diaExt-1)),CentPtC:(CentPtC+(diaExt-1)))= cirMask; %optCirMask; - - %******************************************************* - - end %end c -end %end r, end for search for maximum intensity spot detection alignment -%****************************************** + % Calc. Centroid Position of spot + detPrLo=(MaxPos{r,c}(1)) -(range); detPrHi=(MaxPos{r,c}(1)) + (diaExt+range); + detPcLo=(MaxPos{r,c}(2)) -(range); detPcHi=(MaxPos{r,c}(2)) + (diaExt+range); + rsum=(sum(BWimage(detPrLo:detPrHi,detPcLo:detPcHi),2)); + csum=(sum(BWimage(detPrLo:detPrHi,detPcLo:detPcHi),1)); + if sum(rsum)>1 && sum(csum)>1 + Rvec=detPrLo:detPrHi; + Cvec=detPcLo:detPcHi; + centR=round((sum(Rvec .*rsum')) /sum(rsum)); + centC=round((sum(Cvec .*csum)) /sum(csum)); + aa=[(centR-diaExt/2) (centC-diaExt/2)]; + else + rsum=(sum(MaxPosDbl(detPrLo:detPrHi,detPcLo:detPcHi),2)); + csum=(sum(MaxPosDbl(detPrLo:detPrHi,detPcLo:detPcHi),1)); + Rvec=detPrLo:detPrHi; + Cvec=detPcLo:detPcHi; + centR=round((sum(Rvec .*rsum')) /sum(rsum)); + centC=round((sum(Cvec .*csum)) /sum(csum)); + end + aa=[(centR-diaExt/2) (centC-diaExt/2)]; + lastDetMaxPos(r,c)={aa}; + % 2nd Recenter Based on Previous + detPrLo=lastDetMaxPos{r,c}(1) -(range); detPrHi=lastDetMaxPos{r,c}(1) + (diaExt+range); + detPcLo=lastDetMaxPos{r,c}(2) -(range); detPcHi=lastDetMaxPos{r,c}(2) + (diaExt+range); + rsum=(sum(BWimage(detPrLo:detPrHi,detPcLo:detPcHi),2)); + csum=(sum(BWimage(detPrLo:detPrHi,detPcLo:detPcHi),1)); + if sum(rsum)>1 && sum(csum)>1 + Rvec=detPrLo:detPrHi; + Cvec=detPcLo:detPcHi; + centR=round((sum(Rvec .*rsum')) /sum(rsum)); + centC=round((sum(Cvec .*csum)) /sum(csum)); + aa=[(centR-diaExt/2) (centC-diaExt/2)]; + else + rsum=(sum(MaxPosDbl(detPrLo:detPrHi,detPcLo:detPcHi),2)); + csum=(sum(MaxPosDbl(detPrLo:detPrHi,detPcLo:detPcHi),1)); + Rvec=detPrLo:detPrHi; + Cvec=detPcLo:detPcHi; + centR=round((sum(Rvec .*rsum')) /sum(rsum)); + centC=round((sum(Cvec .*csum)) /sum(csum)); + end + aa=[(centR-diaExt/2) (centC-diaExt/2)]; + lastDetMaxPos(r,c)={aa}; + [CentPt]=lastDetMaxPos{r,c}; + CentPtR=CentPt(1); + CentPtC=CentPt(2); + % doCircle + lastDetMaxCentDbl(CentPtR:(CentPtR+(diaExt-1)),CentPtC:(CentPtC+(diaExt-1)))=cirMask; % optCirMask; + end + end - BWtestCentimage= im2bw(lastDetMaxCentDbl, GraythrShift*graythresh(lastDetMaxCentDbl)); - matchAndedCent= BWimage & BWtestCentimage; - ANDValCent=sum(sum(matchAndedCent(:,:))); - if ANDValCent>= MaxANDVal - MaxPosDbl= lastDetMaxCentDbl; - MaxPos= lastDetMaxPos; - %detPos=lastDetMaxPos; - end - %detPos=lastDetMaxPos; - detPos=MaxPos; + BWtestCentimage=im2bw(lastDetMaxCentDbl, GraythrShift*graythresh(lastDetMaxCentDbl)); + matchAndedCent=BWimage & BWtestCentimage; + ANDValCent=sum(sum(matchAndedCent(:,:))); + if ANDValCent>=MaxANDVal + MaxPosDbl=lastDetMaxCentDbl; + MaxPos=lastDetMaxPos; + %detPos=lastDetMaxPos; + end + %detPos=lastDetMaxPos; + detPos=MaxPos; + end %if length(tifFileLst) >2 + % Preallocation for speed on 2019_1121 *** + scIntens=zeros(24,16,length(tifFileLst)); + BkgrdMat=zeros(24,16,length(tifFileLst)); + % areaOfIntensAboveBG=zeros(24,16,length(tifFileLst)); + lastDetMaxPos=cell(numRows, numCols); - - - - -%conclusion of NIplateImagPTreg******************************************** -%**************************************************************************** - -end %if length(tifFileLst) >2 -%************************************************************************* - - - -%preallocation for speed on 2019_1121 *** -scIntens= zeros(24,16,length(tifFileLst)); -BkgrdMat= zeros(24,16,length(tifFileLst)); -%areaOfIntensAboveBG= zeros(24,16,length(tifFileLst)); -lastDetMaxPos= cell(numRows, numCols); -%*********************************************************************************************************************** -for tPt=1:length(tifFileLst) + for tPt=1:length(tifFileLst) tPt; - -tifFile= char(tifFileLst(tPt)); + tifFile=char(tifFileLst(tPt)); + fullsc=plateImage{tPt}; + fIntsc=fullsc; + % Bad Image Filter Zone + % NORMALLY turned off; This is Hand HARD CODE SPECIFIC to particular ExpJOB + specificHardFilterCode=0; + if specificHardFilterCode==1 && tPt==1 + % Plate scratch filter prototype could be added here + fIntsc(:,1105:1190)=uint8(67); %Specific blocking area set to background level here + % fIntsc(:,:)=uint8(67); % set entire image to background level if 1.bmp is + % bad. This allows acquisiton of the initial "Print Time" from .bmp time stamp. + end + tp=90; bt=1935; lf=90; rt=1318; blkVal=10; %tp=90; + fIntsc(1:tp,:)=uint8(blkVal); %top of blocking frame + fIntsc(bt:ImHeigth,:)=uint8(blkVal); %bottom of blocking frame + fIntsc(:,1:lf)=uint8(blkVal); %left side of blocking frame + fIntsc(:,rt:ImWidth)=uint8(blkVal); %right side of blocking frame + bwIntsc=im2bw(fIntsc,80/255); - -fullsc= plateImage{tPt}; -fIntsc=fullsc; -%**********Bad Image Filter Zone *************************** -%NORMALLY turned off; This is Hand HARD CODE SPECIFIC to particular ExpJOB -specificHardFilterCode=0; -if specificHardFilterCode==1 && tPt==1 - %Plate scratch filter prototype could be added here -fIntsc(:,1105:1190)=uint8(67); %Specific blocking area set to background level here -%fIntsc(:,:)=uint8(67); % set entire image to background level if 1.bmp is -%bad. This allows acquisiton of the initial "Print Time" from .bmp time stamp. -end -%************************************************** -tp=90; bt=1935; lf=90; rt=1318; blkVal=10; %tp=90; -fIntsc(1:tp,:)=uint8(blkVal); %top of blocking frame -fIntsc(bt:ImHeigth,:)=uint8(blkVal); %bottom of blocking frame -fIntsc(:,1:lf)=uint8(blkVal); %left side of blocking frame -fIntsc(:,rt:ImWidth)=uint8(blkVal); %right side of blocking frame -bwIntsc= im2bw(fIntsc,80/255); - -%********************Collect Intensities (Absorbances)************************** -%end for search for maximum intensity spot detection alignment -if doCircle==1 -earlySrc1Thres=.31*cirPixA*255; %Initial search spot det. threshold -earlySrc2Thres= spotThres*cirPixA*255; %Course search spot det. threshold -definedSpot= (spotThres+.03)*cirPixA*255; %typically .34 ; 20000; %Intensity at which a spot is well defined for a width=24 {formerly20} % 0.5*((width^2 * (255- backgrdPixel)) - -else -earlySrc1Thres=.31*(width^2)*255; %Initial search spot det. threshold -earlySrc2Thres= spotThres*(width^2)*255; %Course search spot det. threshold -definedSpot= (spotThres+.03)*(width^2)*255; %typically .34 ; 20000; %Intensity at which a spot is well defined for a width=24 {formerly20} % 0.5*((width^2 * (255- backgrdPixel)) -end -detMaxPos = cell(numRows, numCols); -bcent = cell(numRows, numCols); - -for r=1:numRows - for c=1:numCols + % Collect Intensities (Absorbances) + % end for search for maximum intensity spot detection alignment + if doCircle==1 + earlySrc1Thres=.31*cirPixA*255; % Initial search spot det. threshold + earlySrc2Thres=spotThres*cirPixA*255; % Course search spot det. threshold + definedSpot=(spotThres+.03)*cirPixA*255; % typically .34 ; 20000; %Intensity at which a spot is well defined for a width=24 {formerly20} % 0.5*((width^2 * (255- backgrdPixel)) + else + earlySrc1Thres=.31*(width^2)*255; % Initial search spot det. threshold + earlySrc2Thres=spotThres*(width^2)*255; % Course search spot det. threshold + definedSpot=(spotThres+.03)*(width^2)*255; % typically .34 ; 20000; %Intensity at which a spot is well defined for a width=24 {formerly20} % 0.5*((width^2 * (255- backgrdPixel)) + end + detMaxPos=cell(numRows, numCols); + bcent=cell(numRows, numCols); + for r=1:numRows + for c=1:numCols [refPt]=detPos{r,c}; refPtR=refPt(1); InitR=refPt(1); refPtC=refPt(2); InitC=refPt(2); - %*****ZeroSearchIntens **************************************************** - %clear ('searchIntens') - searchIntens= []; - - if doCircle==1 - % cutout= fIntsc(refPtR+1:(refPtR+(diaExt)),(refPtC+1:(refPtC+diaExt))); - cutout= fIntsc(refPtR:(refPtR+(diaExt-1)),refPtC:(refPtC+(diaExt-1))); - Imcir= cutout .* uint8(cirMask); - zeroSearchIntens=sum(sum(Imcir(1:(diaExt-1),1:(diaExt-1)))); - - else %standard square analysis area - refPtRExt=refPtR+widthEx; - if (refPtRExt)> size(fIntsc,1), refPtRExt= size(fIntsc,1); end - refPtCExt=refPtC+widthEx; - if (refPtCExt)> size(fIntsc,2), refPtCExt= size(fIntsc,2); end - zeroSearchIntens=sum(sum(fIntsc(refPtR:(refPtRExt),refPtC:(refPtCExt)))); - end - %************************************************************************** - %clear ('searchIntens') - searchIntens= []; + % ZeroSearchIntens + % clear ('searchIntens') + searchIntens=[]; + if doCircle==1 + % cutout=fIntsc(refPtR+1:(refPtR+(diaExt)),(refPtC+1:(refPtC+diaExt))); + cutout=fIntsc(refPtR:(refPtR+(diaExt-1)),refPtC:(refPtC+(diaExt-1))); + Imcir=cutout .* uint8(cirMask); + zeroSearchIntens=sum(sum(Imcir(1:(diaExt-1),1:(diaExt-1)))); + else % standard square analysis area + refPtRExt=refPtR+widthEx; + if (refPtRExt)> size(fIntsc,1), refPtRExt=size(fIntsc,1); end + refPtCExt=refPtC+widthEx; + if (refPtCExt)> size(fIntsc,2), refPtCExt=size(fIntsc,2); end + zeroSearchIntens=sum(sum(fIntsc(refPtR:(refPtRExt),refPtC:(refPtCExt)))); + end + % clear ('searchIntens') + searchIntens=[]; intensMax=-1; - src1cnt=0; %zero count for oneshot calc of centroid after initial location of spot during Src1 - if stopSearch(r,c)==false - - %*******************Set Range and Dither******************** - if intensPrev(r,c)< earlySrc1Thres %First Search parameters insert + src1cnt=0; % zero count for oneshot calc of centroid after initial location of spot during Src1 + if stopSearch(r,c)==false + % Set Range and Dither******** + if intensPrev(r,c)< earlySrc1Thres %First Search parameters insert rRangeUpper=rCRangeUpper; rRangeLower=rCRangeLower; cRangeLower=cCRangeLower; cRangeUpper=cCRangeUpper; - dither=ditherI; - - [searchStartRef]= detPos{r,c}; - - elseif intensPrev(r,c)> earlySrc1Thres &&intensPrev(r,c)<= earlySrc2Thres %Second Search parameters insert - rRangeUpper= -CSrchRng; %rCRangeUpper; - rRangeLower= CSrchRng; %rCRangeLower; - cRangeLower= -CSrchRng; %cCRangeLower; - cRangeUpper= CSrchRng; %cCRangeUpper; + dither=ditherI; + [searchStartRef]=detPos{r,c}; + elseif intensPrev(r,c)> earlySrc1Thres &&intensPrev(r,c)<= earlySrc2Thres %Second Search parameters insert + rRangeUpper=-CSrchRng; % rCRangeUpper; + rRangeLower=CSrchRng; % rCRangeLower; + cRangeLower=-CSrchRng; % cCRangeLower; + cRangeUpper=CSrchRng; % cCRangeUpper; dither=ditherC; - - %src1cnt=src1cnt+1; - %After spot defined above selected threshold, start search from - %center of the calc'd spot area - %Calc. Center of Area (black and white (1's and 0's) - %detPrLo= (detPos{r,c}(1)) -18; detPrHi= (detPos{r,c}(1)) +width+18; - %detPcLo= (detPos{r,c}(2)) -18; detPcHi= (detPos{r,c}(2)) +width+18; - detPrLo= (detPos{r,c}(1)) -CSrchRng; detPrHi= (detPos{r,c}(1)) +width+CSrchRng; %Mod 15_0707 User contrain search - detPcLo= (detPos{r,c}(2)) -CSrchRng; detPcHi= (detPos{r,c}(2)) +width+CSrchRng; %Mod 15_0707 User contrain search - - brsum=(sum(bwIntsc(detPrLo:detPrHi,detPcLo:detPcHi),2)); - bcsum=(sum(bwIntsc(detPrLo:detPrHi,detPcLo:detPcHi),1)); - bRvec= detPrLo:detPrHi; - bCvec= detPcLo:detPcHi; - bcentR= round((sum(bRvec .*brsum')) /sum(brsum)); - bcentC= round((sum(bCvec .*bcsum)) /sum(bcsum)); - bcent{r,c}= [bcentR, bcentC]; - cornerOfset= ceil((0.5*width)+CSrchRng); %ceil(0.5*(width+(2*CSrchRng))); - refCorner{r,c}= [(bcentR-cornerOfset),(bcentC-cornerOfset)]; - - %NAN blowup preventive - if sum(brsum)>5 && sum(bcsum)>5 - %[searchStartRef]= cell2mat(bcent(r,c)); - [searchStartRef]= cell2mat(refCorner(r,c)); - else - [searchStartRef]= detPos{r,c}; - end - - elseif intensPrev(r,c) >earlySrc2Thres && intensPrev(r,c)<= definedSpot + % src1cnt=src1cnt+1; + % After spot defined above selected threshold, start search from + % center of the calc'd spot area + % Calc. Center of Area (black and white (1's and 0's) + % detPrLo=(detPos{r,c}(1)) -18; detPrHi=(detPos{r,c}(1)) +width+18; + % detPcLo=(detPos{r,c}(2)) -18; detPcHi=(detPos{r,c}(2)) +width+18; + detPrLo=(detPos{r,c}(1)) -CSrchRng; detPrHi=(detPos{r,c}(1)) +width+CSrchRng; + detPcLo=(detPos{r,c}(2)) -CSrchRng; detPcHi=(detPos{r,c}(2)) +width+CSrchRng; + brsum=(sum(bwIntsc(detPrLo:detPrHi,detPcLo:detPcHi),2)); + bcsum=(sum(bwIntsc(detPrLo:detPrHi,detPcLo:detPcHi),1)); + bRvec=detPrLo:detPrHi; + bCvec=detPcLo:detPcHi; + bcentR=round((sum(bRvec .*brsum')) /sum(brsum)); + bcentC=round((sum(bCvec .*bcsum)) /sum(bcsum)); + bcent{r,c}=[bcentR, bcentC]; + cornerOfset=ceil((0.5*width)+CSrchRng); %ceil(0.5*(width+(2*CSrchRng))); + refCorner{r,c}=[(bcentR-cornerOfset),(bcentC-cornerOfset)]; + %NAN blowup preventive + if sum(brsum)>5 && sum(bcsum)>5 + % [searchStartRef]=cell2mat(bcent(r,c)); + [searchStartRef]=cell2mat(refCorner(r,c)); + else + [searchStartRef]=detPos{r,c}; + end + elseif intensPrev(r,c) >earlySrc2Thres && intensPrev(r,c)<= definedSpot rRangeUpper=rFRangeUpper; %Fine Search parameters insert rRangeLower=rFRangeLower; cRangeLower=cFRangeLower; cRangeUpper=cFRangeUpper; dither=ditherF; - zz=lastDetMaxPos(r,c); - [searchStartRef]= zz{1,1}; - end - %*******************Fixed to Roam Switch******************** - %{ - if intensPrev(r,c)<=earlySrc1Thres - % [searchRef]= detPos{r,c}+ [rOff,cOff]; - [searchStartRef]= detPos{r,c}; - end - - if intensPrev(r,c)> earlySrc1Thres && intensMax= earlySrc2Thres, %Let Roam - zz=lastDetMaxPos(r,c); - [searchStartRef]= zz{1,1}; - - end - %} - %************************************************************* - extent=CSrchRng; - Rmin=InitR-extent; Rmax=InitR+extent; - Cmin=InitC-extent; Cmax=InitC+extent; - - %clear cutout %just found 20_0327 - cutout= []; - for rOff=rRangeUpper:dither:rRangeLower - for cOff=cRangeLower:dither:cRangeUpper - [searchRef]= searchStartRef + [rOff,cOff]; - refPtR=searchRef(1); - refPtC=searchRef(2); - if refPtRRmax,refPtR= Rmax;end - if refPtCCmax,refPtC= Cmax;end - %******Do Circle analysis****** - if doCircle==1 - % cutout= fIntsc(refPtR+1:(refPtR+(diaExt)),(refPtC+1:(refPtC+diaExt))); - try - cutout= fIntsc(refPtR:(refPtR+(diaExt-1)),refPtC:(refPtC+(diaExt-1))); - catch - tPt; - r; - c; - end - Imcir= cutout .* uint8(cirMask); - searchIntens=sum(sum(Imcir(1:(diaExt-1),1:(diaExt-1)))); - - else %standard square analysis area - refPtRExt=refPtR+widthEx; - if (refPtRExt)> size(fIntsc,1), refPtRExt= size(fIntsc,1); end - refPtCExt=refPtC+widthEx; - if (refPtCExt)> size(fIntsc,2), refPtCExt= size(fIntsc,2); end - searchIntens=sum(sum(fIntsc(refPtR:(refPtRExt),refPtC:(refPtCExt)))); - end - %**************************************** - if searchIntens > intensMax - intensMax=searchIntens; - intens(r,c)=searchIntens; - intensPrev(r,c)=searchIntens; - a=[refPtR,refPtC]; - detMaxPos(r,c)={a}; - lastDetMaxPos(r,c)=detMaxPos(r,c); - end - if intensMax>definedSpot || intensMax<2 - stopSearch(r,c)=true; - end - end %for cOff - end %for rOff - - if intensMax< noSpot - intensMax= zeroSearchIntens; - lastDetMaxPos(r,c)= {refPt}; - end - - else %elseif Spot is well defined STOPSearch strong + zz=lastDetMaxPos(r,c); + [searchStartRef]=zz{1,1}; + end + % Fixed to Roam Switch + %{ + if intensPrev(r,c)<=earlySrc1Thres + % [searchRef]=detPos{r,c}+ [rOff,cOff]; + [searchStartRef]=detPos{r,c}; + end + if intensPrev(r,c)> earlySrc1Thres && intensMax=earlySrc2Thres, %Let Roam + zz=lastDetMaxPos(r,c); + [searchStartRef]=zz{1,1}; + end + %} + extent=CSrchRng; + Rmin=InitR-extent; Rmax=InitR+extent; + Cmin=InitC-extent; Cmax=InitC+extent; + + % clear cutout %just found 20_0327 + cutout=[]; + for rOff=rRangeUpper:dither:rRangeLower + for cOff=cRangeLower:dither:cRangeUpper + [searchRef]=searchStartRef + [rOff,cOff]; + refPtR=searchRef(1); + refPtC=searchRef(2); + if refPtRRmax,refPtR=Rmax;end + if refPtCCmax,refPtC=Cmax;end + % Do Circle analysis + if doCircle==1 + % cutout=fIntsc(refPtR+1:(refPtR+(diaExt)),(refPtC+1:(refPtC+diaExt))); + try + cutout=fIntsc(refPtR:(refPtR+(diaExt-1)),refPtC:(refPtC+(diaExt-1))); + catch + tPt; + r; + c; + end + Imcir=cutout .* uint8(cirMask); + searchIntens=sum(sum(Imcir(1:(diaExt-1),1:(diaExt-1)))); + else %standard square analysis area + refPtRExt=refPtR+widthEx; + if (refPtRExt)> size(fIntsc,1), refPtRExt=size(fIntsc,1); end + refPtCExt=refPtC+widthEx; + if (refPtCExt)> size(fIntsc,2), refPtCExt=size(fIntsc,2); end + searchIntens=sum(sum(fIntsc(refPtR:(refPtRExt),refPtC:(refPtCExt)))); + end + if searchIntens > intensMax + intensMax=searchIntens; + intens(r,c)=searchIntens; + intensPrev(r,c)=searchIntens; + a=[refPtR,refPtC]; + detMaxPos(r,c)={a}; + lastDetMaxPos(r,c)=detMaxPos(r,c); + end + if intensMax>definedSpot || intensMax<2 + stopSearch(r,c)=true; + end + end + end + if intensMax< noSpot + intensMax=zeroSearchIntens; + lastDetMaxPos(r,c)={refPt}; + end + else % elseif Spot is well defined STOPSearch strong [refPt]=lastDetMaxPos{r,c}; refPtR=refPt(1); refPtC=refPt(2); if doCircle==1 - cutout= fIntsc(refPtR:(refPtR+(diaExt-1)),refPtC:(refPtC+(diaExt-1))); - Imcir= cutout .* uint8(cirMask); - intens(r,c)=sum(sum(Imcir(1:(diaExt-1),1:(diaExt-1)))); + cutout=fIntsc(refPtR:(refPtR+(diaExt-1)),refPtC:(refPtC+(diaExt-1))); + Imcir=cutout .* uint8(cirMask); + intens(r,c)=sum(sum(Imcir(1:(diaExt-1),1:(diaExt-1)))); else %standard square analysis area - intens(r,c)=sum(sum(fIntsc(refPtR:(refPtR+widthEx),refPtC:(refPtC+widthEx)))); + intens(r,c)=sum(sum(fIntsc(refPtR:(refPtR+widthEx),refPtC:(refPtC+widthEx)))); end - end %stopSearch loop - %******************************************************* - %{ - if intensMax> earlySrc1Thres && intensMax< earlySrc2Thres && src1cnt==0, - - %{ - src1cnt=src1cnt+1; - detPrLo= (detPos{r,c}(1)) -12; detPrHi= (detPos{r,c}(1)) +width+12; - detPcLo= (detPos{r,c}(2)) -12; detPcHi= (detPos{r,c}(2)) +width+12; - rsum=(sum(fIntsc(detPrLo:detPrHi,detPcLo:detPcHi),2)); - csum=(sum(fIntsc(detPrLo:detPrHi,detPcLo:detPcHi),1)); - Rvec= detPrLo:detPrHi; - Cvec= detPcLo:detPcHi; - centR= round((sum(Rvec .*rsum')) /sum(rsum)); - centC= round((sum(Cvec .*csum)) /sum(csum)); - cent{r,c}= [centR, centC]; - %} - end - %} - %******************************************************* + end + %{ + if intensMax> earlySrc1Thres && intensMax< earlySrc2Thres && src1cnt==0, + %{ + src1cnt=src1cnt+1; + detPrLo=(detPos{r,c}(1)) -12; detPrHi=(detPos{r,c}(1)) +width+12; + detPcLo=(detPos{r,c}(2)) -12; detPcHi=(detPos{r,c}(2)) +width+12; + rsum=(sum(fIntsc(detPrLo:detPrHi,detPcLo:detPcHi),2)); + csum=(sum(fIntsc(detPrLo:detPrHi,detPcLo:detPcHi),1)); + Rvec=detPrLo:detPrHi; + Cvec=detPcLo:detPcHi; + centR=round((sum(Rvec .*rsum')) /sum(rsum)); + centC=round((sum(Cvec .*csum)) /sum(csum)); + cent{r,c}=[centR, centC]; + %} + end + %} + end + end - - end %for c -end %for r -end for search -%**************************************************************************************************************** -%[F_spots,bmtp, BGthres,bmm,rwm,lstTpt,BGsc,totBkgrd]= ... - % NIgenBkGrdDataPar4Fnc(ImParMat, tifFileLst, lastDetMaxPos, numRows, numCols, fullsc, tPt,BGthres, doCircle, cirPixA,diaExt, cirMask, BGTav); -%NIgenBkGrdDataPar4Fnc - -%function [F_spots,bmtp, BGthres,bmm,rwm,lstTpt,BGsc,totBkgrd ]= ... -% NIgenBkGrdDataPar4Fnc(ImParMat, tifFileLst, lastDetMaxPos, numRows, numCols, fullsc, tPt, BGthres, doCircle, cirPixA, diaExt, cirMask, BGTav)% Called by NIscanIntensBG.m -% -%global resDir -global ExpOutmat -%global pixsAboveBG -MPnum=ImParMat(1); -destPerMP=ImParMat(2); -spotThres=ImParMat(4)/100; %selScan=ImParMat(4); -width=ImParMat(5); -dither=ImParMat(6); -BGthresInput=ImParMat(3); % a value of percent to be added (20=>1.20*BGTav) -lstTpt=length(tifFileLst); - -LfOffset= 65; %lf; %Ncode -TopOffset= 65; %tp; -rtLim=1350; %1400; %1350; -rtNotchOffset=10; -cushion=20; - %close2edgeTol=90; -botLim= 2003; -botNotchOffset=60; - - -%**********Initialize************************** -%clear('totBkgrd') -%clear('pixsAboveBG') -%clear('lineV','pixCnt','lineSum,meanBkgrd') -%clear('rw','rwm') -totBkgrd= 0; -pixsAboveBG= 0; -lineV= 0; pixCnt= 0; lineSum= 0; meanBkgrd= 85; -rw= 0; rwm= 0; -%************************************************* -%****Start Generation of BackGround data after the 2nd Row (&& 2nd Col) -%*****Optomized spot positions determined. *********** - -%if r>=2 && c>=2, - BGsc=zeros(2075,1400); %Empsc; - widthEx=width-1; %width extention from reference point -for r=1:numRows - for c=1:numCols - refP=lastDetMaxPos{r,c}; - if r1, refPrR=lastDetMaxPos{r-1,c}; end - if c>1, refPrC=lastDetMaxPos{r,c-1}; end - %****At least NINE conditions which must be treated differently - % ++++++++++ Condition (0) ---most spots fall in this central category - if r>1 && r1 && c0 - refBG(1)=refP(1)- floor(0.5*(refP(1) - TopOffset)); - refBG(2)=refP(2)- floor(0.5*(refP(2) - LfOffset)); %Icode -0 - refBG(3)=refP(1)+widthEx+ floor(0.5*((refNxR(1)-(refP(1)+widthEx)))); - refBG(4)=refP(2)+widthEx+ floor(0.5*((refNxC(2)-(refP(2)+widthEx)))); - detBG(r,c)= {uint8(refBG)}; %Store Background Reference pt data in a Cell + % [F_spots,bmtp, BGthres,bmm,rwm,lstTpt,BGsc,totBkgrd]=... + % NIgenBkGrdDataPar4Fnc(ImParMat, tifFileLst, lastDetMaxPos, numRows, numCols, fullsc, tPt,BGthres, doCircle, cirPixA,diaExt, cirMask, BGTav); + % NIgenBkGrdDataPar4Fnc + % function [F_spots,bmtp, BGthres,bmm,rwm,lstTpt,BGsc,totBkgrd ]=... + % NIgenBkGrdDataPar4Fnc(ImParMat, tifFileLst, lastDetMaxPos, numRows, numCols, fullsc, tPt, BGthres, doCircle, cirPixA, diaExt, cirMask, BGTav) + % Called by NIscanIntensBG.m -%clear('lineV','pixCnt','lineSum') -lineV= fullsc(refBG(1),refBG(2):refBG(4)-1); %mean across top rt -if tPt==1 || tPt==lstTpt,rw=lineV';end -pixCnt(1)=nnz(lineV .* uint8(lineV1.20*BGTav) + lstTpt=length(tifFileLst); + LfOffset=65; %lf; %Ncode + TopOffset=65; %tp; + rtLim=1350; %1400; %1350; + rtNotchOffset=10; + cushion=20; + % close2edgeTol=90; + botLim=2003; + botNotchOffset=60; + % Initialize + % clear('totBkgrd') + % clear('pixsAboveBG') + % clear('lineV','pixCnt','lineSum,meanBkgrd') + % clear('rw','rwm') + totBkgrd=0; + pixsAboveBG=0; + lineV=0; pixCnt=0; lineSum=0; meanBkgrd=85; + rw=0; rwm=0; + % Start Generation of BackGround data after the 2nd Row (&& 2nd Col) + % Optimized spot positions determined + %if r>=2 && c>=2, + BGsc=zeros(2075,1400); %Empsc; + widthEx=width-1; %width extention from reference point + for r=1:numRows + for c=1:numCols + refP=lastDetMaxPos{r,c}; + if r1, refPrR=lastDetMaxPos{r-1,c}; end + if c>1, refPrC=lastDetMaxPos{r,c-1}; end -%{ -lineSum(1)=sum((fullsc(refBG(1),refBG(2):refBG(4)-1))); %mean across top rt -lineSum(2)=sum((fullsc(refBG(1):refBG(3)-1,refBG(2)))); %mean down lf -lineSum(3)=sum((fullsc(refBG(1):refBG(3)-1,refBG(4)))); %mean down rt -lineSum(4)=sum((fullsc(refBG(3),refBG(2):refBG(4)-1))); %mean across bot rt -meanBkgrd = (sum(lineSum(1:4)))./ (2*((refBG(4)-refBG(2))+(refBG(3)-refBG(1)))); -totBkgrd(r,c) = round(meanBkgrd* width^2); -%} - end -%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -%*********** Condition (1a) ---row1 across cols 2->79 - if r==1 && c>1 && c(size(fullsc,2)-close2edgeTol)%if intens area too close to edge - if refBGcExt>(rtLim-cushion)%if intens area too close to edge - refBG(4)=rtLim-rtNotchOffset; - else - refBG(4)=refP(2)+widthEx+ floor(0.5*(rtLim-refBGcExt)); - end - detBG(r,c)= {uint8(refBG)}; %Store Background Reference pt data in a Cell - -%clear('lineV','pixCnt','lineSum') -lineV= fullsc(refBG(1),refBG(2):refBG(4)-1); % across top rt -if tPt==1 || tPt==lstTpt,rw=lineV';end -pixCnt(1)=nnz(lineV .* uint8(lineV(size(fullsc,2)-close2edgeTol) %if intens area too close to edge -if refBGcExt>(rtLim-cushion) %if intens area too close to edge - meanBkgrd = (sum(lineSum(1:4)))./ (sum(pixCnt(1:4))); - if sum(pixCnt(1:4))==0, meanBkgrd=double(BGthres(r,c));end - %meanBkgrd = (lineSum(1)+lineSum(2)+lineSum(4))./ ... - %((2*(refBG(4)-refBG(2))+(refBG(3)-refBG(1)))); %divby 2*across+1*down - if doCircle==1, totBkgrd(r,c) = meanBkgrd* cirPixA; else totBkgrd(r,c) = meanBkgrd* width^2; end - -else - %clear('lineV') %3 - lineV = fullsc(refBG(1):refBG(3)-1,refBG(4)); %mean down rt - if tPt==1 || tPt==lstTpt,rw=[rw;lineV];end - pixCnt(3)=nnz(lineV .* uint8(lineV1 && r1 && c0 + refBG(1)=refP(1)- floor(0.5*(refP(1) - TopOffset)); + refBG(2)=refP(2)- floor(0.5*(refP(2) - LfOffset)); % Icode -0 + refBG(3)=refP(1)+widthEx+ floor(0.5*((refNxR(1)-(refP(1)+widthEx)))); + refBG(4)=refP(2)+widthEx+ floor(0.5*((refNxC(2)-(refP(2)+widthEx)))); + detBG(r,c)={uint8(refBG)}; % Store Background Reference pt data in a Cell + % clear('lineV','pixCnt','lineSum') + lineV=fullsc(refBG(1),refBG(2):refBG(4)-1); %mean across top rt + if tPt==1 || tPt==lstTpt,rw=lineV';end + pixCnt(1)=nnz(lineV .* uint8(lineV47 farRight col edge - if r>1 && r(botLim-botNotchOffset)%if intens area not too close to bot edge else - refBG(3)=botLim + cushion; - else - refBG(3)=refP(1)+widthEx+ floor(0.5*(botLim-refBGrExt)); - end - if refBGcExt>(rtLim- cushion)%if intens area not too close to edge else - refBG(4)= rtLim -cushion; - else - refBG(4)=refP(2)+widthEx+ floor(0.5*(rtLim-refBGcExt)); - end - detBG(r,c)= {uint8(refBG)}; %Store Background Reference pt data in a Cell - -%clear('lineV','pixCnt','lineSum') %1 -lineV= fullsc(refBG(1),refBG(2):refBG(4)-1); % across top rt -if tPt==1 || tPt==lstTpt,rw=lineV';end -pixCnt(1)=nnz(lineV .* uint8(lineV(size(fullsc,2)-close2edgeTol)&&... - if refBGcExt>(rtLim-cushion)&&... - refBGrExt<(botLim-botNotchOffset) %if intens area too close to right edge only - %clear('lineV') %4 - lineV = fullsc(refBG(3),refBG(2):refBG(4)-1); %mean across bot rt - if tPt==1 || tPt==lstTpt,rw=[rw;lineV'];end - pixCnt(4)=nnz(lineV .* uint8(lineV(botLim-botNotchOffset) &&... - refBGcExt>(rtLim-cushion)%if intens area too close to bottom edge only - %clear('lineV') %3 - lineV = fullsc(refBG(1):refBG(3)-1,refBG(4)); %mean down rt - if tPt==1 || tPt==lstTpt,rw=[rw;lineV];end - pixCnt(3)=nnz(lineV .* uint8(lineV(size(fullsc,2)-close2edgeTol)&& ... -elseif refBGcExt>(rtLim-cushion)&& ... - refBGrExt>(botLim-botNotchOffset) %if intens area too close to both right edge and bottom edge - meanBkgrd = (sum(lineSum(1:4)))./ (sum(pixCnt(1:4))); - if sum(pixCnt(1:4))==0, meanBkgrd=double(BGthres(r,c));end - %meanBkgrd = (lineSum(1)+lineSum(2))./ ... - %((refBG(4)-refBG(2)+(refBG(3)-refBG(1)))); %divby 1across+1*down - if doCircle==1, totBkgrd(r,c) = meanBkgrd* cirPixA; else totBkgrd(r,c) = meanBkgrd* width^2; end - -else - %clear('lineV') %3 - lineV = fullsc(refBG(1):refBG(3)-1,refBG(4)); %mean down rt - if tPt==1 || tPt==lstTpt,rw=[rw;lineV];end - pixCnt(3)=nnz(lineV .* uint8(lineV1 && c(botLim-botNotchOffset)%if intens area not too close to bot edge else - refBG(3)=botLim + cushion; - else - refBG(3)=refP(1)+widthEx+ floor(0.5*(botLim-refBGrExt)); - end - if rem(c,numCols)==0 - refBG(4)=refP(2)+widthEx+ floor(0.5*(plateEdgeSpace)); - else - refBG(4)=refP(2)+widthEx+ floor(0.5*(refNxC(2)-(refP(2)+widthEx))); - %refBG(4)=refP(2)+widthEx+ floor(0.5*(size(fullsc,2)-refBGcExt)); - end - - detBG(r,c)= {uint8(refBG)}; %Store Background Reference pt data in a Cell - -%clear('lineV','pixCnt','lineSum') %1 -lineV= fullsc(refBG(1),refBG(2):refBG(4)-1); % across top rt -if tPt==1 || tPt==lstTpt,rw=lineV';end -pixCnt(1)=nnz(lineV .* uint8(lineV(botLim-botNotchOffset) %if intens area too close to bottom edge - meanBkgrd = (sum(lineSum(1:4)))./ (sum(pixCnt(1:4))); - if sum(pixCnt(1:4))==0, meanBkgrd=double(BGthres(r,c));end - %meanBkgrd = (lineSum(1)+lineSum(2)+lineSum(4))./ ... - %((refBG(4)-refBG(2)+(2*(refBG(3)-refBG(1))))); %divby 1*across+2*down - if doCircle==1, totBkgrd(r,c) = meanBkgrd* cirPixA; else totBkgrd(r,c) = meanBkgrd* width^2; end - -else - %clear('lineV') %4 - lineV = fullsc(refBG(3),refBG(2):refBG(4)-1); %mean across bot rt - if tPt==1 || tPt==lstTpt,rw=[rw;lineV'];end - pixCnt(4)=nnz(lineV .* uint8(lineV(botLim-botNotchOffset)%if intens area not too close to bot edge else - refBG(3)=botLim + cushion; + % Condition 1a + if r==1 && c>1 && c(botLim-botNotchOffset) %if intens area too close to bottom edge - meanBkgrd = (sum(lineSum(1:4)))./ (sum(pixCnt(1:4))); - if sum(pixCnt(1:4))==0, meanBkgrd=double(BGthres(r,c));end - %meanBkgrd = (lineSum(1)+lineSum(2)+lineSum(3))./ ... - %((refBG(4)-refBG(2)+(2*(refBG(3)-refBG(1))))); %divby 1*across+2*down - if doCircle==1, totBkgrd(r,c) = meanBkgrd* cirPixA; else totBkgrd(r,c) = meanBkgrd* width^2; end - - else -%clear('lineV') %4 -lineV = fullsc(refBG(3),refBG(2):refBG(4)-1); %mean across bot rt -if tPt==1 || tPt==lstTpt,rw=[rw;lineV'];end -pixCnt(4)=nnz(lineV .* uint8(lineV1 && r(size(fullsc,2)-close2edgeTol)%if intens area too close to edge + if refBGcExt>(rtLim-cushion)%if intens area too close to edge + refBG(4)=rtLim-rtNotchOffset; + else + refBG(4)=refP(2)+widthEx+ floor(0.5*(rtLim-refBGcExt)); + end + detBG(r,c)={uint8(refBG)}; %Store Background Reference pt data in a Cell + % clear('lineV','pixCnt','lineSum') + lineV=fullsc(refBG(1),refBG(2):refBG(4)-1); % across top rt + if tPt==1 || tPt==lstTpt,rw=lineV';end + pixCnt(1)=nnz(lineV .* uint8(lineV(size(fullsc,2)-close2edgeTol) %if intens area too close to edge + if refBGcExt>(rtLim-cushion) %if intens area too close to edge + meanBkgrd=(sum(lineSum(1:4)))./ (sum(pixCnt(1:4))); + if sum(pixCnt(1:4))==0, meanBkgrd=double(BGthres(r,c));end + % meanBkgrd=(lineSum(1)+lineSum(2)+lineSum(4))./ ... + % ((2*(refBG(4)-refBG(2))+(refBG(3)-refBG(1)))); %divby 2*across+1*down + if doCircle==1, totBkgrd(r,c)=meanBkgrd* cirPixA; else totBkgrd(r,c)=meanBkgrd* width^2; end + else + % clear('lineV') %3 + lineV=fullsc(refBG(1):refBG(3)-1,refBG(4)); %mean down rt + if tPt==1 || tPt==lstTpt,rw=[rw;lineV];end + pixCnt(3)=nnz(lineV .* uint8(lineV47 farRight col edge + if r>1 && r(botLim-botNotchOffset)%if intens area not too close to bot edge else + refBG(3)=botLim + cushion; + else + refBG(3)=refP(1)+widthEx+ floor(0.5*(botLim-refBGrExt)); + end + if refBGcExt>(rtLim- cushion)%if intens area not too close to edge else + refBG(4)=rtLim -cushion; + else + refBG(4)=refP(2)+widthEx+ floor(0.5*(rtLim-refBGcExt)); + end + detBG(r,c)={uint8(refBG)}; %Store Background Reference pt data in a Cell + + % clear('lineV','pixCnt','lineSum') %1 + lineV=fullsc(refBG(1),refBG(2):refBG(4)-1); % across top rt + if tPt==1 || tPt==lstTpt,rw=lineV';end + pixCnt(1)=nnz(lineV .* uint8(lineV(size(fullsc,2)-close2edgeTol)&&... + if refBGcExt>(rtLim-cushion)&&... + refBGrExt<(botLim-botNotchOffset) % if intens area too close to right edge only + % clear('lineV') %4 + lineV=fullsc(refBG(3),refBG(2):refBG(4)-1); % mean across bot rt + if tPt==1 || tPt==lstTpt,rw=[rw;lineV'];end + pixCnt(4)=nnz(lineV .* uint8(lineV(botLim-botNotchOffset) && ... + refBGcExt>(rtLim-cushion)%if intens area too close to bottom edge only + % clear('lineV') %3 + lineV=fullsc(refBG(1):refBG(3)-1,refBG(4)); % mean down rt + if tPt==1 || tPt==lstTpt,rw=[rw;lineV];end + pixCnt(3)=nnz(lineV .* uint8(lineV(size(fullsc,2)-close2edgeTol)&& ... + elseif refBGcExt>(rtLim-cushion)&& ... + refBGrExt>(botLim-botNotchOffset) % if intens area too close to both right edge and bottom edge + meanBkgrd=(sum(lineSum(1:4)))./ (sum(pixCnt(1:4))); + if sum(pixCnt(1:4))==0, meanBkgrd=double(BGthres(r,c));end + % meanBkgrd=(lineSum(1)+lineSum(2))./ ... + % ((refBG(4)-refBG(2)+(refBG(3)-refBG(1)))); %divby 1across+1*down + if doCircle==1, totBkgrd(r,c)=meanBkgrd* cirPixA; else totBkgrd(r,c)=meanBkgrd* width^2; end + else + % clear('lineV') %3 + lineV=fullsc(refBG(1):refBG(3)-1,refBG(4)); %mean down rt + if tPt==1 || tPt==lstTpt,rw=[rw;lineV];end + pixCnt(3)=nnz(lineV .* uint8(lineV1 && c(botLim-botNotchOffset) % if intens area not too close to bot edge else + refBG(3)=botLim + cushion; + else + refBG(3)=refP(1)+widthEx+ floor(0.5*(botLim-refBGrExt)); + end + if rem(c,numCols)==0 + refBG(4)=refP(2)+widthEx+ floor(0.5*(plateEdgeSpace)); + else + refBG(4)=refP(2)+widthEx+ floor(0.5*(refNxC(2)-(refP(2)+widthEx))); + %refBG(4)=refP(2)+widthEx+ floor(0.5*(size(fullsc,2)-refBGcExt)); + end + detBG(r,c)={uint8(refBG)}; % Store Background Reference pt data in a Cell + % clear('lineV','pixCnt','lineSum') %1 + lineV=fullsc(refBG(1),refBG(2):refBG(4)-1); % across top rt + if tPt==1 || tPt==lstTpt,rw=lineV';end + pixCnt(1)=nnz(lineV .* uint8(lineV(botLim-botNotchOffset) % if intens area too close to bottom edge + meanBkgrd=(sum(lineSum(1:4)))./ (sum(pixCnt(1:4))); + if sum(pixCnt(1:4))==0, meanBkgrd=double(BGthres(r,c));end + % meanBkgrd=(lineSum(1)+lineSum(2)+lineSum(4))./ ... + % ((refBG(4)-refBG(2)+(2*(refBG(3)-refBG(1))))); %divby 1*across+2*down + if doCircle==1, totBkgrd(r,c)=meanBkgrd* cirPixA; else totBkgrd(r,c)=meanBkgrd* width^2; end + else + % clear('lineV') %4 + lineV=fullsc(refBG(3),refBG(2):refBG(4)-1); % mean across bot rt + if tPt==1 || tPt==lstTpt,rw=[rw;lineV'];end + pixCnt(4)=nnz(lineV .* uint8(lineV(botLim-botNotchOffset) % if intens area not too close to bot edge else + refBG(3)=botLim + cushion; + else + refBG(3)=refP(1)+widthEx+ floor(0.5*(botLim-refBGrExt)); + end + refBG(4)=refP(2)+widthEx+ floor(0.5*(refNxC(2)-(refP(2)+widthEx))); + detBG(r,c)={uint8(refBG)}; % Store Background Reference pt data in a Cell + % clear('lineV','pixCnt','lineSum') %1 + lineV=fullsc(refBG(1),refBG(2):refBG(4)-1); % across top rt + if tPt==1 || tPt==lstTpt,rw=lineV';end + pixCnt(1)=nnz(lineV .* uint8(lineV(botLim-botNotchOffset) % if intens area too close to bottom edge + meanBkgrd=(sum(lineSum(1:4)))./ (sum(pixCnt(1:4))); + if sum(pixCnt(1:4))==0, meanBkgrd=double(BGthres(r,c));end + % meanBkgrd=(lineSum(1)+lineSum(2)+lineSum(3))./ ... + % ((refBG(4)-refBG(2)+(2*(refBG(3)-refBG(1))))); % divby 1*across+2*down + if doCircle==1, totBkgrd(r,c)=meanBkgrd* cirPixA; else totBkgrd(r,c)=meanBkgrd* width^2; end + else + % clear('lineV') %4 + lineV=fullsc(refBG(3),refBG(2):refBG(4)-1); %mean across bot rt + if tPt==1 || tPt==lstTpt,rw=[rw;lineV'];end + pixCnt(4)=nnz(lineV .* uint8(lineV1 && rBG); %calc non-background within circular analysis area + % pixsAboveBG(r,c)=nnz(fullsc(refPtRx:(refPtRx+ (diaExt-1)),refPtCx:(refPtCx+ (diaExt-1)))>BG); %BG); + else % standard square analysis area + pixsAboveBG(r,c)=nnz(fullsc(refPtRx:(refPtRx+widthEx),refPtCx:(refPtCx+widthEx))>BG); % calc non-background within square analysis area + end + + % TimePT average + % meanBGTsum(r,c)=meanBGTsum(r,c)+meanBkgrd; + % meanBGTav(r,c)=meanBGTsum(r,c) /tPt; + bmm(r,c)=uint8(floor(meanBkgrd)); + + % For FOTOS only + F_spots(r,c,tPt)={refBG}; % Foto spot coordinates + bmtp(r,c,tPt)=bmm(r,c); % Added/used for FOTOS 11_0830 + + % TimePT Average BG intensity calc method + BGTav(r,c)=uint8(round((BGTav(r,c)*(tPt-1))+meanBkgrd)/tPt); + % BGTav(r,c)=((BGTav(r,c)*(tPt-1))+meanBkgrd)/tPt; + + % sliding BG average + % if r==1 && c==1, slavg(1:5)=BG;end % slavg(1:5)=50; %120620 Epsonvalue is 33; end + % slavg(5)=slavg(4); + % slavg(4)=slavg(3); + % slavg(3)=slavg(2); + % slavg(2)=slavg(1); + % slavg(1)=BG; + % slidingAvg=mean(slavg); + + % For Visualization Purposes only + %1->2 across rt 1, 2-4 + BGsc(refBG(1),refBG(2):refBG(4))=1; + %1->4 down lf 1-3, 2 + BGsc(refBG(1):refBG(3),refBG(2))=1; + %2->3 down rt 1-3, 4 + BGsc(refBG(1):refBG(3),refBG(4))=1; + %4->3 Bot Across rt 1, 2-4 + BGsc(refBG(3),refBG(2):refBG(4))=1; + % BGsc(refBG(1):refBG(3),refBG(2):refBG(4)) %just displays matrices + end end -%-------------------------------------------------------- -%Determine the actual number of pixels(area) of growth above the background -%intensity - BG=meanBkgrd; - [refPtPxAbove]=lastDetMaxPos{r,c}; - refPtRx=refPtPxAbove(1); - refPtCx=refPtPxAbove(2); - if doCircle==1 - cutout= (fullsc(refPtRx:(refPtRx+ (diaExt-1)),refPtCx:(refPtCx+ (diaExt-1)))); - Imcir= cutout .* uint8(cirMask); - pixsAboveBG(r,c)=nnz(Imcir>BG); %calc non-background within circular analysis area - %pixsAboveBG(r,c)=nnz(fullsc(refPtRx:(refPtRx+ (diaExt-1)),refPtCx:(refPtCx+ (diaExt-1)))>BG); %BG); - else %standard square analysis area - pixsAboveBG(r,c)=nnz(fullsc(refPtRx:(refPtRx+widthEx),refPtCx:(refPtCx+widthEx))>BG); %calc non-background within square analysis area - end - -%--------------------------------------------------------- -%TimePT average -%meanBGTsum(r,c)=meanBGTsum(r,c)+meanBkgrd; -%meanBGTav(r,c)= meanBGTsum(r,c) /tPt; -bmm(r,c)=uint8(floor(meanBkgrd)); -% For FOTOS only FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -F_spots(r,c,tPt)={refBG}; %Foto spot coordinates -bmtp(r,c,tPt)=bmm(r,c); %Added/used for FOTOS 11_0830 -%FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - -%TimePT Average BG intensity calc method -BGTav(r,c)=uint8(round((BGTav(r,c)*(tPt-1))+meanBkgrd)/tPt); -%BGTav(r,c)=((BGTav(r,c)*(tPt-1))+meanBkgrd)/tPt; - -%sliding BG average -%{ - if r==1 && c==1, slavg(1:5)= BG;end %slavg(1:5)= 50; %120620 Epsonvalue is 33; end - slavg(5)=slavg(4); - slavg(4)=slavg(3); - slavg(3)=slavg(2); - slavg(2)=slavg(1); - slavg(1)=BG; - slidingAvg=mean(slavg); -%} -%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -% For Visualization Purposes only -%1->2 across rt 1, 2-4 -BGsc(refBG(1),refBG(2):refBG(4))=1; -%1->4 down lf 1-3, 2 -BGsc(refBG(1):refBG(3),refBG(2))=1; -%2->3 down rt 1-3, 4 -BGsc(refBG(1):refBG(3),refBG(4))=1; -%4->3 Bot Across rt 1, 2-4 -BGsc(refBG(3),refBG(2):refBG(4))=1; -%BGsc(refBG(1):refBG(3),refBG(2):refBG(4)) %just displays matrices - - - end % Outer c (column loop) - -end % outer r (row loop) -BGthres=uint8(double(BGTav) * (1+(BGthresInput/100))); - - - -%end % Outer if r>1 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%END OF NIgenBkGrdData brought inside for GLOBAL PARALLEL -%***************************************************************************************************************** -%***************************************************************************************************************** -%***************************************************************************************************************** -%***************************************************************************************************************** -%***************************************************************************************************************** -optomizedPos(:,:,tPt)=lastDetMaxPos; -%if(isequal(SWsingleSc,1))|| ((~isequal(SWsingleSc,1))&&tPt==tptLength) %190731 change to capture last timePt PTmap if(isequal(SWsingleSc,1)) -%if(isequal(SWsingleSc,1))&& (tPt==1 || tPt== guesTpt || tPt==tptLength)|| ((~isequal(SWsingleSc,1))&&tPt==tptLength) %190919 Option for observation -%if (tPt==1 || tPt== guesTpt || tPt==tptLength) %190919 Option for observation -if (tPt==tptLength) %190919 change to capture ONLY last timePt PTmap -%*******************OptmapOnes Empsc; -%***********vis************************* -%clear OptmapOnes; -OptmapOnes= []; -%OptmapOnes=Empsc+ 1.4; -OptmapOnesDbl=double(Empsc)+ .8; -for r=1:numRows - for c=1:numCols + BGthres=uint8(double(BGTav) * (1+(BGthresInput/100))); + optomizedPos(:,:,tPt)=lastDetMaxPos; + % if(isequal(SWsingleSc,1))|| ((~isequal(SWsingleSc,1))&&tPt==tptLength) %190731 change to capture last timePt PTmap if(isequal(SWsingleSc,1)) + % if(isequal(SWsingleSc,1))&& (tPt==1 || tPt==guesTpt || tPt==tptLength)|| ((~isequal(SWsingleSc,1))&&tPt==tptLength) %190919 Option for observation + % if (tPt==1 || tPt==guesTpt || tPt==tptLength) %190919 Option for observation + if (tPt==tptLength) % 190919 change to capture ONLY last timePt PTmap + % clear OptmapOnes; + OptmapOnes=[]; + % OptmapOnes=Empsc+ 1.4; + OptmapOnesDbl=double(Empsc)+ .8; + for r=1:numRows + for c=1:numCols [refPt]=lastDetMaxPos{r,c}; refPtR=refPt(1); refPtC=refPt(2); - if doCircle==1 - %OptmapOnesDbl(refPtR:(refPtR+diaExt),refPtC:(refPtC+diaExt))= cirMask; - OptmapOnesDbl(refPtR:(refPtR+(diaExt-1)),refPtC:(refPtC+(diaExt-1)))=optCirMask; - - + %OptmapOnesDbl(refPtR:(refPtR+diaExt),refPtC:(refPtC+diaExt))=cirMask; + OptmapOnesDbl(refPtR:(refPtR+(diaExt-1)),refPtC:(refPtC+(diaExt-1)))=optCirMask; else - refPtRExt=refPtR+widthEx; - if (refPtRExt)> size(fullsc,1), refPtRExt= size(fullsc,1); end - refPtCExt=refPtC+widthEx; - if (refPtCExt)> size(fullsc,2), refPtCExt= size(fullsc,2); end - OptmapOnesDbl(refPtR:(refPtRExt),refPtC:(refPtCExt))= 1;%255; - end + refPtRExt=refPtR+widthEx; + if (refPtRExt)> size(fullsc,1), refPtRExt=size(fullsc,1); end + refPtCExt=refPtC+widthEx; + if (refPtCExt)> size(fullsc,2), refPtCExt=size(fullsc,2); end + OptmapOnesDbl(refPtR:(refPtRExt),refPtC:(refPtCExt))=1;%255; + end + end end -end -%****Cross Optomized Map Matrix onto tifFile Matrix*************** -%***********for visualization purposes only!!!!!!!!!!!!!!! - if tPt==1,figure;end - - resIm= uint8((double(BGsc) + OptmapOnesDbl) .* double(fullsc)); - %clear('OptmapOnesDbl') - OptmapOnesDbl= []; - %hres=imagesc(resIm); - hfscanIm=imagesc(resIm); - hfIm=gcf; - haxis=gca; - title(strcat('Scan',num2str(selScan),'timePt-',num2str(tPt))); - clf(hfscanIm,'reset'); - set(hfIm,'NumberTitle','off') - set(hfIm,'Name', char(ExpOutmat)) %strcat('EASYconsole- ',char(resDir))) + % Cross-optimized Map Matrix onto tifFile Matrix + % For visualization purposes only + if tPt==1,figure;end + resIm=uint8((double(BGsc) + OptmapOnesDbl) .* double(fullsc)); + % clear('OptmapOnesDbl') + OptmapOnesDbl=[]; + % hres=imagesc(resIm); + hfscanIm=imagesc(resIm); + hfIm=gcf; + haxis=gca; + title(strcat('Scan',num2str(selScan),'timePt-',num2str(tPt))); + clf(hfscanIm,'reset'); + set(hfIm,'NumberTitle','off') + set(hfIm,'Name', char(ExpOutmat)) % strcat('EASYconsole- ',char(resDir))) if Fflg==1 - resDir; %for debugging + resDir; % for debugging fullfile(resDir,'Fotos',strcat('Scan',num2str(selScan),'_timePt-',num2str(tPt))) hgsave(fullfile(resDir,'Fotos',strcat('Scan',num2str(selScan),'_timePt-',num2str(tPt)))); %F 14_0626 else hgsave(fullfile(resDir,'figs',strcat('Scan',num2str(selScan),'_timePt-',num2str(tPt)))); end - -else + else selScan; %tifFile -end -%****************************************************************** + end -BkgrdMat=totBkgrd; %BkgrdMat(:,:,tPt)=totBkgrd; %debug parfor effort + BkgrdMat=totBkgrd; % BkgrdMat(:,:,tPt)=totBkgrd; %debug parfor effort + areaOfIntensAboveBG(:,:,tPt)=pixsAboveBG; % actual area of growth for each timepoint (used for printout of grArea ?not used in previous analysis) + scanIntens(:,:,tPt)=intens-BkgrdMat; -areaOfIntensAboveBG(:,:,tPt)= pixsAboveBG; %actual area of growth for each timepoint (used for printout of grArea ?not used in previous analysis) -scanIntens(:,:,tPt)= intens-BkgrdMat; + % capture first and last background values + if tPt==1 + bdg(:,:,1)=bmm; + bdg(:,:,3)=rwm; + Tmpsbdg1={bdg}; + end + if tPt==lstTpt + bdg(:,:,2)=bmm; + bdg(:,:,4)=rwm; + Tmpsbdg1={bdg}; + end - -%capture first and last background values -if tPt==1 - bdg(:,:,1)= bmm; - bdg(:,:,3)=rwm; - -Tmpsbdg1={bdg}; -end -if tPt==lstTpt - bdg(:,:,2)= bmm; - bdg(:,:,4)=rwm; - -Tmpsbdg1={bdg}; -end - -%-------------------------------------------------------------------- - -TmpexpScanIntens1= {scanIntens}; %par4Gbl 20_0122 -TmpFexpScanSpots1= {F_spots}; -TmpFexpScanBMtp1= {bmtp}; -TmpanlZoneRefs1= {optomizedPos}; %added to store tPt by tPt positions - -TmpexpScanIntens2= TmpexpScanIntens1; -TmpFexpScanSpots2= TmpFexpScanSpots1; -TmpFexpScanBMtp2= TmpFexpScanBMtp1; -TmpanlZoneRefs2= TmpanlZoneRefs1; - -Tmpsbdg2= Tmpsbdg1; - -%----------------------------------------------------------- -end % end for tifFile for-loop (i.e. timepoint scan)******************************************************************** - - - \ No newline at end of file + TmpexpScanIntens1={scanIntens}; % par4Gbl 20_0122 + TmpFexpScanSpots1={F_spots}; + TmpFexpScanBMtp1={bmtp}; + TmpanlZoneRefs1={optomizedPos}; % added to store tPt by tPt positions + TmpexpScanIntens2=TmpexpScanIntens1; + TmpFexpScanSpots2=TmpFexpScanSpots1; + TmpFexpScanBMtp2=TmpFexpScanBMtp1; + TmpanlZoneRefs2=TmpanlZoneRefs1; + Tmpsbdg2=Tmpsbdg1; + +end \ No newline at end of file