canny边缘提取之四 双阈值边缘检测及连接 matlab函数转C++

本文详细介绍了将MATLAB中的Canny边缘检测双阈值及连接功能转换为C++的过程,涉及imfill、bwselect、imreconstruct等函数的使用和理解。在C++实现中,注意到与MATLAB的细微差异,主要在于C++默认将中心点视为1,即使在原始背景中不为1。最后,展示了MATLAB和C++的结果对比。
摘要由CSDN通过智能技术生成


1.matlab中情况:

1)双阈值算法检测和连接边缘在edge(I,'canny')--->thinAndThreshold()----->bwselect

 (2bwselect函数通过如下两步,实现双阈值检测和连接功能。

                                   BW2 = imfill(~BW, seed_indices, n);
                                   BW2 = BW2 & BW;

3imfill函数中,计算得到的I2即为(2)中的BW2

                                  mask = imcomplement(I);
                                  marker = false(size(mask));
                                  marker(locations) = mask(locations);
                                  marker = imreconstruct(marker, mask, conn);//conn
为连通值,4连通或8连通,这里是8连通
                                  I2 = I | marker;

(4)imreconstruct函数中,直接调用如下函数,(3)中的marker=im;其中imreconstructmex()函数无法查看其内部代码

                                  im=imreconstructmex(marker, mask, connb, modeFlag)

                                %marker为通过highThresh的图片

                                %maskitongglowThresh的图片

                               %connb=8; modeFlag=2

(5)总结,由上(2)~(4)可以看出,其实我们最终得到的双阈值检测结果=imreconstructmex(marker, mask, connb,modeFlag)

       为啥又是&又是|的,估计是因为没有直接实现这个功能(双阈值检测和连接)的函数,只能调用已有的函数来实现,难免有些重复工作存在

(6)基于imreconstructmexmarker, mask, connb, modeFlag)函数,我觉得它的功能为:

       mark作为背景图片,以marker上等于1的点作为中心点,进行中心点的8连通域连接搜索,以中心点为搜索中心,在背景图片中(像素值等于1)搜索八连通连接的目标前景。有点类似连通域计算过程。

(7img=i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值