bwmorph分支点如何工作?

sha*_*wat 5 matlab pixel image-processing

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

oQo
Q
o
Run Code Online (Sandbox Code Playgroud)

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

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

谁能告诉我branchpoints算法如何找到分数? 如果我知道这一点,我会感到满意的是,实际上存在错误肯定是成对的原因,而真正的积极因素是孤立的,而不是幸运的巧合.

我有一种感觉,它看着像素周围的8连接,但我认为并非如此.

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

图片

sit*_*tic 2

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

Thin = bwmorph(Skel,'thin');
BP = bwmorph(Thin,'branchpoints');
Run Code Online (Sandbox Code Playgroud)

删除不必要的像素。(您也可以使用 Thin 代替 skel)。

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