【问题标题】:relabeling pixels based on distance between object's centerline and boundary根据对象中心线和边界之间的距离重新标记像素
【发布时间】:2014-04-02 16:37:15
【问题描述】:

我有一个包含对象的二进制图像,如下图所示。对象的centerlinered 中描述。对于属于对象的每个像素,我想用颜色重新标记它。例如,到中心线的正交距离是从中心线到对象边界距离的一半的像素,应标记为blue,否则标记为green。下面给出一个说明。有任何想法吗? 另外,我怎样才能将 1D gaussian 以对象 centerlineorthogonal 为中心拟合到它?

全分辨率图片可以在以下位置找到:http://imgur.com/AUK9Hs9

【问题讨论】:

  • 首先,您的中心线是否已为您定义,您是如何创建该中心线的?你有一些垂直的区域,这看起来很奇怪。您还显示了远离中心线的 2 条不同的线。它们与水平方向的角度不同,所以我的下一个问题是,当你想要着色时,你是否在寻找垂直于中心线的方向,而不管它与斑点边缘接触的角度如何?
  • 我认为垂直线仅用于演示颜色的分布方式。
  • @trumpetlicks,从centerline 移出的两条不同的线仅用于说明目的;-) 正如@Jonas 所提到的,它们显示了线上的像素,它们应该如何着色在relabeling 之后。关于垂直距离,我认为,从 blob 的边缘到centerline 可能会更好,但如果你也可以反过来说明(the way you mentioned),那将非常有帮助:-)跨度>

标签: matlab image-processing euclidean-distance boundary morphological-analysis


【解决方案1】:

下面是我想到的(假设您有图像处理工具箱):

创建两张二值图像,一张 BWin 在您的红线位置有 1 个(真实)像素,另一张 BWout 与您的白色区域相反(1 outisde区域和 0(假)内)。

像这样:

BWin:

BWout:

然后使用bwdist 将欧几里得变换应用于两者:

Din = bwdist(BWin);
Dout = bwdist(BWout);

您现在有两个像素强度的图像,表示到最近的非 0 像素的欧几里得距离。

现在减去两者,差的值将在等距离的一侧为正,在另一侧为负:

blueMask=Din-Dout>0;
greenMask=~BWout & blueMask;

然后您可以使用蒙版填充 RGB 层:

Result=zeros(size(II));
Result(:,:,1)=BWin;
Result(:,:,2)=greenMask;
Result(:,:,3)=~blueMask & ~BWin;
imshow(Result);

【讨论】:

  • 谢谢。但为了清楚起见,我原始图像中的 2 colored 行仅用于说明目的(它们实际上并不属于该对象)。它们仅用于显示这些线上的像素应该是relabeled
  • 感谢@Jigg 的代码!我想知道,我们可以使解决方案更通用吗?例如,如果我们需要将像素划分为3 区域,而不是 2,再次基于它们的距离,例如距离的前 1/3 之间的像素是一种颜色,然后是第二个三分之一的像素是另一种颜色,最后三分之一的像素是另一种颜色。
猜你喜欢
  • 2012-01-06
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
相关资源
最近更新 更多