2008-11-24 16 views
1

癌症CT圖片存儲在無符號短陣列(1維)內。圖像處理:智能解決方案,用於轉換上層(128x128像素)座標

我有圖片中癌症區域的位置信息,但座標(x,y)是超像素(128x128無符號短)。我的任務是突出這個地區。

我已經通過將超像素座標轉換爲可用於無符號短數組的偏移量來解決此問題。它工作正常,但我想知道是否有更聰明的方法來解決這個問題,因爲我的解決方案需要3個嵌套for循環。

是否可以訪問ushort數組「superpixelwise」,所以我可以在超像素中瀏覽ushort數組。

我知道這是行不通的。爲了讓你知道我在想:

typedef struct 
{ 
    unsigned short[128x128] 
} 
spix; 

spix *spixptr; 

unsigned short * bufptr = img->getBuf(); 

spixptr = bufptr; 

更新1:

沒錯它的模糊,讓我用圖片再試一次:

[0][1][2] ... [127]| ... [x] | 
[1]    |   | 
[2]    |   | 
.     |   | 
.     | <-- this is a superpixel 
.     |   | 
[127]    |   | 
--------------------   | 
.       | 
.       | 
.       | 
[y]       |<--whole picture stored in a ushort* buf = new ushort[x*y] 
------------------------------ 

我喜歡訪問128x128 ushorts立即用一個指針,這樣我就可以將memcpy數據放到128x128的字段中。

更新2:

的象素數據傳輸提示幫了不少忙。

+0

在標籤中指定語言(C++我猜)可能會幫助你...... – PhiLho 2008-11-24 13:58:06

回答

0

從我瞭解你:

  • 一個大的圖像是CT掃描
  • 是形象,是一個癌症

然後,它有點難度內的矩形區域瞭解。我相信你想要創建某種類,以便可以有效地訪問128x128塊圖像,就好像它們是單個像素一樣。

因此,如果圖像是1024x1024像素,您希望能夠以128x128像素塊的8x8網格的形式訪問它。現在,如果是這種情況,您需要創建一個代表這些128x128塊之一的類。這個類應該引用圖像,以便不復製圖像數據,並且應該包含您想要對該「超像素」執行的所有操作。

但是,如果您要做的就是能夠從較大的圖像中提取出特定的128x128塊,那麼您需要的是bit blit算法。bit block transfer(通常稱爲blit)將允許您將較大圖像中選定的數據位複製到較小的一個。該算法還可以適應幾乎任何你想要的大圖像中的特定區域。

如果你需要blit,那麼每個相對較新的圖形API都應該有blit函數。

1

這很難回答,因爲它很模糊。

如果你只意味着「我怎麼訪問給定這個定義圖像(X,Y)的像素」,答案應該不是很奇怪:

typedef struct 
{ 
    unsigned short data[128 * 128]; // This was broken in the question. 
} spix; 


void spix_set_pixel(spix *s, unsigned int x, unsigned int y, unsigned short value) 
{ 
    s->data[y * 128 + x] = value; 
} 

不知道在所有如果這回答你的問題,但這聽起來......至少是合理的。