В настоящее время я работаю над проектом, включающим манипуляции с бинарными изображениями на уровне пикселей (прореживание, кластеризация и т. Д.).Многие из используемых алгоритмов включают проверку атрибутов соседних пикселей.Пиксельный объект, определенный как:
Public class pixel
{
int x, y;
int NumberOfNeighbours;
int ConnectivityNumber;
int ClusterNumber;
}
Я могу создать список, содержащий все пиксели в изображении для их последовательной обработки, но я хочу связать каждый из пикселей в списке с их положением на сетке, чтобыэффективно получить свойства соседних пикселей.
Например, если у меня есть карта [7,7] с 9 пикселями [от A до I] на карте, http://i.imgur.com/lTzSM.jpg, и я хочу проверитьзначение ClusterNumber
каждого соседа каждого пикселя.Кажется очень неэффективным пробежаться по списку 8 раз, чтобы найти соседей каждого пикселя, и было бы проще использовать сетку, чтобы просто проверить соседей.Есть ли способ сослаться на pixel
в сетке, чтобы я мог получить доступ к его свойствам в качестве соседа текущего пикселя в списке?Я думал о создании int[,] map = new int[width,height]
, содержащем индексы пикселей в списке, но это создает проблему, когда пиксель удаляется из списка, и карту необходимо будет обновлять каждый раз, когда пиксель удаляется из списка.
Кроме того, есть ли способ, которым я могу связать / указать на соседей пикселя в самом классе так, чтобы (схематически) я мог получить доступ к свойствам соседа
//list[0].NeighborE == null
//list[0].NeighborNE == B
//list[0].neighborN == null
//...
//list[1].NeighborE == G
//list[1].NeighborNE == D
//list[1].NeighborN == C
//list[1].NeighborNW == null
...
if (list[i].NeighborE.ClusterNumber > 2)
list[i].ClusterNumber = 2;
Любой совет /руководство будет оценено.