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