\tutorial_code\ImgProc\Morphology




空巴瓦


【11】Morphology_1.cpp Morphology_2.cpp

形态学操作
就是
基于形状的一系列图像处理操作。

通过将 结构元素 作用于输入图像来产生输出图像。

最基本的形态学操作有二:腐蚀与膨胀(Erosion 与 Dilation)。

他们的运用广泛:
消除噪声
分割(isolate)独立的图像元素,以及连接(join)相邻的元素。
寻找图像中的明显的极大值区域或极小值区域。



沒錯啦,我本人長這樣。


膨胀

此操作将图像 A 与任意形状的内核 (B),通常为正方形或圆形,进行卷积。

内核 B 有一个可定义的 锚点, 通常定义为内核中心点。

进行膨胀操作时,将内核B 划过图像,将内核B 覆盖区域的最大相素值提取,并代替锚点位置的相素。显然,这一最大化操作将会导致图像中的亮区开始”扩展” (因此有了术语膨胀 dilation )。对上图采用膨胀操作我们得到:





背景(白色)膨胀,而黑色字母缩小了。




腐蚀

它提取的是内核覆盖下的相素最小值。

进行腐蚀操作时,将内核B 划过图像,将内核B 覆盖区域的最小相素值提取,并代替锚点位置的相素。

以与膨胀相同的图像作为样本,我们使用腐蚀操作。从下面的结果图我们看到亮区(背景)变细,而黑色区域(字母)则变大了。



本程序的总体流程:

装载图像 (可以是 RGB图像或者灰度图 )
创建两个显示窗口 (一个用于膨胀输出,一个用于腐蚀输出)
为每个操作创建两个 Trackbars:
第一个 trackbar “Element” 返回 erosion_elem 或者 dilation_elem
第二个 trackbar “Kernel size” 返回 erosion_size 或者 dilation_size 。
每次移动标尺, 用户函数 Erosion 或者 Dilation 就会被调用,函数将根据当前的trackbar位置更新输出图像。

老虎沒被虐之前。




 



剛吃了一道小當家做的料理,全身忍不住發光啊。


膨胀
void dilate(
const Mat& src, Mat& dst,
const Mat& element,
Point anchor=Point(-1, -1),
int iterations=1,
int borderType=BORDER_CONSTANT,
const Scalar& borderValue=morphologyDefaultBorderValue())




进行 腐蚀 操作的函数是 erode 。
void erode(
const Mat& src, Mat& dst,
const Mat& element,
Point anchor=Point(-1, -1),
int iterations=1,
int borderType=BORDER_CONSTANT,
const Scalar& borderValue=morphologyDefaultBorderValue()
)

参数:

element: 腐蚀操作的内核。如果不指定,默认为一个简单的 矩阵。
否则,我们就要明确指定它的形状,
可以使用函数 getStructuringElement:
Mat element = getStructuringElement( erosion_type,
                                     Size( 2*erosion_size + 1, 2*erosion_size+1 ),
                                     Point( erosion_size, erosion_size ) );

我们可以为我们的内核选择三种形状之一:
矩形: MORPH_RECT
交叉形: MORPH_CROSS
椭圆形: MORPH_ELLIPSE

anchor 锚点 位置。不指定锚点位置,则默认锚点在内核中心位置。



下面的著名家常菜:亂燉




0: Opening

开运算是通过先对图像腐蚀再膨胀实现的。










1: Closing

闭运算是通过先对图像膨胀再腐蚀实现的。






能够排除小型黑洞(黑色区域)。





2: Gradient

形态梯度(Morphological Gradient)
膨胀图与腐蚀图之差






能够保留物体的边缘轮廓




3: Top Hat


原图像与开运算结果图之差









4: Black Hat

闭运算结果图与原图像之差






运行形态学操作的核心函数是 morphologyEx 。
void morphologyEx(
const Mat& src, Mat& dst,
 int op,
const Mat& element,
 Point anchor=Point(-1, -1),
 int iterations=1,
 int borderType=BORDER_CONSTANT,
 const Scalar& borderValue=morphologyDefaultBorderValue())

在本例中,我们使用了4个参数(其余使用默认值):
src : 原 (输入) 图像
dst: 输出图像
operation: 需要运行的形态学操作。
我们有5个选项:
Opening: MORPH_OPEN : 2
Closing: MORPH_CLOSE: 3
Gradient: MORPH_GRADIENT: 4
Top Hat: MORPH_TOPHAT: 5
Black Hat: MORPH_BLACKHAT: 6



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值