- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OpenCV学习笔记(二)
五 形态学操作
形态学操作
简单来讲,形态学操作就是基于形状的一系列图像处理操作。通过将 结构元素 作用于输入图像来产生输出图像。
最基本的形态学操作有二:腐蚀与膨胀(Erosion 与 Dilation)。 他们的运用广泛:
消除噪声
分割(isolate)独立的图像元素,以及连接(join)相邻的元素。
寻找图像中的明显的极大值区域或极小值区域。
腐蚀操作
腐蚀在形态学操作家族里是膨胀操作的孪生姐妹。它提取的是内核覆盖下的相素最小值。
进行腐蚀操作时,将内核 B 划过图像,将内核 B 覆盖区域的最小相素值提取,并代替锚点位置的相素。
我们使用腐蚀操作。从下面的结果图我们看到亮区(背景)变细,而黑色区域(字母)则变大了。
腐蚀操作函数原型:
void erode(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar borderValue=morphologyDefaultBorderValue() )
1
可以看到前三个是必要的参数,后面都有默认的参数。
InputArray kernel腐蚀操作的内核
膨胀操作
此操作将图像 A 与任意形状的内核 (B),通常为正方形或圆形,进行卷积。
内核 B 有一个可定义的 锚点, 通常定义为内核中心点。
进行膨胀操作时,将内核 B 划过图像,将内核 B 覆盖区域的最大相素值提取,并代替锚点位置的相素。显然,这一最大化操作将会导致图像中的亮区开始”扩展” (因此有了术语膨胀 dilation )
void dilate(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar borderValue=morphologyDefaultBorderValue() )
1
2
开运算(Opening)
开运算是通过先对图像腐蚀再膨胀实现的。
dst = open( src, element) = dilate( erode( src, element ) )
能够排除小团块物体(假设物体较背景明亮)
闭运算(Closing)
闭运算是通过先对图像膨胀再腐蚀实现的。
dst = close( src, element ) = erode( dilate( src, element ) )
能够排除小型黑洞(黑色区域)。
形态梯度(Morphological Gradient)
膨胀图与腐蚀图之差
dst = morph_{grad}( src, element ) = dilate( src, element ) - erode( src, element
顶帽(Top Hat)
原图像与开运算结果图之差
dst = tophat( src, element ) = src - open( src, element )
黑帽(Black Hat)
闭运算结果图与原图像之差
dst = blackhat( src, element ) = close( src, element ) – src
六 图像的放大和缩小
图像金字塔(Image Pyramids)
一个图像金字塔是一系列图像的集合 - 所有图像来源于同一张原始图像 - 通过梯次向下采样获得,直到达到某个终止条件才停止采样。
有两种类型的图像金字塔常常出现在文献和应用中:
高斯金字塔(Gaussian pyramid): 用来向下采样
拉普拉斯金字塔(Laplacian pyramid): 用来从金字塔低层图像重建上层未采样图像
向下采样导致了,图像放大,造成模糊
向上采样会导致丢失信息,因为他缩小了图像
向上采用函数原型:
void pyrUp(InputArray src, OutputArray dst, const Size dstsize=Size(), int borderType=BORDER_DEFAULT )
向下采用函数原型:
void pyrDown(InputArray src, OutputArray dst, const Size dstsize=Size(), int borderType=BORDER_DEFAULT )
实例:
//将图像放大两倍
pyrUp(src, dst, Size(src.cols
文档评论(0)