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);// 变清晰,
下面?这个连接是分别三个类的使用例子:
代码示例:? (注意中间有些 ->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像素大小)
原始图像