我正在使用 YCbCr 颜色空间进行人脸检测。当我将它涂抹在人脸上时,会有表示鼻子、眼睛和嘴巴的间隙,最终的贴片看起来像(a)。为了消除这些差距,我应用了形态膨胀操作,得到了(b)中所示的结果图像,但我的要求是获得像(c)中所示的补丁。这意味着我想从处理过的补丁中移除外部轮廓。
谁能建议我如何去除这些外轮廓?
我正在使用 YCbCr 颜色空间进行人脸检测。当我将它涂抹在人脸上时,会有表示鼻子、眼睛和嘴巴的间隙,最终的贴片看起来像(a)。为了消除这些差距,我应用了形态膨胀操作,得到了(b)中所示的结果图像,但我的要求是获得像(c)中所示的补丁。这意味着我想从处理过的补丁中移除外部轮廓。
谁能建议我如何去除这些外轮廓?
我有一些建议给你,尽管如果没有实际的原始图像本身就很难验证这一点。尝试其中一种,看看你是否得到了一些有意义的东西。
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