VTK合并mhd文件

40 篇文章 7 订阅
7 篇文章 0 订阅

#include <itkImage.h>
#include <itkImageFileReader.h>
#include <itkImageFileWriter.h>
#include <itkImageRegionIterator.h>
#include <itkMetaDataDictionary.h>
#include <itkMetaDataObject.h>

#include <vtkMetaImageReader.h>
#include <vtkMetaImageWriter.h>
#include <vtkImageAppend.h>
#include <vtkImageChangeInformation.h>
#include <vtkSmartPointer.h>
#include <vtkImageData.h>



bool loadImageData(const char* fileName,
                                vtkSmartPointer<vtkImageData>& imageData) {
  auto imageReader = vtkSmartPointer<vtkMetaImageReader>::New();
  if (!imageReader->CanReadFile(fileName)) {
    imageData = nullptr;
   // LOG_ERROR(   "loadImageData(vtkMetaImageReader) cannot read file: " << fileName);
    return false;
  }
  imageReader->SetFileName(fileName);
  imageReader->Update();
  imageData = imageReader->GetOutput();
  return true;
}

int main(int, char *[]) {
  vtkNew<vtkImageAppend> append;
  append->SetAppendAxis(2);

  // for loop
  std::string path =
      "/mha/";

  //000001.mha 000243.mha
  for (int i=1; i<=243;++i){
    std::string fileName("000000");
    fileName += std::to_string(i);
    fileName = fileName.erase(0, fileName.length() - 6);

    fileName = path + fileName + ".mha";
    std::cout << fileName << "\n";
                                                    
    vtkSmartPointer<vtkImageData> imageData;
    loadImageData(fileName.c_str(), imageData);

    vtkNew<vtkImageChangeInformation> filter;
    //filter->SetInputData((vtkDataObject*)(imageData.Get()));
    filter->SetInputData((vtkDataObject*)&imageData);
    filter->SetOutputExtentStart(0, 0, 0);
    filter->SetOutputOrigin(0, 0, 0);
    filter->Update();
    append->AddInputData((vtkDataObject*)filter->GetOutput());
  }

  append->Update();
  // save

  vtkImageData *imageData = append->GetOutput();
  auto imageWriter = vtkSmartPointer<vtkMetaImageWriter>::New();
  imageWriter->SetFileName("merged.mhd");
  imageWriter->SetInputData((vtkDataObject*)imageData);
  imageWriter->SetCompression(true);
  try {
    imageWriter->Write();
  } catch (std::exception& e) {
    //LOG_ERROR("writeImageData(vtkMetaImageWriter) cannot write file: "           << fileName << ", " << e.what());
    return -1;
  }


}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值