0001 function [ reshapedSegmentedMask, insidePatchIndexes, finalSegmentedMask] = ...
0002 extractSegmentedPatchV3( segmentedMask,outOfBoundSize,centralPoint, shapeDSKCF_struct,maxSize )
0003
0004
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 stPointX=1;
0041 stPointY=1;
0042 endPointY=size(segmentedMask,1);
0043 endPointX=size(segmentedMask,2);
0044
0045 stPointXMask=1;
0046 stPointYMask=1;
0047 endPointYMask=size(segmentedMask,1);
0048 endPointXMask=size(segmentedMask,2);
0049
0050
0051 segmentedMask(round(endPointYMask*0.85):end,round(endPointXMask*0.60):end)=0;
0052 segmentedMask(round(endPointYMask*0.85):end,1:round(endPointXMask*0.4))=0;
0053
0054 if(isempty(shapeDSKCF_struct.cumulativeMask))
0055 cumulativeSize=outOfBoundSize;
0056 else
0057 cumulativeSize=size(shapeDSKCF_struct.cumulativeMask);
0058 end
0059
0060 if(size(segmentedMask)==cumulativeSize)
0061 reshapedSegmentedMask=segmentedMask;
0062 else
0063 extremaBB(1:2)=centralPoint-cumulativeSize(2:-1:1)/2;
0064 extremaBB(3:4)=centralPoint+cumulativeSize(2:-1:1)/2;
0065 extremaBB=floor(extremaBB(:));
0066 reshapedSegmentedMask=repmat(0,cumulativeSize);
0067
0068
0069 if(extremaBB(1)<0)
0070 diffSize=min(size(segmentedMask,2)-cumulativeSize(2),0);
0071
0072 stPointX=max(1,abs(extremaBB(1))+diffSize);
0073 minSize=min(size(segmentedMask,2),cumulativeSize(2));
0074 endPointX=stPointX+minSize-1;
0075 stPointXMask=1;
0076 endPointXMask=stPointXMask+minSize-1;
0077 end
0078
0079
0080 if(extremaBB(3)>maxSize(1))
0081 minSize=min(size(segmentedMask,2),cumulativeSize(2));
0082 offset=extremaBB(3)-maxSize(1);
0083 endPointX=cumulativeSize(2)-offset;
0084 stPointX=max((endPointX-minSize+1),1);
0085 endPointXMask=minSize;
0086 numberOfFinalElement=endPointX-stPointX;
0087 stPointXMask=endPointXMask-numberOfFinalElement;
0088 end
0089
0090
0091 if(extremaBB(2)<0)
0092
0093 diffSize=min(size(segmentedMask,1)-cumulativeSize(1),0);
0094 stPointY=max(1,abs(extremaBB(2))+diffSize);
0095 minSize=min(size(segmentedMask,1),cumulativeSize(1));
0096 endPointY=stPointY+minSize-1;
0097 stPointYMask=1;
0098 endPointYMask=stPointYMask+minSize-1;
0099 end
0100
0101
0102 if(extremaBB(4)>maxSize(2))
0103 minSize=min(size(segmentedMask,1),cumulativeSize(1));
0104 offset=extremaBB(4)-maxSize(2);
0105 endPointY=cumulativeSize(1)-offset;
0106 stPointY=max((endPointY-minSize+1),1);
0107 numberOfFinalElement=endPointY-stPointY;
0108 stPointYMask=endPointYMask-numberOfFinalElement;
0109 end
0110
0111 reshapedSegmentedMask(stPointY:endPointY,stPointX:endPointX)=segmentedMask(stPointYMask:endPointYMask,stPointXMask:endPointXMask);
0112
0113 end
0114
0115 selectedSize=[length(stPointY:endPointY),length(stPointX:endPointX)];
0116
0117 minSIZE=[min(size(segmentedMask,1),cumulativeSize(1)), min(size(segmentedMask,2),cumulativeSize(2))];
0118
0119
0120 if(selectedSize(2)<minSIZE(2))
0121 diffLeft=stPointX-1;
0122 diffRight=minSIZE(2)-endPointX;
0123 endPointX=endPointX+diffRight;
0124 stPointX=stPointX-diffLeft;
0125 end
0126
0127 if(selectedSize(1)<minSIZE(1) )
0128 diffUp=stPointY-1;
0129 diffDown=minSIZE(1)-endPointY;
0130 endPointY=endPointY+diffDown;
0131 stPointY=stPointY-diffUp;
0132 end
0133
0134 selectedSizeFinal=size(reshapedSegmentedMask);
0135
0136 if(selectedSizeFinal(2)>cumulativeSize(2))
0137 diff=selectedSizeFinal(2)-minSIZE(2);
0138 diffLIMIT=selectedSizeFinal(2)-cumulativeSize(2);
0139 endPointXLIMIT=endPointX-diffLIMIT;
0140 endPointX=endPointX-diff;
0141 stPointX=1;
0142 reshapedSegmentedMask=reshapedSegmentedMask(:,stPointX:endPointXLIMIT);
0143 end
0144
0145 if(selectedSizeFinal(1)>cumulativeSize(1))
0146 diff=selectedSizeFinal(1)-minSIZE(1);
0147 diffLIMIT=selectedSizeFinal(1)-cumulativeSize(1);
0148 endPointYLIMIT=endPointY-diffLIMIT;
0149 endPointY=endPointY-diff;
0150 stPointY=1;
0151 reshapedSegmentedMask=reshapedSegmentedMask(stPointY:endPointYLIMIT,:);
0152 end
0153
0154
0155 insidePatchIndexes=[stPointX,stPointY,endPointX,endPointY];
0156
0157
0158 finalSegmentedMask=segmentedMask;
0159 end