Что касается вычисления матрицы смежности по градиенту изображения, я нашел кое-что в python.
большая смежность-матрица из-изображений-в-питона
Я хочу рассчитать матрицу смежности на основе 4 или 8 соседних пикселей. Я также нашел http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3408910/
Как я могу сделать это с 4 или 8 соседями? Я хочу сделать это на C ++. У меня уже есть градиентное изображение для использования.
Для простоты предположим, что градиентное изображение представляет собой растровое изображение квадратного пикселя. n x n
, Присвойте порядковый номер каждому пикселю путем подсчета основных рядов, начиная с северо-западного угла.
Определите (n^2 x n^2)
матрица смежности A = (a_ij)_i,j=1..n^2
следующее:
a_i(i-n) = 1; i > n // northern neighbour
a_i(i+1) = 1; (i-1) mod n < n-1 // eastern neighbour
a_i(i-1) = 1; (i-1) mod n > 0 // western neighbour
a_i(i+n) = 1; i <= n^2 - n // southern neighbour
a_ij = 0; else
Для 8 соседей на пиксель добавить
a_i(i-n+1) = 1; i > n and (i-n-1) mod n < n-1 // northeastern neighbour
a_i(i-n-1) = 1; i > n and (i-n-1) mod n > 0 // northwestern neighbour
a_i(i+n+1) = 1; i <= n^2 - n and (i+n-1) mod n < n-1 // southeastern neighbour
a_i(i+n-1) = 1; i <= n^2 - n and (i+n-1) mod n > 0 // southwestern neighbour
Вместо 1
Вы можете назначить веса, рассчитанные по градиенту между соседними пикселями. Обратите внимание, что 0
записи будут изменены на M
, M
представляя sufficiently large
число ( infinite
, поскольку соответствующие ячейки не являются соседями, но это требует реализации принять специальные положения).
A
будет разреженным и будет иметь регулярную структуру, для эффективности вам, вероятно, следует использовать класс для обработки разреженных матриц. Это ТАК вопрос предоставляет некоторые предложения.
Других решений пока нет …