【问题标题】:Matlab watershed algorithm - control separation widthMatlab分水岭算法-控制分离宽度
【发布时间】:2018-02-20 12:30:54
【问题描述】:

我对使用分水岭算法分离图像上的特征很感兴趣。使用 matlab 教程,我尝试编写一个小的原理证明算法,我可以在图像分析中进一步使用它。

Im = imread('../../Pictures/testrec.png');
bw = rgb2gray(Im);
figure
imshow(bw,'InitialMagnification','fit'), title('bw')

%Compute the distance transform of the complement of the binary image.
D = bwdist(~bw);
figure
imshow(D,[],'InitialMagnification','fit')
title('Distance transform of ~bw')

%Complement the distance transform, and force pixels that don't belong to the objects to be at Inf .
D = -D;
D(~bw) = Inf;

%Compute the watershed transform and display the resulting label matrix as an RGB image.
L = watershed(D);
L(~bw) = 0;
rgb = label2rgb(L,'jet',[.5 .5 .5]);
figure
imshow(rgb,'InitialMagnification','fit')
title('Watershed transform of D')

特征分离似乎有些随机,从中间的延长特征可以看出。但是,分水岭算法似乎没有任何参数可用于优化其性能。你能建议如何引入这样的参数,或者更好的算法来处理数据。

额外问题:我有兴趣首先使用 bwconncomp 分离我的图像,然后有选择地将分水岭算法仅应用于某些区域。假设我知道我想将算法应用到哪些 cc.PixelIdxList 区域 - 如何获得具有分离组件的新 PixelIdxList。

【问题讨论】:

  • 嗨,Mehrdad,感谢您的建议。我之前确实看过。问题是最终结果将一些单元格随机分成两半,这是不可取的。如果可以控制最大分离厚度(只是弥补),那就太好了

标签: matlab image-processing watershed


【解决方案1】:

分水岭变换不能分离凸形。 没有办法改变这一点。凸形总是产生一个对象。

非常接近凸面的斑点总是会导致较差的分水岭结果。

你得到“有点随机”结果而不是单个盆地的唯一原因是有几个像素有点偏离周边。

流域的结果通过预处理和后处理得到改善。但这对于某个问题来说是非常具体的。

【讨论】:

  • 感谢您的回答,但不幸的是它不是很有帮助。我很清楚这是可以做到的。例如,我可以通过每个形状绘制所有可能的线,计算宽度最小的位置和平均宽度,然后根据该比例决定是否分开。但是,当然,我不是第一个遇到这个问题的人,如果可能的话,我想使用现有的解决方案
  • @AleksejsFomins 您询问是否可以将一些参数引入分水岭以使其结果不那么随机。我没有说不可能以另一种方式得到更合理的结果。有很多方法可以解决这个问题,但正如我所说,这取决于具体问题,无法给出一般性答案。对于这个特定的 blob,您当然可以简单地计算边界框并取其短轴。这当然不适用于三个合并的 blob……您可以在生物或医学图像处理书籍中找到解决此问题的方法,这些书籍将细胞分开。
猜你喜欢
  • 1970-01-01
  • 2011-11-17
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
相关资源
最近更新 更多