opencv笔记三十四(基于分水岭变换的图像分割,核心操作:去噪声)watershed(t1, t4);t1为CV_8UC3, t4为CV_32SC1,元素为黑色背景为白色

本文介绍了如何使用OpenCV的distanceTransform函数进行图像去噪,并结合watershed函数进行图像分割。详细阐述了distanceTransform在计算非零像素到最近零像素点最短距离的应用,以及watershed函数的参数要求和工作原理。实验过程包括图像锐化、制造markers、分水岭变换和上色等步骤,通过高模糊去噪声和膨胀腐蚀改善了分割效果。

  

 

API:(参考https://blog.csdn.net/qq_18343569/article/details/47972245

distanceTransform函数

函数的作用:

主要用于计算非零像素到最近零像素点的最短距离。一般用于求解图像的骨骼

函数调用形式:

C++: void distanceTransform(InputArray src, OutputArray dst, int distanceType, int maskSize)

参数详解:

InputArray src:输入的图像,一般为二值图像

 OutputArray dst:输出的图像

int distanceType:所用的求解距离的类型、

It can be DIST_L1, DIST_L2 , or  DIST_C

mask_size  距离变换掩模的大小,可以是 3 或 5. 对 DIST_L1 或 DIST_C 的情况,参数值被强制设定为 3, 因为 3×3 mask 给出 5×5 mask 一样的结果,而且速度还更快。 

 

mask

用户自定义距离情况下的 mask。 在 3×3 mask 下它由两个数(水平/垂直位量,对角线位移量)组成, 5×5 mask 下由三个数组成(水平/垂直位移量,对角位移和 国际象棋里的马步(马走日))

 

函数 cvDistTransform 二值图像每一个象素点到它最邻近零象素点的距离。对零象素,函数设置 0 距离,对其它象素,它寻找由基本位移(水平、垂直、对角线或knight's move,最后一项对 5×5 mask 有用)构成的最短路径。 全部的距离被认为是基本距离的和。由于距离函数是对称的,所有水平和垂直位移具有同样的代价 (表示为 a ), 所有的对角位移具有同样的代价 (表示为 b), 所有的 knight's 移动具有同样的代价 (表示为 c). 对类型 CV_DIST_C 和 CV_DIST_L1,距离的计算是精确的,而类型 CV_DIST_L2 (欧式距离) 距离的计算有某些相对误差 (5×5 mask 给出更精确的结果), OpenCV 使用 [Borgefors86] 推荐的值:

CV_DIST_C (3×3):

a=1, b=1

CV_DIST_L1 (3×3):

a=1, b=2

CV_DIST_L2 (3×3):

a=0.955, b=1.3693

CV_DIST_L2 (5×5):

a=1, b=1.4, c=2.1969

下面用户自定义距离的的距离域示例 (黑点 (0) 在白色方块中间): 用户自定义 3×3 mask (a=1, b=1.5)

4.5 4 3.5 3 3.5 4 4.5
4 3 2.5 2 2.5 3 4
3.5 2.5 1.5 1 1.5 2.5 3.5
3 2 1 0 1 2 3
3.5 2.5 1.5 1 1.5 2.5 3.5
4 3 2.5 2 2.5 3 4
4.5 4 3.5 3 3.5 4 4.5

用户自定义 5×5 mask (a=1, b=1.5, c=2)

4.5 3.5 3 3 3 3.5 4.5
3.5 3<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值