我正在使用图像处理工具箱在MATLAB中编写一段代码,我在其中使用了Skel = bwmorph(BM,'skel')来获取河流的骨架。我想使用BP = bwmorph(Skel,'branchpoints')来获得汇流和支流存在的点。每当骨架看起来像
时,我就会在BP中得到很多误报oQo
Q
o
它还将Q像素标记为分支点,以及实际的预期分支点。这样有很多误报。
我注意到一个真正的分支点在BP中作为一个孤立的像素出现,而fals分支点总是成对出现。
有谁能告诉我branchpoints算法如何找到分数? 如果我知道这一点,我会感到满意的是,有一个实际的原因,为什么假阳性是成对的,真正的积极因素是唯一的,而不是一个幸运的巧合。
我有一种感觉它看着像素周围的8连接,但我认为并不是全部。
为了澄清,我已经标记了输出的裁剪图像。它给出的正面显示为红色。可以看出,这些像素中只有一个实际上是一个分支点。我想知道算法是如何工作的,这样我就可以给出为什么误报成对出现的逻辑原因(如果它们实际上是这样的话)。
答案 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');
(图片中有一些奇怪的文物在这里上传)