如何在矩阵中找到对象的边界(坐标系)

Pao*_*aJ. 3 c++ algorithm

我在矩阵中有一个对象的足迹,简而言之就是对象占据的单元格(对象是一部分,标记为0的单元格未被占用,标记为1的单元格被对象占据).然后,我有一个list<pair<int, int> >矩阵坐标的被占用单元格列表.

如何查找属于该对象的该对象的所有边界单元格?(相邻的电池是例如(x1, y1)(x2, y2) if abs(x1-x2)<=1 && abs(y1-y2)<=1).

0  0  0  0  0
0  0  1  1  0 
0  1  1  1  0 
0  1  1  1  0
0  0  1  0  0 
Run Code Online (Sandbox Code Playgroud)

Jos*_*G79 5

如果所有相邻像素均为1,则将像素设置为0.其余1位于边界上:

for (x = 1; x < width-1; ++x) {
  for (y = 1; y < height-1; ++y) {
    if (data(x+1,y) && data(x-1,y) && data(x,y+1) && data(x,y-1)) {
      data(x,y) = 0;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


ami*_*mit 3

  1. 首先,找到对象。可以使用洪水填充来完成。
  2. (1) 中找到的所有单元格都是候选单元格,迭代所有候选单元格并生成具有一个或多个值为 0 的相邻单元格的单元格。(或者如果它位于矩阵的边缘)

一种可能的优化是仅“探索”相邻单元格为 0/矩阵边的单元格。