更改边界框尺寸

时间:2016-09-04 18:19:02

标签: matlab

这里是Matlab的新手。我正在尝试实现一些代码来检测图像中的面部并裁剪它。我已经运行了脚本,但它放置在检测到的面部周围的边界框有点小。有没有办法更改边界框的尺寸以捕获更多的面?

#include<ctype.h>

if(isalpha(char[i]))
  rank--;
if(isdigit(char[i]))
  rank++;

目前,该脚本找到了这样的面: enter image description here

输出如下图像: enter image description here

这很好,我只想延长裁剪区域的边界以捕捉更多的脸部(例如,头发和下巴)。

2 个答案:

答案 0 :(得分:3)

来自MATLAB矩形函数文档。

  • rectangle('Position',pos)在二维坐标中创建一个矩形。 将pos指定为数据中[x y w h]形式的四元素向量 单位。 x和y元素确定位置和w和h 元素决定了大小。该函数绘制到当前轴 不清除轴上的现有内容。

如果您只想通过关于矩形中心的某个比例因子来增加边界框,则可以缩放w中的hBB分量并调整矩形原点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;

答案 1 :(得分:0)

您可以使用此 linkbboxresize 中所述的 Matlab 中的 imresize 函数来调整边界框的大小 以下是将图像大小调整为原始图像大小的 3 倍的简单代码

%% clean workspace
clc;
clear;
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);
 BB2 = BB;
 %% Scale the rectangle to 3 times its original size
 scale = 3;
 %% Resize image
 ImgResized = imresize(img,scale);
 %% Resize bound box using the function named bboxresize in Matlab
 BBResized = bboxresize(BB,scale);
 figure(2),imshow(ImgResized);
 %% Draw Bounding Box
  for i=1:size(BBResized,1)
    rectangle('position',BBResized(i,:),'lineWidth',2,'LineStyle','- ','EdgeColor','y');
   end
end