优化形态处理的性能

时间:2016-03-11 06:33:38

标签: java image-processing face-detection mathematical-morphology image-morphology

我正在使用YCbCr色彩空间进行面部检测。当我将它应用于人脸时,有一些间隙表示鼻子,眼睛和嘴巴,所得补丁看起来像(a)。为了消除这些差距,我应用了形态膨胀操作,我得到了(b)中显示的结果图像,但我的要求是获得补丁,如(c)< / strong>即可。这意味着我想从处理过的补丁中删除外部轮廓。

enter image description here

任何人都可以建议我如何删除这些外部轮廓?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您应该执行以下步骤:

  1. 填充孔=&gt; result。它填满了所有的洞。
  2. 开口(侵蚀+膨胀)=&gt; result。它会消除形状外的所有小图案。
  3. 更好的是:你用“重建开放”取代步骤2,这是一种侵蚀,接着是测地重建。此操作不会修改主模式。请参阅the result

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