2015-07-21 70 views
0

我正在使用DCMTK讀取並希望修改DICOM圖像。我有以下代碼:DicomImage的writeBMP函數產生不清晰的灰色圖像

#include <iostream> 
#include <opencv\cv.h> 
#include <dcmtk\dcmimgle\dcmimage.h> 

int main() { 
    try { 
     DicomImage* dicomImage = new DicomImage("C:/Users/Kriselle/Documents/000004.dcm"); 
     if ((dicomImage != NULL) && (dicomImage->isMonochrome())) { 
      dicomImage->writeBMP("C:/Users/Kriselle/Documents/z.bmp", 8); 
      std::cout << "z.bmp is created" << std::endl; 
     } 
     else { 
      std::cout << "dicomImage is null or not monochrome" << std::endl; 
     } 
    } 
    catch (cv::Exception e) { 
     std::cerr << e.what() << std::endl; 
    } 
    return 0; 
} 

我所做的只是創造一個DicomImage和像素數據寫入與我指定,但圖像與原始圖像的輪廓只返回一個灰度圖像文件名BMP文件勉強認可。

這是它應該是什麼樣子:https://www.dropbox.com/s/6dw8nlae8hfvqf6/000004.jpg?dl=0 這是什麼代碼產生:https://www.dropbox.com/s/fff2kch124bzjqy/z.bmp?dl=0

我缺少的東西代碼還是我不明白的功能是什麼?任何人都可以請賜教嗎?非常感謝你!

回答

1

正如您可以在DicomImage類的API文檔中閱讀的那樣,缺省情況下在渲染單色DICOM圖像時不啓用VOI轉換。在你的情況下,這似乎是不合適的,所以你應該指定一個更合適的VOI設置(例如min-max window)或使用VOI windows stored in the DICOM dataset之一(如果有的話)。

順便說一句,在構造函數中加載圖像之後,還應該使用getStatus()方法檢查此過程的狀態。

+0

哇!非常感謝你!這就是訣竅!我將不得不閱讀VOI轉換以瞭解它的工作原理。 – noobalert