二值图像的膨胀运算及其VC实现
来源:互联网 发布:利郎皮带淘宝 编辑:程序博客网 时间:2024/05/20 20:17
1、定义
参考冈萨雷斯的经典教材,对Z空间中的集合A和B,使用B对A进行膨胀,可定义为:
可以理解膨胀过程为:首先得到膨胀结构元素相对于自身原点(按照本人的理解,对于对称的结构元素,原点为其对称中心,对于非对称的结构元素,原点由工程师根据相应的应用制定)的映射,然后根据此映射的z平移,如果结构元素的映射与集合A交集非空,则z属于膨胀后的集合。
按照本人的理解,这个定义的意思就是从图像的第一个像素点开始依行遍历全部像素,在每个像素点上,移动结构元素B的映射的中心与其重合,然后判断此位置的结构元素是否有对A集合的覆盖,如果有,则保留这个点,否则对此点取反(按照如下的符号约定,即将改点灰度值设置为0)。2、灰度值及逻辑约定
1)二值图像中,所有黑色像素的集合是图像完整的形态学描述
2)对于二值化后的图像:黑色表示灰度为0,白色表示灰度为255
3)对于形态学结构元素:黑色代表1,白色表示0
4)值为1的点组成完整的形态学结构元素
3、VC实现灰度图的二值膨胀
首先贴上代码,然后再进行说明。作者实现的代码如下:
- /*************************************************************************
- *
- * \函数名称:
- * DilationAlgorithm()
- *
- * \输入参数:
- * pGrayMat: 二值图像数据
- * pErosionMat: 输出的腐蚀图像数据
- * width: 图形尺寸宽度
- * height: 图形尺寸高度
- * nWindows: 腐蚀操作结构元素尺寸,当nWindows=3时,如下:
- * 1 1 1
- * 1 1 1
- * 1 1 1
- * \返回值:
- * 无
- * \函数说明: 实现图像形态学算子-膨胀
- *
- ************************************************************************/
- void CDilationDlg::DilationAlgorithm(CvMat *pGrayMat, CvMat *pErosionMat, int width, int height, int nWindows)
- {
- int nSize = (int)(nWindows/2);
- for(int i=0; i<height; i++)
- {
- for(int j=0; j<width; j++)
- {
- int nFlag = 1; //用于控制循环跳出
- for(int m=i-nSize; m<=i+nSize; m++)
- {
- for(int n=j-nSize; n<=j+nSize; n++)
- {
- if((m>=0)&&(m<height)&&(n>=0)&&(n<width))
- {
- double nData = cvmGet(pGrayMat, m, n);
- if((nData == 0)) //如果覆盖区域有一个黑点,则设置保留当前结构元素中心点
- {
- nFlag=0;
- break;
- }
- }
- }
- if(nFlag==0)
- break;
- }
- if(nFlag==0)
- {
- double nData = 0;
- cvmSet(pErosionMat, i, j, nData);
- }
- else
- {
- double nData = 255;
- cvmSet(pErosionMat, i, j, nData);
- }
- }
- }
- }
对程序实现的主要说明如下:
1)选择腐蚀结构元素:本文对结构元素的选取不做过多的讨论,采用最简单常见的正方形结构元素,其全部像素均为1。这样一个结构元素相对于其原点的映射还是自身,因此在代码实现中没有进行相关的反射操作。所实现的函数DilationAlgorithm中最后一个参数用于控制结构元素尺寸。
2)边界处理:由于结构元素有一定的尺寸,因此当结构元素中心移动到图像边缘的若干个像素时,可能有一部分的结构元素超出了图像边界,这是本程序的处理方法是:将图像进行虚拟扩充,扩充的元素灰度值全部填255(根据上文定义,即为无意义的白色像素填充).
3)原始图像选择:所选择图片是白底上面有几个离散的黑点。这样可容易看出经过膨胀后黑点相对大小的变化。4、膨胀结果分析
顾名思义,腐蚀操作可以使得图像减小“一圈”,同时腐蚀操作能够将图像中较小的细节消除掉(效果与结构元素形状和尺寸有关)。以下是程序运行的结果。(为了能使得图像看起来清晰一点,对每幅图的前景和背景进行了反色处理)
图3 膨胀结果反色(结构元素尺寸为11)
对比图2与图1可以看出,经过尺寸为3的结构元素膨胀后,4个孤立的点尺寸都变大了,这说明了膨胀操作能够根据结构元素对图像中的有效像素进行扩充;
另外,对比图2与图3可以看到,当结构元素尺寸增大到11时,图中白色圆圈范围内的两个点集被膨胀为一个点,这说明了膨胀操作可以将小的裂缝桥接起来,根据这个功能我们能够对图像断裂进行恢复。
需要注意的是,当结构元素不是对称的时候,必须要对元素先进行自身映射,不然得到的结果是不合理的。- 二值图像的膨胀运算及其VC实现
- 二值图像的膨胀运算及其VC实现
- 二值图像的腐蚀运算及其VC实现
- 二值图像的腐蚀运算及其VC实现
- 二值图像的膨胀操作(vc实现)
- java实现的图像腐蚀、膨胀运算
- 二值图像的膨胀
- 二值图像的膨胀操作及c++实现
- 二值图像的腐蚀和膨胀
- 二值图像的腐蚀和膨胀
- 二值图像的腐蚀和膨胀
- 二值图像的腐蚀和膨胀
- 二值图像的腐蚀和膨胀
- 二值图像的腐蚀和膨胀
- 二值图像的腐蚀和膨胀
- 二值图像的腐蚀和膨胀
- 二值图像的腐蚀和膨胀
- 灰度图像的膨胀操作(vc实现)
- SQL中的联合查询
- solr配置说明
- android本地、sd卡保存对象或集合,以及读取该对象
- 怎么把威纶触摸屏上的程序上存到u盘上?
- Linux查看文件和文件夹大小
- 二值图像的膨胀运算及其VC实现
- Java 抽象类
- 查询索引中的碎片和重建SQL server索引
- 武汉软件工程职业学院与传智播客签约达成深度校企合作
- iOS开发拓展篇—CoreLocation定位服务
- 启动TOMCAT报错 java.util.zip.ZipException: invalid LOC header (bad signature)
- 数据库外连接,自然连接,内连接,条件连接,等值连接关系及详解
- WCF基础教程(四)——数据契约实现传送自定义数据类型
- javascript学习之路--变量重复声明