首页 文章

在矩阵中映射邻居的子区域并计算每个子区域的质心

提问于
浏览
0

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

  • 给定具有某些值的MxN矩阵 .

  • 给定阈值T

Problems

  • 识别矩阵中的子区域 .

子区域是矩阵中的小区区域,其被认为是邻居,并且该子区域中的小区值大于T.如果两个小区C1和C2相邻则被认为是邻居 . 如果它们是对角相邻的,它们也是邻居 .

  • 为每个子区域计算"center of mass",定义为子区域中单元格的平均位置(x,y) . 每个单元格的位置按其值加权 .

My approach

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

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

  • 如果链表不为空,请转到2(并创建一个新树)

之后,计算每棵树的“质心”将很容易 .

这似乎是正确的方法还是更好,更优化的方法 .

希望得到一些反馈 .

谢谢 .

EDIT

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

1 回答

  • 1

    如果您有图像处理工具箱,则可以使用regionprops执行此操作 .

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

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

    现在,对于每个子区域 i ,您在 subregions(i).Centroid 上都有质心 .

相关问题