bwmorph分支点如何工作?

时间:2012-05-22 12:09:49

标签: matlab image-processing pixel

我正在使用图像处理工具箱在MATLAB中编写一段代码,我在其中使用了Skel = bwmorph(BM,'skel')来获取河流的骨架。我想使用BP = bwmorph(Skel,'branchpoints')来获得汇流和支流存在的点。每当骨架看起来像

时,我就会在BP中得到很多误报
oQo
Q
o

它还将Q像素标记为分支点,以及实际的预期分支点。这样有很多误报。

我注意到一个真正的分支点在BP中作为一个孤立的像素出现,而fals分支点总是成对出现。

有谁能告诉我branchpoints算法如何找到分数? 如果我知道这一点,我会感到满意的是,有一个实际的原因,为什么假阳性是成对的,真正的积极因素是唯一的,而不是一个幸运的巧合。

我有一种感觉它看着像素周围的8连接,但我认为并不是全部。

为了澄清,我已经标记了输出的裁剪图像。它给出的正面显示为红色。可以看出,这些像素中只有一个实际上是一个分支点。我想知道算法是如何工作的,这样我就可以给出为什么误报成对出现的逻辑原因(如果它们实际上是这样的话)。

The image

2 个答案:

答案 0 :(得分:2)

您的像素不是最低限度(8-)连接,请尝试使用

Thin = bwmorph(Skel,'thin');
BP = bwmorph(Thin,'branchpoints');

删除不必要的像素。 (你也可以使用thin而不是skel)。

我认为,如果至少3个像素(不包括中心)为'1',则分支点的基本算法会查看3,3个邻域像素。

答案 1 :(得分:2)

BW = (rgb2gray(imread('w5udH.jpg')) > 50);
[i,j] = ind2sub(size(BW), find(bwmorph(bwmorph(BW,'thin',Inf),'branchpoint') == 1));
imshow(BW); hold on; plot(j,i,'rx');

(图片中有一些奇怪的文物在这里上传)

enter image description here