Эффективный алгоритм зацикливания на всех соседних парах (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 ответ
Обведите первую точку по всем точкам. Внутренний цикл второй точки над правым, нижним левым, нижним и нижним правым соседями (если они существуют).