2013-05-06 51 views
1

我正在研究iOS上的醫療應用程序。 iOS設備只支持GL_UNSIGNED_BYTE和GL_LUMINANCE,或者通常只支持每個組件8位。現在我有一些灰度圖像是16位無符號整數,我想顯示它們。我發現我們不能顯示16位無符號整數,所以我應該將它們轉換爲8位無符號整數。但在醫療方面,我不應該丟失數據或應該有最小的數據丟失。如何在設備上合法顯示DICOM 16位無符號整數是否支持8位無符號整數?

現在,我的問題是:如何通過醫療中的合法轉換將16位無符號整數轉換爲8位無符號整數?現在我用最簡單的方法來做到這一點。把它分成256:-O。其他一些商業軟件正在這樣做,他們正在使用。

預先感謝您。

+0

你可以在大多數iOS設備上使用float和half-float輸入紋理:http://stackoverflow.com/a/5704567/19679 – 2013-05-06 14:51:45

+0

我測試過float。但它在我的iPad上運行。2.你測試成功了嗎? – 2013-05-06 16:32:20

+0

嗨!我知道我正在復活一個非常古老的話題,但是有沒有辦法用BitDepth 16分享這個圖像?我正在開發一個成像應用程序,並需要這樣的圖像來測試水平。謝謝! – Corvin 2016-10-22 18:11:08

回答

3

必須轉換這些值,以顯示它們應用窗口級別

灰度Dicom圖像通常包含兩個數據元素(Dicom字段),其中包含值WC(窗口中心,數據元素:0028,1050)和WL(窗口級別,數據元素:0028,1051)。這些值定義了顯示圖像中包含的信息所必需的線性方程。

你可以找到關於Window Level here這個概念的更詳細的描述。

+1

此外,您不能總是期望DICOM元素爲窗口和級別提供適當的值。應該認爲有必要爲用戶提供調整參數的機制。 – denver 2013-05-07 04:12:31

+0

我同意,但對我來說,問題是開發人員不知道窗口級別的概念,並試圖做一個直接的16位灰度轉換爲RGB(或8位灰度)轉換,而不考慮可能存在的窗口調平值 – jap1968 2013-05-07 05:40:49

+0

有一件事正在讓我受苦:我在我的iPad上安裝了MIM,並且您可以更改級別/窗口。但是關卡可以在255.之後改變。現在我的iPad 2只支持GL_UNSIGNED_BYTE的時候有可能嗎?例如,你可以改變它(水平)爲2000?我認爲改變的窗口可以是任何東西,但水平不應該超出iPad支持的版本。 – 2013-05-07 16:22:26

1

我試圖通過將每個像素除以一個值(矩陣中的最大值或最亮/ 256),然後每個像素變成8位值。當我應用https://www.dabsoft.ch/dicom/3/C.11.2.1.2/中提到的僞方程時,它給出了相同的結果。

const void *bytes = [data bytes]; 
NSMutableData* ary = [[NSMutableData alloc] init]; 
int maxValue = 4087/256; //its a dummy value, use your max value in image instead of 4087 
for (NSUInteger i = 0; i < [data length]; i += sizeof(int16_t)) { 
    UInt16 elem = OSReadLittleInt16(bytes, i); 

    UInt8 temp = round(elem/maxValue); 

    [ary appendBytes:&temp length:sizeof(UInt8)]; 

}

用 '元',使你的形象。

+0

你只是應用了一個特殊情況的「自動」窗口調平:在你的情況下,WW = Bmax和WC = Bmax/2,(*)Bmax =最大亮度。您可以改進此方法,對最小值進行類似的操作,因此您將得到:WW = Bmax - Bmin和WC =(Bmax + Bmin)/ 2 – jap1968 2013-09-19 05:42:59