1

我正在使用 YCbCr 颜色空间进行人脸检测。当我将它涂抹在人脸上时,会有表示鼻子、眼睛和嘴巴的间隙,最终的贴片看起来像(a)。为了消除这些差距,我应用了形态膨胀操作,得到了(b)中所示的结果图像,但我的要求是获得像(c)中所示的补丁。这意味着我想从处理过的补丁中移除外部轮廓。

在此处输入图像描述

谁能建议我如何去除这些外轮廓?

4

2 回答 2

1

我有一些建议给你,尽管如果没有实际的原始图像本身就很难验证这一点。尝试其中一种,看看你是否得到了一些有意义的东西。


方法 #1 - 使用imfill后跟imopen

我的一个建议是使用imfill填充图像中的任何孔,然后调用以imopen执行形态打开(即用户 Paul R 提到的先腐蚀后膨胀)。打开(通过imopen)删除图像中任何小的孤立区域,以符合所需的结构元素。

假设您的图像存储在变量BW中,这样的事情可能会起作用:

BW2 = imfill(BW, 'holes');
se = strel('square', 5);
BW2 = imopen(BW2, se);

BW2是最终图像。

方法 #2 - 使用bwareaopen后跟imdilate

我还可以建议使用bwareaopen删除面积低于一定数量的对象的功能。尝试使用像 80 像素这样的小区域来移除这些孤立区域,然后使用imdilate您在帖子中提到的扩张 ( ) 命令:

BW2 = bwareaopen(BW, 80);
%// Place your code for dilation here using BW2

方法#3 - 打开你的图像imopen然后执行imdilate

我可以建议的最后一件事是首先打开您的图像以删除虚假的小像素区域,然后按照您的建议执行扩张代码:

se = strel('square', 5);
BW2 = imopen(BW, se);
%// Place your code for dilation here using BW2
于 2016-03-11T06:53:45.673 回答
0

您应该执行以下步骤:

  1. 填充孔 =>结果。它填补了脸上所有的洞。
  2. 打开(腐蚀+膨胀)=>结果。它会擦除形状之外的所有小图案。

更好的是:您将步骤 2 替换为“重建开放”,这是一种侵蚀,然后是测地线重建。此操作不会修改主模式。看结果

所有这些操作都应该在 OpenCV 或 ImageJ 中可用。

于 2016-03-11T18:05:37.567 回答