【问题标题】:Mapping out subregions of neighbors in a matrix and calculating center of mass for each sub-region在矩阵中映射邻居的子区域并计算每个子区域的质心
【发布时间】:2014-04-24 15:09:25
【问题描述】:

我遇到了一个涉及以下问题的问题:

  1. 给定一个包含一些值的 MxN 矩阵。

  2. 给定一个阈值T

问题

  • 识别矩阵中的子区域。

子区域是矩阵中被视为邻居的单元格区域,并且该子区域中的单元格值大于 T。如果两个单元格 C1 和 C2 相邻,则将它们视为邻居。如果它们是对角相邻的,它们也是邻居。

  • 计算每个子区域的“质心”,定义为子区域中细胞的平均位置 (x,y)。每个单元格的位置都按其值加权。

我的方法

  1. 搜索 MxN 矩阵以限定单元格并将它们作为节点添加到链表(它们的值必须大于阈值)。

  2. 从链表中拉出一个节点并将其放入“树”中。该节点将是父节点。搜索剩余节点的链表以根据邻居的定义找到“最近的邻居”。每个邻居都作为子节点放置在“树”中。现在..对于每个子节点...搜索剩余节点的链表以找到它们的邻居。继续这个直到完成。最终的树将代表一个子区域。

  3. 如果链表不为空,则转到 2(并创建新树)

之后,计算每棵树的“质心”就很容易了。

这似乎是正确的方法,还是有更好、更优化的方法。

希望得到一些反馈。

谢谢。

编辑

我可能应该提到,矩阵“放置”在 (x,y) 坐标系中,因此左下角单元格(M 行,第 0 列)对应于 (x,y) 坐标 (0, 0)和右上角的单元格(第0行,第N列)对应(x,y)坐标(N,M)

【问题讨论】:

    标签: c matlab math image-processing signal-processing


    【解决方案1】:

    如果您有图像处理工具箱,您可以使用regionprops 来实现。

    假设M 是您的矩阵,T 是阈值:

    subregions = regionprops(M > T, 'Centroid');
    

    现在您在subregions(i).Centroid 上获得了每个子区域i 的质心。

    【讨论】:

    • Rafael:那太好了——谢谢你!不过,我很想知道我的方法听起来是否正确?
    猜你喜欢
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    相关资源
    最近更新 更多