我正在使用YCbCr颜色空间进行人脸检测。当我将其涂抹在人的脸上时,存在表示鼻子,眼睛和嘴巴的缝隙,并且所产生的斑点看起来像(a)。为了消除这些间隙,我进行了形态学扩张操作,并得到了(b)中所示的结果图像,但是我的要求是像(c)中所示那样获得补丁。这意味着我要从已处理的补丁中删除外部轮廓。
谁能建议我如何去除这些外部轮廓?
最佳答案
我为您提供一些建议,尽管没有实际的原始图像本身很难验证这一点。尝试其中一种,看看是否有有意义的东西。
方法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/