2016-09-04 2 views
0

Matlab에 처음 오 셨습니다. 이미지에서 얼굴을 감지하고 잘라내는 코드를 구현하려고합니다. 스크립트를 실행하고 있지만 감지 된 얼굴 주위에 배치되는 경계 상자는 약간 작습니다. 더 많은 얼굴을 캡처하기 위해 경계 상자의 크기를 변경하는 방법이 있습니까? 현재 바운딩 박스 크기 변경

clc; 
% cd into the a folder with pictures 
cd 'C:\Users\abc\Desktop\folder' 

files = dir('*.jpg'); 

for file = files' 
img = imread(file.name); 
figure(1),imshow(img); 
FaceDetect = vision.CascadeObjectDetector; 
FaceDetect.MergeThreshold = 7; 
BB = step(FaceDetect,img); 
figure(2),imshow(img); 
for i = 1:size(BB,1) 
    rectangle('Position',BB(i,:),'LineWidth',2,'LineStyle','- ','EdgeColor','r'); 
end 

for i = 1:size(BB,1) 
    rectangle('Position',BB(i,:),'LineWidth',2,'LineStyle','- ','EdgeColor','r'); 
    J = imcrop(img,BB(i,:)); 
    figure(3); 
    imshow(J); 
    a = 'edited\' 
    b = file.name 
    output = strcat(a,b); 
    imwrite(J,output); 
end 

%Code End 
end 

이 스크립트는 얼굴과 같이 찾습니다 enter image description here

그리고 이와 같은 이미지 출력 : enter image description here

이 좋다, 나는 단지의 경계를 확장 할을 더 많은 얼굴 (예 : 머리카락과 턱)을 캡처 할 수 있습니다.

답변

3

MATLAB 직사각형 함수 문서에서.

  • 직사각형 ('Position', pos)은 2 차원 좌표로 직사각형을 만듭니다. 데이터를 단위로 [x y w h] 형식의 4 요소 벡터로 지정합니다. x와 y 요소는 위치를 결정하고 w와 h 요소는 크기를 결정합니다. 함수는 현재 축의 내용을 축에서 지우지 않고 현재 축 에 그려집니다. 그냥 사각형의 중심에 대한 몇 가지 배율 인수 경계 상자를 높이기 위해 찾고 있다면

, 당신은 BBwh 구성 요소를 확장하고 절반 규모를 빼서 사각형 원점 xy을 조정할 수 차. 다음 코드는 코드에서 BB = step(FaceDetect,img); 줄 바로 뒤에 배치하면 작동합니다. 나는 현재 MATLAB을 사용할 수 없지만 이것이 효과가있을 것이라고 확신한다.

% Scale the rectangle to 1.2 times its original size 
scale = 1.2; 

% Adjust the lower left corner of the rectangles 
BB(:,1:2) = BB(:,1:2) - BB(:,3:4)*0.5*(scale - 1) 

% Adjust the width and height of the rectangles 
BB(:,3:4) = BB(:,3:4)*scale; 
관련 문제