2013-06-21 134 views
1

我有一個dicom圖像這是我在matlab讀作:保存爲PNG格式的DICOM圖像

I=dicomread('xyz.dcm'); 

在顯示它,我用下面的命令:

imshow(I,[]) 

我想什麼問一下是,我怎樣才能通過imwrite來寫它,這樣我就能看到使用上面的imshow命令看到的圖像?

我比如嘗試這樣做:

imwrite(I,'xyz.png','png'); 

,但得到圖像。

有關於此的任何想法?

謝謝。

+0

「BMP」文件的外觀如何? – macduff

回答

0

當你閱讀的圖像,得到的顏色表以及

[I, map]=dicomread('xyz.dcm'); 

現在,當你保存它,給imwrite顏色表也。

imwrite(I,map,'xyz.png','png'); 

並且順便說一下,最後的png通常不是必需的。 MATLAB會看到.png擴展名並知道將其保存爲png。

+0

感謝您的回覆。當我嘗試你的解決方案時,我得到了以下錯誤(dcm文件名是'000000.dcm':'錯誤使用imwrite> parse_inputs(529行) 顏色映射表應該有三列 imwrite錯誤(第419行) [數據,地圖,文件名,格式,paramPairs] = parse_inputs(varargin {:});' – Simplicity

+0

如果你看看地圖變量是什麼,你看到了什麼?數據的大小和類型 如果var 。是空的,這意味着你有一個灰度或真彩色圖像。一般來說,當我得到奇怪的東西,80%的時候,你可以通過乘以255來得到它的正確格式,如果值在0和1之間,或者除以255以得到0和1之間的值,也嘗試將數據轉換爲double類型,或者鍵入uint8,我有一種感覺,其中一種組合會適合你。查看imwrite的文檔,MATLAB的圖像數據格式是一種學習的痛苦 – Shaun314

1

似乎dicom圖像有16位深度,比通常的8位大。
要驗證這確實是這樣的類型

>> class(I) 

我期望輸出爲uint16
如果是這樣,請嘗試:

imwrite(I, 'xyz.png', 'bitdepth', 16); 
0

嘿,我有同樣的問題,它似乎是一種解決方案是非常簡單的。 只需檢查您是否傳遞一個字符串作爲目標文件的文件名。

我正在傳遞fullfile函數的輸出(這個函數輸出一個單元格)。它會發生什麼,即imwrite函數將輸入(vargins)放在一起並查找具有char類型的第一個變量。它使用此索引來查找指定數據類型的參數,從而定義顏色映射。如果你的文件路徑是一個單元格,它將得到錯誤的索引並輸出奇怪的錯誤。

我希望這有助於