0001 function [estimatedShapeBB,shapeDSKCF_struct,changeOfShapeFlag,newOutput]=...
0002 regionModificationCheck(sizeOfSegmenter,sizeOfTarget,accumulatedSEGBool...
0003 ,noDataPercent,minSizeOK,estimatedShapeBB,shapeDSKCF_struct,imageSize...
0004 ,trackerDSKCF_struct)
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054 newOutput=false;
0055 changeOfShapeFlag=false;
0056 if(accumulatedSEGBool && noDataPercent)
0057 if(shapeDSKCF_struct.growingStatus==false)
0058
0059 if(sizeOfSegmenter<sizeOfTarget*0.9 && minSizeOK )
0060 estimatedShapeBB=enlargeBB(estimatedShapeBB ,-0.05,imageSize);
0061 shapeDSKCF_struct.growingStatus=false;
0062 newOutput=true;
0063 end
0064
0065 if(sizeOfSegmenter>sizeOfTarget*1.09 )
0066
0067 changeOfShapeFlag=true;
0068 newOutput=true;
0069 end
0070 else
0071
0072 [centerX,centerY,width,height]=fromBBtoCentralPoint(estimatedShapeBB);
0073 estimatedShapeSize=[height,width];
0074
0075 currentSizeSegmenter=[shapeDSKCF_struct.segmentH,shapeDSKCF_struct.segmentW];
0076 currentSizeMASK=[size(shapeDSKCF_struct.maskArray(:,:,1),1),size(shapeDSKCF_struct.maskArray(:,:,1),2)];
0077
0078 diffSize=estimatedShapeSize-currentSizeSegmenter;
0079
0080 growingFlag=(diffSize(1)>0 || diffSize(2)>0);
0081 shrinkingFlag=(diffSize(1)<=0 && diffSize(2)<=0);
0082
0083
0084 if(growingFlag)
0085 segmentHIncrement=0;
0086 segmentWIncrement=0;
0087 newOutput=true;
0088 if(diffSize(1)>0.07*currentSizeSegmenter(1))
0089 segmentHIncrement=round(0.05*currentSizeMASK(1));
0090 shapeDSKCF_struct.growingStatus=true;
0091
0092 end
0093
0094 if(diffSize(2)>0.05*currentSizeSegmenter(2))
0095 segmentWIncrement=round(0.05*currentSizeMASK(2));
0096 shapeDSKCF_struct.growingStatus=true;
0097
0098 end
0099
0100 shapeDSKCF_struct.growingStatus=true;
0101 if(segmentHIncrement>0 || segmentWIncrement>0)
0102 shapeDSKCF_struct.cumulativeMask=padarray(shapeDSKCF_struct.cumulativeMask,[segmentHIncrement segmentWIncrement]);
0103 for i=1:size(shapeDSKCF_struct.maskArray,3)
0104 tmpMaskArray(:,:,i)=...
0105 padarray(shapeDSKCF_struct.maskArray(:,:,i),[segmentHIncrement segmentWIncrement]);
0106 end
0107 shapeDSKCF_struct.maskArray=tmpMaskArray;
0108
0109 shapeDSKCF_struct.segmentW=max([estimatedShapeSize(2),trackerDSKCF_struct.currentTarget.w]);
0110 shapeDSKCF_struct.segmentH=max([estimatedShapeSize(1),trackerDSKCF_struct.currentTarget.h]);
0111 end
0112
0113 end
0114
0115 if(shrinkingFlag)
0116
0117
0118
0119 if(estimatedShapeSize(1)<trackerDSKCF_struct.currentTarget.h ...
0120 && estimatedShapeSize(2)<trackerDSKCF_struct.currentTarget.w)
0121
0122 bbIn=fromCentralPointToBB(round(currentSizeMASK(2)/2),round(currentSizeMASK(1)/2),...
0123 estimatedShapeSize(2),estimatedShapeSize(1),...
0124 currentSizeMASK(2),currentSizeMASK(1));
0125
0126
0127 newOutput=false;
0128 shapeDSKCF_struct.growingStatus=false;
0129
0130 shapeDSKCF_struct.segmentW=trackerDSKCF_struct.currentTarget.w;
0131 shapeDSKCF_struct.segmentH=trackerDSKCF_struct.currentTarget.h;
0132
0133
0134
0135
0136
0137 tmpCumulativeMask=roiFromBB(shapeDSKCF_struct.cumulativeMask,bbIn);
0138 segmentHIncrement=round(((1.1*trackerDSKCF_struct.currentTarget.h)-size(tmpCumulativeMask,1))/2);
0139
0140 segmentWIncrement=round(((1.1*trackerDSKCF_struct.currentTarget.w)-size(tmpCumulativeMask,2))/2);
0141
0142 segmentHIncrement=segmentHIncrement*(segmentHIncrement>0);
0143 segmentWIncrement=segmentWIncrement*(segmentWIncrement>0);
0144
0145 shapeDSKCF_struct.cumulativeMask=padarray(tmpCumulativeMask,[segmentHIncrement segmentWIncrement]);
0146 for i=1:size(shapeDSKCF_struct.maskArray,3)
0147 tmpMaskArray(:,:,i)=...
0148 roiFromBB(shapeDSKCF_struct.maskArray(:,:,i),bbIn);
0149 end
0150 shapeDSKCF_struct.maskArray=padarray(tmpMaskArray,[segmentHIncrement segmentWIncrement]);
0151
0152
0153
0154 else
0155
0156 bbIn=fromCentralPointToBB(round(currentSizeMASK(2)/2),round(currentSizeMASK(1)/2),...
0157 estimatedShapeSize(2),estimatedShapeSize(1),...
0158 currentSizeMASK(2),currentSizeMASK(1));
0159
0160 newOutput=true;
0161 shapeDSKCF_struct.growingStatus=true;
0162
0163 shapeDSKCF_struct.segmentW=max([estimatedShapeSize(2),trackerDSKCF_struct.currentTarget.w]);
0164 shapeDSKCF_struct.segmentH=max([estimatedShapeSize(1),trackerDSKCF_struct.currentTarget.h]);
0165
0166
0167
0168
0169
0170 tmpCumulativeMask=roiFromBB(shapeDSKCF_struct.cumulativeMask,bbIn);
0171 segmentHIncrement=round(((trackerDSKCF_struct.currentTarget.h)-estimatedShapeSize(1))/2);
0172
0173 segmentWIncrement=round(((trackerDSKCF_struct.currentTarget.w)-estimatedShapeSize(2))/2);
0174
0175 segmentHIncrement=segmentHIncrement*(segmentHIncrement>0);
0176 segmentWIncrement=segmentWIncrement*(segmentWIncrement>0);
0177
0178 shapeDSKCF_struct.cumulativeMask=padarray(tmpCumulativeMask,[segmentHIncrement segmentWIncrement]);
0179 for i=1:size(shapeDSKCF_struct.maskArray,3)
0180
0181 tmpMaskArray(:,:,i)=...
0182 roiFromBB(shapeDSKCF_struct.maskArray(:,:,i),bbIn);
0183 end
0184 shapeDSKCF_struct.maskArray=padarray(tmpMaskArray,[segmentHIncrement segmentWIncrement]);
0185
0186
0187 end
0188
0189 if(sizeOfSegmenter<sizeOfTarget*0.9 && minSizeOK )
0190 estimatedShapeBB=enlargeBB(estimatedShapeBB ,-0.05,imageSize);
0191 shapeDSKCF_struct.growingStatus=false;
0192 newOutput=true;
0193 end
0194
0195
0196 end
0197
0198
0199 end
0200 end
0201
0202 end
0203