Как мне связать / указать на конкретные объекты в C #? - PullRequest
0 голосов
/ 10 октября 2011

В настоящее время я работаю над проектом, включающим манипуляции с бинарными изображениями на уровне пикселей (прореживание, кластеризация и т. Д.).Многие из используемых алгоритмов включают проверку атрибутов соседних пикселей.Пиксельный объект, определенный как:

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;

Любой совет /руководство будет оценено.

1 Ответ

0 голосов
/ 10 октября 2011
Public class pixel
{
    int x, y;
    int NumberOfNeighbours;
    int ConnectivityNumber;
    int ClusterNumber;

    //neighbors:
    Pixel _neighborN;
    Pixel _neighborNE;
    ...
    Pixel _neighborNW;
}

Здесь вам нужно назначить все соседние пиксели во время инициализации. Если текущие пиксели находятся около края, вы просто присваиваете ему значение null. Но не забывайте проверять нулевые значения при работе с ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...