我正在使用YCbCr色彩空间进行面部检测。当我将它应用于人脸时,有一些间隙表示鼻子,眼睛和嘴巴,所得补丁看起来像(a)。为了消除这些差距,我应用了形态膨胀操作,我得到了(b)中显示的结果图像,但我的要求是获得补丁,如(c)< / strong>即可。这意味着我想从处理过的补丁中删除外部轮廓。
任何人都可以建议我如何删除这些外部轮廓?
答案 0 :(得分:1)
我向您提出了一些建议,但如果没有实际的原始图像本身就难以验证。尝试其中之一,看看你是否有意义。
imfill
后跟imopen
我的一个建议是使用imfill
来填充图像中的任何一个洞,然后调用imopen
来执行形态学开放(即侵蚀,然后是扩张,如前所述用户Paul R)。打开(通过imopen
)删除图像中受所需结构元素影响的任何小的孤立区域。
假设您的图像存储在变量BW
中,这样的事情可能会起作用:
BW2 = imfill(BW, 'holes');
se = strel('square', 5);
BW2 = imopen(BW2, se);
BW2
是最终形象。
bwareaopen
后跟imdilate
我还可以建议使用函数bwareaopen
来删除面积小于一定数量的对象。尝试像80像素一样小的东西来移除那些孤立的区域,然后使用你在帖子中提到的扩张(imdilate
)命令:
BW2 = bwareaopen(BW, 80);
%// Place your code for dilation here using BW2
imopen
打开您的图片,然后执行imdilate
我可以建议的最后一件事是首先打开你的图像去除虚假的小像素区域,然后按照你的建议执行你的扩张代码:
se = strel('square', 5);
BW2 = imopen(BW, se);
%// Place your code for dilation here using BW2
答案 1 :(得分:0)
您应该执行以下步骤:
更好的是:你用“重建开放”取代步骤2,这是一种侵蚀,接着是测地重建。此操作不会修改主模式。请参阅the result。
所有这些操作都应该在OpenCV或ImageJ中可用。