Visual C++ 2019中MFC图像处理编程(五) 膨胀运算和腐蚀运算

Visual C++ 2019 中 MFC 图像处理编程(五)

编写程序实现图像膨胀和图像腐蚀。

二值图像形态学运算就是图像形态学运算的基础,是一种针对图像集合的处理过程。二值图像形态学运算的过程就是在图像中移动结构元素,将结构元素与其下面重叠部分的图像进行交、并等集合运算。为了确定元素中的参照位置,一般把进行形态学运算时的结构元素的参考点称为原点,且原点可以选择在结构元素之中,也可以选择在结构元素之外。二值图像形态学处理的基本运算有腐蚀、膨胀、开运算、闭运算、击中与击不中及骨架抽取等。

  • 图像膨胀

膨胀是数学形态学中的一种基本运算。膨胀的作用与腐蚀相反,它是对二值化物体边界点进行扩充,将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。如果两个物体之间的距离比较近,则膨胀运算可能会把两个物体连通到一起。膨胀操作对填补图像分割后物体中的空洞很有用。

设 X 为目标图像,B 为结构元素,则目标图像 X 被结构元素 B 膨胀的数学表达式为:
在这里插入图片描述

膨胀运算的含义是,先对结构元素 B 做关于其原点的反射得到反射集合 BV,然后在目标图像 X 上将 BV 平移 x,则那些 BV 平移后与目标图像 X 至少有一个非零公共元素相交时,对应的原点位置所组成的集合就是膨胀运算的结果。

下图示意了用结构元素 B 对目标图像 X 进行膨胀运算的过程与结果。图(a)中白色的部分代表背景,灰色的部分代表目标图像 X。图(b)是结构元素 B,其原点位置用黑色标注。图©为结构元素 B 关于其原点的反射集合 BV。图(d)是膨胀运算的结果,其中灰色部分为原来的目标图像,黑色部分表示膨胀处理后与目标图像相比增加的部分。
在这里插入图片描述

  • 图像腐蚀
    腐蚀是一种最基本的数学形态学运算,其作用是消除物体边界点,使边界向内部收缩的过程,可以把小于结构元素的物体去除。这样选取不同大小的结构元素,就可以去除不同大小的物体。

    设 X 为目标图像,B 为结构元素,则目标图像 X 被结构元素 B 腐蚀的数学表达式为:
    在这里插入图片描述

腐蚀运算的含义是,每当在目标图像中找到一个与结构元素相同的子图像时,就把该子图像中与结构元素的原点位置对应的那个像素位置标注出来,目标图像上被标注出来的所有像素组成的集合即为腐蚀运算的结果。其实质就是在目标图像中标出那些与结构元素相同的子图像的原点位置的像素。

下图示意了用结构元素 B 对目标图像 X 进行腐蚀运算的过程与结果。图(a)中白色的部分代表背景,灰色的部分代表目标图像 X。图(b)是结构元素 B,其原点位置用黑色标注。图©中的黑色部分表示腐蚀后的结果,灰色部分表示目标图像被腐蚀掉的部分。

在这里插入图片描述

进行膨胀运算和腐蚀运算前先通过上一个实验中的 otsu(大津法)获取二值图像。

  • 膨胀运算关键代码的实现:
  1. 定义 3×3 的结构元素:
int kelnel[3][3] = { { 0,1,0 },
{ 1,1,1 },
{ 0,1,0 } };
}}
  1. 进行膨胀运算:
for (y = 1; y < biHeight - 1; y++){
for (x = 1; x < biWidth - 1; x++){
val = 0;//先赋值黑色,再赋值白色
for (j = 0; j < 3; j++){
n = y + j - 1;
for (i = 0; i < 3; i++){
m = x + i - 1;
if (kelnel[j][i]) continue;
if (otsupData[m * biWidth + n] != 0){
val = 255;
break;
}}
if (val == 255) break;
}
  • 腐蚀运算关键代码的实现:
  1. 定义 3×3 的结构元素:
int kelnel[3][3] = { { 0,1,0 },
{ 1,1,1 },
{ 0,1,0 } };//定义 3*3 的结构元素
  1. 进行腐蚀运算:
for (y = 1; y < biHeight - 1; y++){
for (x = 1; x < biWidth - 1; x++){
temp = 255;
for (j = 0; j < 3; j++){
n = y + j - 1;
for (i = 0; i < 3; i++){
m = x + i - 1;
if (kelnel[j][i]==0) continue;
if (otsupData[n * biWidth + m] == 0){
temp = 0;
break;
}}
if (temp == 0) break;
}
  • 运行结果如下所示:

在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值