2015-01-20 66 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