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;
}
}
我正在使用一个没有任何调整选项的简单图像视图。 我还使用MATLAB来使用'imread'命令打开图像。图像的所有像素的值都是0! – 2015-01-21 13:45:34
当我使用unsigned short PixelType时,out.tiff是一个与test.tiff大小相同的图像,其像素值为uint16,值为零!当我将其更改为无符号字符PixelType时,out.tiff的像素为uint8,值为零! – 2015-01-21 14:00:47
我不知道Matlab在读取图像时如何转换图像。也许你可以添加一个itk :: RescaleImageFilter来确保输出tiff覆盖输出像素类型的全部范围。 – blowekamp 2015-01-21 14:17:33