Эффективный алгоритм зацикливания на всех соседних парах (2 точечных клика) в двумерном массиве

Мне нужно перебрать все (неупорядоченные) пары пикселей в изображении, которые являются соседями друг с другом без повторения. Я использую 8-балльную окрестность. Например:

  x,y| 0   1   2   3   4
  ---+---+---+---+---+---+
   0 |   |   |   |   |   |
     +---+---+---+---+---+
   1 | a | b | c | d |   |
     +---+---+---+---+---+
   2 | e | f | g | h |   |
     +---+---+---+---+---+
   3 | i | j | k | l |   |
     +---+---+---+---+---+
   4 |   |   |   |   |   |
     +---+---+---+---+---+

Соседи пикселя f находятся в квадрате 3x3 вокруг него. Так, например, g образует 2-точечную клику с f. Если бы я перебрал все строки и столбцы изображения, эта клика была бы засчитана дважды: один раз, когда f - центральный пиксель, и один раз, когда g - центральный пиксель. Аналогичная неэффективность будет происходить с остальной частью клики.

Так что я хотел бы сделать, это цикл по всем кликам, а не по каждому пикселю. Если бы я был знаком с теорией графов, я думаю, что некоторые ответы, уже даные на подобные вопросы, были бы достаточными, но, как и я, я был бы очень признателен за любую помощь, которую вы можете оказать с эффективным алгоритмом с точки зрения непрофессионала. Заранее спасибо!

1 ответ

Решение

Обведите первую точку по всем точкам. Внутренний цикл второй точки над правым, нижним левым, нижним и нижним правым соседями (если они существуют).

Другие вопросы по тегам