VTK图像重采样

VTK图像的重采样

vtk图像重采样用到了类:
1.vtkImageShrink3D Class Reference 用于实现图像降采样(变模糊)。需设置每个方向的采样率,采样率越大,图像越模糊。
2.vtkImageMagnify Class Reference 用于实现图像升采样(变清晰)。

以上两种类采样率 int 型,有些不方便。

3.vtkImageResample Class Reference 既可以升采样也可以降采样,
例子:?

//第一个参数表示左边轴 x y z 
//第二个参数表示重采样后dim值变成原来(dim-1)x5+1,space值相应变化,使得dim x space 和原始图像一样。
//第二个参数是double类型!!!
	imageResample->SetAxisMagnificationFactor(0, 0.5);// 变模糊,dim值减少一半且space值增加一倍
	imageResample->SetAxisMagnificationFactor(1, 1);// 保持原样不变
	imageResample->SetAxisMagnificationFactor(2, 5);// 变清晰,

下面?这个连接是分别三个类的使用例子:

vtk中进行图像重采样

代码示例:? (注意中间有些 ->updata()很重要 )

	vtkSmartPointer<vtkMetaImageReader> testreader = vtkSmartPointer<vtkMetaImageReader>::New();
	testreader->SetFileName("..\\ALLFOLDER\\Environment.mhd");
	testreader->Update();
	qDebug() << "read done" << endl;
	
	int dim[3];
	testreader->GetOutput()->GetDimensions(dim);
	double origin[3];
	testreader->GetOutput()->GetOrigin(origin);
	double spaceing[3];
	testreader->GetOutput()->GetSpacing(spaceing);

	vtkSmartPointer<vtkImageResample> imageResample = vtkSmartPointer<vtkImageResample>::New();
	imageResample->SetInputConnection(testreader->GetOutputPort());
	imageResample->Update();  //  *****!!!!!!!!!!*********不手动更新读不进去,后面没有Mapper更新管线

	int dim2[3];
	imageResample->GetOutput()->GetDimensions(dim2);
	double origin2[3];
	imageResample->GetOutput()->GetOrigin(origin2);
	double spaceing2[3];
	imageResample->GetOutput()->GetSpacing(spaceing2);

	//imageResample->SetOutputDimensionality(3);
	imageResample->SetAxisMagnificationFactor(0, spaceing[0]);
	imageResample->SetAxisMagnificationFactor(1, spaceing[1]);
	imageResample->SetAxisMagnificationFactor(2, spaceing[2]);
	//imageResample->SetInterpolationModeToLinear();
	imageResample->SetInterpolationModeToCubic();//重采样的方式
	imageResample->Update();
	//imageResample->SetOutputSpacing(spaceing2);
	int dim3[3];
	imageResample->GetOutput()->GetDimensions(dim3);
	double origin3[3];
	imageResample->GetOutput()->GetOrigin(origin3);
	double spaceing3[3];
	imageResample->GetOutput()->GetSpacing(spaceing3);
	qDebug() << "change done" << endl;

	if (imageResample->GetOutput())
	{
		QDir *temp = new QDir;
		bool exist = temp->exists("..\\AllFOLDER");
		if (exist)
		{
		}
		else
		{
			temp->mkdir("..\\AllFOLDER");
		}
		vtkSmartPointer<vtkMetaImageWriter> envImageWriter = vtkSmartPointer<vtkMetaImageWriter>::New();
		envImageWriter->SetInputData(imageResample->GetOutput());
		envImageWriter->SetFileName("..\\ALLFOLDER\\Environmentchange3.mhd");
		envImageWriter->Write();
	}
	else
	{
		QMessageBox::information(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("!!!"), QMessageBox::Ok);
	}
	return;

分别为

  • 原始图像
  • 第二参数 0.5 0.5 0.5 图像
  • 第二参数 0.976562 0.976562 5 图像(这种情况可以使得新图像像素间隔为1像素大小)
    在这里插入图片描述
    原始图像
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
发布了14 篇原创文章 · 获赞 2 · 访问量 682

猜你喜欢

转载自blog.csdn.net/weixin_42040046/article/details/96505606