This is the pgm for face parts detection.In this i wanted to crop the detected parts. So i wanted to knw how to use "imcrop" in this pgm..my pgm uses a computer vision toolbox. Can anyone please help me out..
function [bbox,bbX,faces,bbfaces] = detectFaceParts(detector,X,thick)if( nargin < 3 )thick = 1;end% disp(nargin);
%%%%%%%%%%%%%%%%%%%%%%%detect face %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Detect faces
bbox = step(detector.detector{5}, X);% disp(bbox);
% figure,imshow(bbox);
bbsize = size(bbox);% disp(bbsize);
% figure,imshow(bbsize);
partsNum = zeros(size(bbox,1),1);% disp(partsNum);
%%%%%%%%%%%%%%%%%%%%%%%detect parts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nameDetector = {'LeftEye'; 'RightEye'; 'Mouth'; 'Nose'; };% disp(nameDetector);
mins = [[12 18]; [12 18]; [15 25]; [15 18]; ];% disp(mins);
stdsize = detector.stdsize;% disp(stdsize);
for k=1:4if( k == 1 )region = [1,int32(stdsize*2/3); 1, int32(stdsize*2/3)];elseif( k == 2 )region = [int32(stdsize/3),stdsize; 1, int32(stdsize*2/3)];elseif( k == 3 )region = [1,stdsize; int32(stdsize/3), stdsize];elseif( k == 4 )region = [int32(stdsize/5),int32(stdsize*4/5); int32(stdsize/3),stdsize];elseregion = [1,stdsize;1,stdsize];end% disp(region);
% figure,imshow(region);
bb = zeros(bbsize);for i=1:size(bbox,1)XX = X(bbox(i,2):bbox(i,2)+bbox(i,4)-1,bbox(i,1):bbox(i,1)+bbox(i,3)-1,:);XX = imresize(XX,[stdsize, stdsize]);% XX = imcrop(XX,bbox);
% disp(bbox);
% figure,imshow(bbox);
XX = XX(region(2,1):region(2,2),region(1,1):region(1,2),:);b = step(detector.detector{k},XX);% disp(b);
% figure,imshow(b);
% disp(size(b,1));
if( size(b,1) > 0 ) partsNum(i) = partsNum(i) + 1; if( k == 1 ) b = sortrows(b,1); elseif( k == 2 ) b = flipud(sortrows(b,1)); elseif( k == 3 ) b = flipud(sortrows(b,2)); elseif( k == 4 ) b = flipud(sortrows(b,3)); end ratio = double(bbox(i,3)) / double(stdsize);% disp(ratio);
b(1,1) = int32( ( b(1,1)-1 + region(1,1)-1 ) * ratio + 0.5 ) + bbox(i,1); b(1,2) = int32( ( b(1,2)-1 + region(2,1)-1 ) * ratio + 0.5 ) + bbox(i,2); b(1,3) = int32( b(1,3) * ratio + 0.5 ); b(1,4) = int32( b(1,4) * ratio + 0.5 ); bb(i,:) = b(1,:);% disp(ratio); end end bbox = [bbox,bb];% disp(bbox);
% figure,imshow(bbox);
p = ( sum(bb') == 0 ); bb(p,:) = [];end% figure(7),imshow(bb);
%%%%%%%%%%%%%%%%%%%%%%%draw faces %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bbox = [bbox,partsNum];% disp(partsNum);% figure,imshow(partsNum);
bbox(partsNum<=2,:)=[];if( thick >= 0 )t = (thick-1)/2;t0 = -int32(ceil(t));t1 = int32(floor(t));elset0 = 0;t1 = 0;endbbX = X;boxColor = [[0,255,0]; [255,0,255]; [255,0,255]; [0,255,255]; [255,255,0]; ];for k=5:-1:1shapeInserter = vision.ShapeInserter('BorderColor','Custom','CustomBorderColor',boxColor(k,:)); % disp(shapeInserter);
for i=t0:t1bb = int32(bbox(:,(k-1)*4+1:k*4));bb(:,1:2) = bb(:,1:2)-i;bb(:,3:4) = bb(:,3:4)+i*2;bbX = step(shapeInserter, bbX, bb);% disp(bbX);
% figure,imshow(bbX);
% X=imcrop(bbX,bbox);
end
end
% figure(8),imshow(bbX);
%%%%%%%%%%%%%%%%%%%%%%%faces %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if( nargout > 2 )faces = cell(size(bbox,1),1);boxfaces = cell(size(bbox,1),1);% disp(size(bbox,1));
% disp(boxfaces);
% figure,imshow(boxfaces);
for i=1:size(bbox,1)faces{i,1} = X(bbox(i,2):bbox(i,2)+bbox(i,4)-1,bbox(i,1):bbox(i,1)+bbox(i,3)-1,:);bbfaces{i,1} = bbX(bbox(i,2):bbox(i,2)+bbox(i,4)-1,bbox(i,1):bbox(i,1)+bbox(i,3)-1,:);% figure,imshow(bbfaces{i,1});
% pause;
endend
Best Answer