分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
OpenCV 形态学操作
一、图像腐蚀 膨胀 细化的基本原理
1 .图像细化的基本原理⑴ 图像形态学处理的概念 数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,还包括用于预处理或后处理的形态学过滤、细化和修剪等。图像形态学处理中我们感兴趣的主要是二值图像。 在二值图像中,所有黑色像素的集合是图像完整的形态学描述,二值图像的各个分量是Z2 的元素。假定二值图像A 和形态学处理的结构元素B 是定义在笛卡儿网格上的集合,网格中值为1 的点是集合的元素,当结构元素的原点移到点(x,y) 时,记为Sxy ,为简单起见,结构元素为3x3 ,且全都为1 ,在这种限制下,决定输出结果的是逻辑运算。 ⑵ 二值图像的逻辑运算 逻辑运算尽管本质上很简单,但对于实现以形态学为基础额图像处理算法是一种有力的补充手段。在图像处理中用到的主要逻辑运算是:与、或和非(求补),它们可以互相组合形成其他逻辑运算。⑶ 膨胀和腐蚀 膨胀和腐蚀这两种操作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的。① 膨胀 是以得到B 的相对与它自身原点的映像并且由z 对映像进行移位为基础的。A 被B 膨胀是所有位移z 的集合,这样, 和A 至少有一个元素是重叠的。我们可以把上式改写为: 结构元素B 可以看作一个卷积模板,区别在于膨胀是以集合运算为基础的,卷积是以算术运算为基础的,但两者的处理过程是相似的。⑴ 用结构元素B ,扫描图像A 的每一个像素⑵ 用结构元素与其覆盖的二值图像做“ 与” 操作⑶ 如果都为0 ,结果图像的该像素为0 。否则为1 ② 腐蚀 对Z 中的集合A 和B ,B 对A 进行腐蚀的整个过程如下: ⑴ 用结构元素B ,扫描图像A 的每一个像素⑵ 用结构元素与其覆盖的二值图像做“ 与” 操作⑶ 如果都为1 ,结果图像的该像素为1 。否则为0 腐蚀处理的结果是使原来的二值图像减小一圈。⑷ 击中(匹配)或击不中变换 假设集合A 是由3 个子集X ,Y 和Z 组成的集合,击中(匹配)的目的是要在A 中找到X 的位置,我们设X 被包围在一个小窗口W 中,与W 有关的X 的局部背景定义为集合的差(W -X ),则X 在A 内能得到精确拟合位置集合是由X 对A 的腐蚀后由(W -X )对A 的补集Ac 腐蚀的交集,这个交集就是我们要找的位置,我们用集合B 来表示由X 和X 的背景构成的集合,我们可以令B =(B1 ,B2 ),这里B1 =X ,B2 =(W -X ),则在A 中对B 进行匹配可以表示为:A⊙B 我们称为形态学上的击中或击不中变换。
⑸ 开闭操作 开操作是先腐蚀、后膨胀处理。
闭操作是先膨胀、后腐蚀处理。
(6) 细化 图像细化一般作为一种图像预处理技术出现,目的是提取源图像的骨架,即是将原图像中线条宽度大于1 个像素的线条细化成只有一个像素宽,形成“ 骨架” ,形成骨架后能比较容易的分析图像,如提取图像的特征。 细化基本思想是“ 层层剥夺” ,即从线条边缘开始一层一层向里剥夺,直到线条剩下一个像素的为止。图像细化大大地压缩了原始图像地数据量,并保持其形状的基本拓扑结构不变,从而为文字识别中的特征抽取等应用奠定了基础。细化算法应满足以下条件:① 将条形区域变成一条薄线;② 薄线应位与原条形区域的中心;③ 薄线应保持原图像的拓扑特性。 细化分成串行细化和并行细化,串行细化即是一边检测满足细化条件的点,一边删除细化点;并行细化即是检测细化点的时候不进行点的删除只进行标记,而在检测完整幅图像后一次性去除要细化的点。 常用的图像细化算法有hilditch 算法,pavlidis 算法和rosenfeld 算法等。 注:进行细化算法前要先对图像进行二值化, 即图像中只包含“ 黑” 和“ 白” 两种颜色。
具体详细的图像形态学资料参考:http://wenku.baidu.com/view/1923d18fcc22bcd126ff0ccc.html
二、OpenCv 形态学操作相关函数
1 、MorphologyEx 高级形态学变换
void cvMorphologyEx( const CvArr* src, CvArr* dst, CvArr* temp, IplConvKernel* element, int operation, int iterations=1 ); src 输入图像. dst 输出图像. temp 临时图像,某些情况下需要 element 结构元素 operation 形态操作的类型: CV_MOP_OPEN - 开运算 CV_MOP_CLOSE - 闭运算 CV_MOP_GRADIENT - 形态梯度 CV_MOP_TOPHAT - " 顶帽" CV_MOP_BLACKHAT - " 黑帽" iterations 膨胀和腐蚀次数. 函数 cvMorphologyEx 在膨胀和腐蚀基本操作的基础上,完成一些高级的形态变换: 开运算 dst=open(src,element)=dilate(erode(src,element),element) 闭运算 dst=close(src,element)=erode(dilate(src,element),element) 形态梯度 dst=morph_grad(src,element)=dilate(src,element)-erode(src,element) " 顶帽" dst=tophat(src,element)=src-open(src,element) " 黑帽" dst=blackhat(src,element)=close(src,element)-src 临时图像 temp 在形态梯度以及对“ 顶帽” 和“ 黑帽” 操作时的 in-place 模式下需要。
2 、Di