使用 ITK 写入映像

Writing image using ITK

本文关键字:映像 ITK 使用      更新时间:2023-10-16

我是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;
  } 
}

您使用什么程序来查看图像?您可以调整窗口,级别或对比度吗?

当您判断图像在视觉上是黑色的时,可能是图像查看器尝试显示的动态范围与图像中的动态范围不同。

您正在将图像读入"无符号整数"。如果您的图像最初在 0-255 范围内,并且您使用范围为 0-4294967296 的像素类型将其写出,如果您的查看器尝试显示该范围,您将看到黑色图像。