我遇到了一个涉及以下内容的问题:
给定一个具有一些值的 MxN 矩阵。
给定阈值T
问题
- 识别矩阵中的子区域。
子区域是矩阵中被视为邻居的单元格区域,并且该子区域中的单元格值大于 T。两个单元格 C1 和 C2 如果相邻,则被视为邻居。如果它们对角相邻,它们也是邻居。
- 计算每个子区域的“质心”,定义为子区域中细胞的平均位置 (x,y)。每个单元格的位置均按其值进行加权。
我的方法
搜索 MxN 矩阵以限定单元格并将它们作为节点添加到链表中(它们的值必须大于阈值)。
从链表中拉出一个节点并将其放入“树”中。该节点将是父节点。根据邻居的定义搜索剩余节点的链表以查找“最近邻居”。每个邻居都作为子节点放置在“树”中。现在..对于每个子节点...搜索剩余节点的链表以找到它们的邻居。继续此操作直至完成。最终的树将代表一个子区域。
如果链表不为空,则转到 2(并创建一棵新树)
之后,计算每棵树的“质心”就会很容易。
这似乎是正确的方法还是有更好、更优化的方法。
希望得到一些反馈。
谢谢。
编辑
我可能应该提到,矩阵“放置”在 (x,y) 坐标系中,以便左下角单元格(M 行,第 0 列)对应于 (x,y) 坐标 (0, 0) 右上角单元格(第0行第N列)对应(x,y)坐标(N,M)
最佳答案
如果您有图像处理工具箱,则可以使用regionprops来做到这一点.
假设 M
是您的矩阵,T
是阈值:
subregions = regionprops(M > T, 'Centroid');
现在,每个子区域 i
的质心都位于 subregions(i).Centroid
上。
关于c - 在矩阵中映射相邻子区域并计算每个子区域的质心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23272853/