面部检测并使其模糊

时间:2015-10-13 02:51:31

标签: matlab blur face-detection matlab-cvst

我无法理解有关Matlab的代码

a = imread('Untitled2.png');
faceDetector = vision.CascadeObjectDetector;
bbox=step(faceDetector,a);
for j=1:size(bbox)
    xbox=bbox(j,:);
    subImage = imcrop(a, xbox);
    H = fspecial('disk',10);
    blurred = imfilter(subImage,H);
    a(xbox(2):xbox(2)+xbox(4),xbox(1):xbox(1)+xbox(3),1:end) = blurred; 
end
imshow(a);

任何人都可以请你解释一下for循环在做什么?我试图使用我自己的方法来模糊我检测到的脸部,但我只是设法裁掉脸部并模糊裁剪的图像,但我不知道如何将其恢复原始图像。然后我尝试使用上面的源代码,我从互联网上获取,互联网源代码能够模糊脸,我无法理解for循环逻辑。请向我解释,T ^ T。

感谢。

1 个答案:

答案 0 :(得分:1)

正如您所见there

BBOX = step(检测器,I)返回BBOX,一个M×4矩阵,定义包含检测到的对象的M个边界框。此方法对输入图像执行多尺度对象检测I.输出矩阵的每一行BBOX包含一个四元素矢量[xy width height],以像素为单位指定边界的左上角和大小框。输入图像I必须是灰度或真彩色(RGB)图像。

您确定代码中有j=1:size(bbox)而不是j=1:size(bbox,1)吗?

基本上,BBox的定义本身就说明了。循环只是迭代检测到的所有框。

然后提取有关j th 框的信息。

然后在给定xbox的位置和大小的情况下提取subImage(xbox是一个包含[x y width height]的向量。)

然后你定义过滤器。

然后你模糊你的subImage。

然后使用xbox中的信息覆盖模糊子图像的图像a。

编辑:如果您已经模糊了裁剪后的图像,则只需用模糊的图像覆盖输入图像!