我正在使用YCbCr颜色空间进行人脸检测。当我将其涂抹在人的脸上时,存在表示鼻子,眼睛和嘴巴的缝隙,并且所产生的斑点看起来像(a)。为了消除这些间隙,我进行了形态学扩张操作,并得到了(b)中所示的结果图像,但是我的要求是像(c)中所示那样获得补丁。这意味着我要从已处理的补丁中删除外部轮廓。

java - 优化形态加工性能-LMLPHP

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

最佳答案

我为您提供一些建议,尽管没有实际的原始图像本身很难验证这一点。尝试其中一种,看看是否有有意义的东西。



方法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像素的区域)删除这些孤立的区域,然后使用您在帖子中提到的dilation(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

关于java - 优化形态加工性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35933726/

10-12 04:48