2015-01-20 93 views
0

我是ITK的新手,我正在嘗試編寫剛剛閱讀的圖像。圖像寫入成功,但是當我試圖打開圖像時,它只是一個黑色圖像。但是,大小與應該的大小完全相同(與輸入圖像大小相同)。我不明白問題所在以及圖像爲什麼是黑色。 這裏是我的代碼:使用ITK書寫圖像

typedef unsigned char PixelType; 
const unsigned int Dimension = 2; 
typedef itk::Image< PixelType, Dimension > ImageType; // ImageType is an image with 2D and unsigned number of pixels 
typedef itk::ImageFileReader<ImageType> ReaderType; 
typedef itk::ImageFileWriter< ImageType> WriterType; 

typedef itk::ImageFileReader<ImageType> FileReaderType; 


using namespace std; 

ReaderType::Pointer LoadImage(string); 
void WriteImage(string,ImageType::Pointer); 


int main() 
{ 
    string fileName = "test.tiff"; 
    string outFileName = "out.tiff"; 
    ReaderType::Pointer reader = LoadImage(fileName); 
    ImageType::Pointer image = reader->GetOutput(); 


    WriteImage(outFileName, image); 
    //cout<<reader<<endl; 
    //cout<<image<<endl; 

    return EXIT_SUCCESS; 
} 


ReaderType::Pointer LoadImage(string filename){ 
    itk::TIFFImageIO::Pointer tiffImageIO = itk::TIFFImageIO::New(); 
    ReaderType::Pointer reader = ReaderType::New(); 
    reader->SetFileName("test.tiff"); 
    reader->SetImageIO(tiffImageIO); 
    try{ 
     reader->Update(); 
    } 
    catch(itk::ExceptionObject & e){ 
     cerr<<e.GetDescription()<<endl; 
    } 
    return reader; 
} 


void WriteImage(string filename, ImageType::Pointer image){ 
    itk::TIFFImageIO::Pointer tiffImageIO = itk::TIFFImageIO::New(); 
    WriterType::Pointer writer = WriterType::New(); 
    writer->SetFileName(filename); 
    writer->SetImageIO(tiffImageIO); 
    writer->SetInput(image); 
    try{ 
     writer->Update(); 
     cout<<"Image has been written!"<<endl; 
    } 
    catch(itk::ExceptionObject & e){ 
     std::cerr << e.GetDescription() << std::endl; 
    } 
} 

回答

2

什麼是你用來觀看圖像的程序?你能調整窗口,水平或對比度嗎?

正如您在判斷您的圖像是黑色的視覺效果,圖像查看器嘗試顯示的動態範圍可能與圖像中的圖像不同。

您正在將圖像讀入「無符號整數」。如果您的圖像最初是在0-255範圍內,並且您使用範圍爲0-4294967296的像素類型將其寫出,但如果您正在試圖顯示該範圍,您將看到一個黑色圖像。

+0

我正在使用一個沒有任何調整選項的簡單圖像視圖。 我還使用MATLAB來使用'imread'命令打開圖像。圖像的所有像素的值都是0! – 2015-01-21 13:45:34

+0

當我使用unsigned short PixelType時,out.tiff是一個與test.tiff大小相同的圖像,其像素值爲uint16,值爲零!當我將其更改爲無符號字符PixelType時,out.tiff的像素爲uint8,值爲零! – 2015-01-21 14:00:47

+0

我不知道Matlab在讀取圖像時如何轉換圖像。也許你可以添加一個itk :: RescaleImageFilter來確保輸出tiff覆蓋輸出像素類型的全部範圍。 – blowekamp 2015-01-21 14:17:33