【问题标题】:Finding length between a lot of elements查找许多元素之间的长度
【发布时间】:2017-05-04 16:43:56
【问题描述】:

我有一张细胞骨架的图像。里面有很多小物体,我想计算每个轴上所有小物体之间的长度,并得到一个包含所有这些数据的矩阵。我正在尝试在 matlab 中执行此操作。

我的最终目标是确定对象之间是否存在任何具有恒定距离的轴。 我试过bwdist 并使用连接的组件没有任何运气。 您还有其他想法吗?

【问题讨论】:

  • 每个轴是什么意思? X 和 Y 轴,欧几里得距离还是别的什么?
  • 不知道你在问什么“恒定距离”,但“pdist”功能可能是答案。

标签: matlab image-processing


【解决方案1】:

因此,最终目标是您希望沿某个方向(线性)全局拉伸此图像,以便最近的对之间的距离最终最接近,希望相同吗?或者你可以做更复杂的拉伸吗? (请注意,对于任意复杂的,您始终可以使其工作:))

如果是线性全局,x' 和 y' 中的距离将是 x 和 y 中旧距离的简单乘法,应用于每对点。因此,最终的欧几里得距离最终将是sqrt((SX*x)^2 + (SY*y)^2),其中 SX 在 x 中拉伸,SY 在 y 中拉伸; X 和 Y 是 X 和 Y 中点对之间的距离。

如果您只对“相同”的部分感兴趣,那么解决方案并不难:

找到所有感兴趣的对象,并将它们的 X 和 Y 坐标放入 N*2 矩阵中。
计算 X 和 Y 中所有对象对之间的距离。您最终将得到 2 个大小为 N*N 的矩阵(对角线为 0,对称且实数,不确定该类型矩阵的名称是什么)。
找到最小距离(比如在 A 和 B 之间)。

你可能已经有了这个。现在:

以 C 为例,进行 N-1 次转换,最终都以 C->nearestToC = A->B 结尾。这是一个简单的方程组,你有X1^2*SX^2+Y1^2*SY^2 = X2^2*SX^2+Y2*SY^2
所以,首先说A->B = C->A,然后是A->B = C->B,然后是A->B = C->D 等等。确保转换是标准化的=> SX^2 + SY^2 = 1。如果找不到,唯一有效的转换是SX = SY = 0,这意味着您在这里没有解决方案。显然,SX 和 SY 必须是真实的。
请注意,此解决方案是唯一的,除非 X1 = X2Y1 = Y2。在这种情况下,请抓住 C 以外的其他点来找到这种转换。
对于每个变换,检查剩余点并找到它们的所有最近邻居。如果距离总是与这 2 个相同(在给定的容差范围内),那太好了,你找到了你的转变。如果不是,则此转换不起作用,您应该继续进行下一个转换。

如果您想要一个最小化距离之间变化的转换(但不要求它们几乎相等),我会做一些优化方法并搜索最小值 - 我不知道如何找到精确的解决方案.如果您没有线性或全局拉伸,我也会选择这个。

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,第一步是获取图像中所有对象的质心点作为 (x,y) 坐标。然后,您可以轻松计算所有点之间的所有距离。我建议查看这些距离的直方图,这可能会提供有关距离分布性质的一些信息(例如,它是否是均匀随机的,或者是否出现任何模式)。

    获取质心点不是一件容易的事,考虑将图像转换为二进制图像,或使用斑点检测或/和边缘检测器进行某种背景减除。

    要构建直方图,您可以使用histogram

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多