2011-10-10 101 views
0

我目前正在研究一個涉及像素級二進制圖像處理(細化,聚類等)的項目。許多使用的算法涉及檢查相鄰像素的屬性。像素對象定義爲:如何鏈接/指向C#中的特定對象?

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; 

任何意見/指導,將不勝感激。

回答

0
Public class pixel 
{ 
    int x, y; 
    int NumberOfNeighbours; 
    int ConnectivityNumber; 
    int ClusterNumber; 

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

這裏需要初始化期間分配的所有鄰居像素。如果當前像素位於邊緣附近,則只需將其指定爲空。但是,當你使用它們時,不要忘記檢查空值。

+0

謝謝。如果我理解正確,這將是鄰居像素的克隆,而不是鏈接/指向像素本身。如果鄰居像素的任何屬性發生更改,我將需要重新分配它,並在刪除鄰居像素後將其分配給空值。如果在neigboring像素上發生事件(例如,ClusterNumber變化),我該如何將它指向它的鄰居像素? – pantz

+0

不,如果您只是簡單地指定一個值,例如'_neighborN = myExistingPixel',您將會引用一個對象。看看鏈表和雙鏈表的實現(你可以輕鬆地谷歌他們) –

+0

我不知道這一點。我認爲它不會反過來,所以'neigborN'的更改不會反映在'myExistingPixel'上。如何更改'neigborN'的屬性,這將反映在'myExistingPixel'上? – pantz

相關問題