2016-09-04 11 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矩形関数のドキュメントです。

  • rectangle( 'Position'、pos)は、2次元座標で矩形を作成します。 posを、データ 単位の[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; 
関連する問題