2014-09-05 114 views
0

我在閱讀並查看dicom文件。我安裝包「oro.dicom」,並能讀取該文件:在R中看不到dicom圖像

library(oro.dicom) 
abdo <- readDICOMFile("image0.dcm") 

extractHeader(abdo$hdr, "Rows") 
[1] 2014 

extractHeader(abdo$hdr, "Columns") 
[1] 2014 

extractHeader(abdo$hdr, "Manufacturer", numeric=FALSE) 
[1] "...IT Radiology" 

不過,我無法看到圖像:

image(t(abdo$img), col=grey(0:64/64), axes=FALSE, xlab="", ylab="") 
Error in t.default(abdo$img) : argument is not a matrix 

結構命令顯示以下內容:

顯示
str(abdo$img) 
int [1:2014, 1:2014, 1:3] 110 51 99 113 52 101 111 53 102 110 ... 

以下工作以及圖形框,但它只是沒有任何的X射線圖像上的空白框:

image(t(abdo$img[[1]]), col=grey(0:64/64), axes=FALSE, xlab="", ylab="") 

爲什麼它不起作用,我該如何糾正它?謝謝你的幫助。

編輯:與CR-MONO1-10-chest.dcm(http://www.barre.nom.fr/medical/samples/files/CR-MONO1-10-chest.gz)我得到以下錯誤甚至在閱讀它:

abdo <- readDICOMFile("CR-MONO1-10-chest.dcm") 
Error in readDICOMFile("CR-MONO1-10-chest.dcm") : DICM != DICM 

隨着rasterImage以下錯誤:

rasterImage(as.raster(matrix(abdo[[1:3]]))) 
Error in rasterImage(as.raster(matrix(abdo[[1:3]]))) : 
    argument "xleft" is missing, with no default 

繼更接近但仍不起作用:

>  rasterImage(abdo$img, 100, 400, 150, 450) 
Error in rgb(t(x[, , 1]), t(x[, , 2]), t(x[, , 3]), maxColorValue = max) : 
    color intensity -30, not in [0,1] 

>  rasterImage(abdo$img, 100, 400, 150, 450, interpolate=F) 
Error in rgb(t(x[, , 1]), t(x[, , 2]), t(x[, , 3]), maxColorValue = max) : 
    color intensity -30, not in [0,1] 
> 
+1

看起來你有一個3D數組,而'image()'需要一個2D數組。這就像他們的第三維分別具有RGB層的數據。你可以用'rgb'在第三維上摺疊。但是,如果你提供了一個[可重現的例子],這將更容易幫助你(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。我的計算機上沒有太多'dcm'文件,我也不確定您使用'readDICOMFile'的哪個庫。 – MrFlick 2014-09-05 13:19:23

+0

@MrFlick是正確的。相反,嘗試使用'rasterImage',它可以愉快地抓取圖像數組的所有三層。 – 2014-09-05 13:20:34

+0

感謝您的關注。在http://www.barre.nom.fr/medical/samples/files/CR-MONO1-10-chest.gz上可以找到一個簡單的小Dicom圖像(胸部X光片)。我也會測試這張圖片,並用這張圖片發佈錯誤。代碼是我上面發佈的所有內容。使用相同的圖像,它將變得像一個可重複的例子。 – rnso 2014-09-05 13:26:21

回答

1

此答案僅適用於t他開源文件CR-MONO1-10-chest.dcm(http://www.barre.nom.fr/medical/samples/files/CR-MONO1-10-chest.gz)。我相信這個文件不是有效的DICOM文件。根據DICOM標準第10部分(可從http://dicom.nema.org獲得)的第7.1節,應該有(a)長度爲128字節的文件前綴和(b)四字節DICOM前綴「DICM」。 CR-MONO1-10-chest.dcm開始在第一對字節中提供信息。

我已經添加了參數skipFirst128 = TRUEreadDICOMFile(),這將在oro.dicom的下一個版本中提供。因此,人們可以通過使用

abdo <- readDICOMFile("CR-MONO1-10-chest.dcm", skipFirst128=FALSE, DICM=FALSE) 
image(t(abdo$img), col=grey(0:64/64), axes=FALSE, xlab="", ylab="") 

請注意,該文件被創建近20年前讀取這個文件,我希望在最近的過去產生的文件將不會有這個問題。感謝您將此錯誤引起我的注意。我一直在尋找破解我的代碼的DICOM文件,以改善它。

+0

感謝您的回答。請參閱此鏈接,瞭解更多信息:http://stackoverflow.com/questions/25819617/what-c​​ould-be-the-reason-for-bad- dicom-image-plot – rnso 2014-09-17 02:07:57

+0

是的,我知道在stackoverflow中有兩個額外的問題,我計劃在接下來的幾天內完成這些問題。 – 2014-09-17 19:21:38