1.matlab中情况:
(1)双阈值算法检测和连接边缘在edge(I,'canny')--->thinAndThreshold()----->bwselect
(2)bwselect函数通过如下两步,实现双阈值检测和连接功能。
BW2 = imfill(~BW, seed_indices, n);
BW2 = BW2 & BW;
(3)imfill函数中,计算得到的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的图片
%mask为itongglowThresh的图片
%connb=8; modeFlag=2
(5)总结,由上(2)~(4)可以看出,其实我们最终得到的双阈值检测结果=imreconstructmex(marker, mask, connb,modeFlag)
为啥又是&又是|的,估计是因为没有直接实现这个功能(双阈值检测和连接)的函数,只能调用已有的函数来实现,难免有些重复工作存在
(6)基于imreconstructmex(marker, mask, connb, modeFlag)函数,我觉得它的功能为:
以mark作为背景图片,以marker上等于1的点作为中心点,进行中心点的8连通域连接搜索,以中心点为搜索中心,在背景图片中(像素值等于1)搜索八连通连接的目标前景。有点类似连通域计算过程。
(7)img=i