C语言数字图像处理(八):图像腐蚀、膨胀、开运算闭运算,边界提取和连接

0. 完整仓库 & 教程:

这一章节的完整代码在:Chapter 8. Erosion, Dilation, Opening, Closing, and Connection

如果你喜欢这个系列的文章或者感觉对你有帮助,请给我的仓库一个⭐️

1. 腐蚀、膨胀、开运算和闭运算

1.1 腐蚀

算法:

Z^2 中的集合 𝐴 和 集合𝐵 ,𝐵 对 𝐴 的侵蚀表示为 𝐴⊖𝐵 ,定义为:

在代码的实现中,该算法使用卷积内核(convolution kernel) 𝐵 对图像 𝐴 与进行卷积。内核 𝐵 具有可定义的锚点,即中心点。然后在图像上滑动内核 𝐵,提取内核 𝐵 覆盖区域的最小像素值,并替换锚点处的像素。

图像和结果对比(noisy_fingerprint, noise_rectangle):

结果分析:

腐蚀操作将减少图像中的高光区域(在我们的例子中为纯白色)。 它本质上是沿着图中物体的边界移除像素并减小物体的大小。 它具有减少零星高光噪点的效果,并且其效果随着卷积元素尺寸的增大而增加,同时消耗的时间也会急剧增加。

代码实现(完整代码见顶部GitHub):
for(int i = 0; i < image->Height; i++) {
    for(int j = 0; j < image->Width; j++) {
        int min = 255;
        // the size of structual element can be changed values of x and y:
        for(int x = -1; x <= 1; x++) {
            for(int y = -1; y <= 1; y++) {
                int temp = tempin[(image->Width)*(i+x) + (j+y)];
                if(temp < min) min = temp;
            }
        }
        tempout[image->Width * i + j] = min;
    }
}

1.2 膨胀

算法:

Z^2 中的集合 𝐴 和 集合𝐵 ,𝐵 对 𝐴 的膨胀表示为 𝐴⊕𝐵 ,定义为:

与腐蚀算法类似,它也使用卷积内核 𝐵 对图像 𝐴 与进行卷积。 然后在图像上滑动核𝐵,提取核𝐵覆盖区域的最大像素值,并替换中心点的像素。

图像和结果对比(noisy_fingerprint, noise_rectangle):

结果分析:

膨胀与腐蚀相反,它将放大图像中的高光区域(在我们的例子中为纯白色)。 它具有放大细节的效果,放大的程度取决于卷积元素的大小。 但膨胀操作会放大图像中不需要的零星噪声。

代码实现(完整代码见顶部GitHub):
for(int i = 0; i < ima
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值