首页 > 其他分享 >本科课程【数字图像处理】实验1 - 腐蚀与膨胀

本科课程【数字图像处理】实验1 - 腐蚀与膨胀

时间:2022-12-06 10:35:36浏览次数:56  
标签:运算 数字图像处理 本科课程 腐蚀 char flag 图像 膨胀


大家好,我是【1+1=王】, 热爱java的计算机(人工智能)渣硕研究生在读。
如果你也对java、人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!!
Good better best, never let it rest, until good is better, and better best.

近期会把自己本科阶段的一些课程设计、实验报告等分享出来,供大家参考,希望对大家有帮助。

一、 实验目的

分析掌握腐蚀与膨胀的基本原理,编写腐蚀与膨胀的算法,并掌握开闭运算的规则。

二、 实验内容

1. 实验任务

运用实验框架,正确编写图像腐蚀与膨胀的算法,并运用图像的开闭运算,实现图像的去“渣渣”与填“洞洞”。

2. 程序设计

1) 原理
①膨胀定义:把结构元素B平移a后得到Ba,若Ba击中X,则记下这个a点。所有满足上诉条件的a点组成的集合称为X被B膨胀的结果。膨胀处理的结果是使原来的图像增大一圈;
②腐蚀定义:把结构元素B平移a后得到Ba,若Ba包含于X,则记下这个a点。所有满足上诉条件的a点组成的集合称为X被B腐蚀的结果。腐蚀处理的结果是使原来的图像减小一圈。因为膨胀是腐蚀的对偶运算,所以在本实验中腐蚀运用的原理为:对白色膨胀就是对黑色腐蚀;
③开运算:先腐蚀后膨胀称为开运算,它用来消除小物体,在纤细点处分离物体,平滑较大物体的边界的同时,并不明显改变其面积;
④闭运算:先膨胀后腐蚀的过程称为闭运算,它用来填充物体内的细小空洞,连接邻近物体,平滑其边界的同时,并不明显改变其面积。

2) 流程
①打开VC++,打开工作空间,在DIB类中操作,只操作灰度图像;
②在DilationDIB函数的相应位置添加膨胀操作的代码。
③在ErosionDIB函数的相应位置添加腐蚀操作的代码。
④点击BuildExecute按钮,打开待操作的灰度图像。
⑤在形态学变换中分别进行膨胀和腐蚀,开运算和闭运算的操作。

3) 数据输出

本科课程【数字图像处理】实验1 - 腐蚀与膨胀_实验


本科课程【数字图像处理】实验1 - 腐蚀与膨胀_实验报告_02


结论:

腐蚀操作可以抹掉图像周围的小渣滓,膨胀操作可以填补图像中间的空洞,而开操作与闭操作结合使用可以实现图像的去“渣渣”与填“洞洞”。

三、 实验环境

  1. 操作系统:WINDOWS 8
  2. 开发工具:Visual Studio、
  3. 实验设备:PC

源代码

膨胀算法:

int flag = 0;
for(j=1;j<lHeight-1;j++)
{
for(i=1;i<lWidth-1;i++)
{
lpSrc=(char*)lpDIBBits+lWidth*j+i;
lpDst=(char*)lpNewDIBBits+lWidth*j+i;
pixel=(unsigned char)*lpSrc;
*lpDst=(unsigned char)255;
flag=0;
for(int m=0;m<3;m++)
{
for(n=0;n<3;n++)
{
pixel=*(lpSrc+(m-1)*lWidth+n-1);
if(pixel==0)
{
*lpDst=(unsigned char)0;
flag=1;
}
if(flag==1)
break;
}
}
}
}

腐蚀算法:

int flag = 0;
for(j=0;j<lHeight-1;j++)
{
for(i=1;i<lWidth-1;i++)
{
lpSrc=(char*)lpDIBBits+lWidth*j+i;
lpDst=(char*)lpNewDIBBits+lWidth*j+i;
pixel=(unsigned char)*lpSrc;
*lpDst=(unsigned char)0;
flag=0;
for(int m=0;m<3;m++)
{
for(n=0;n<3;n++)
{
pixel=*(lpSrc+(m-1)*lWidth+n-1);
if(pixel==255)
{
*lpDst=(unsigned char)255;
flag=1;
}
if(flag==1)
break;
}
}
}
}



标签:运算,数字图像处理,本科课程,腐蚀,char,flag,图像,膨胀
From: https://blog.51cto.com/u_15901218/5914779

相关文章