5

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

oQo
Q
o

它将 Q 像素与实际的预期分支点一起标记为分支点。有很多这样的误报。

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

谁能告诉我分支点算法如何找到这些点? 如果我知道这一点,我可以满意的是,误报是成对出现的,而真正的肯定是单独的,而不是幸运的巧合,这是有实际原因的。

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

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

图片

4

2 回答 2

2

您的像素不是最小(8-)连接,尝试使用

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

去除不必要的像素。(您也可以使用薄而不是骨架)。

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

于 2012-05-22T13:24:41.587 回答
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');

(这里上传的图片有一些奇怪的伪影)

在此处输入图像描述

于 2012-05-22T13:39:38.713 回答