LabelGeometryImageFilter 提取质心 劳烦各位了
vtk吧
全部回复
仅看楼主
level 8
臭臭爸YY 楼主
作业马上就要交了 捣鼓了四天了了 可是就是不知道为什么提取的质心坐标不对 并且提取的数目也不对
可是感觉思路没错啊 好难过 下面是源代码 各位帮忙了 小弟不胜感激
int main(int, char *[])
{
vtkSmartPointer<vtkDICOMImageReader> reader = vtkSmartPointer<vtkDICOMImageReader>::New();
reader->SetFileName("C:\\Users\\zgb\\Desktop\\1-130.dcm");
/*************设置窗宽窗位************/
vtkSmartPointer<vtkImageMapToWindowLevelColors> imageViewer = vtkSmartPointer<vtkImageMapToWindowLevelColors>::New();
imageViewer->SetInputConnection(reader->GetOutputPort());
imageViewer->SetWindow(2894);
imageViewer->SetLevel(-81);
imageViewer->Update();
/*************** 阈值处理**************/
vtkSmartPointer<vtkImageThreshold> thresholdFilter = vtkSmartPointer<vtkImageThreshold>::New();
thresholdFilter->SetInputConnection(imageViewer->GetOutputPort());
thresholdFilter->ThresholdByUpper(200);
thresholdFilter->SetInValue(255);
thresholdFilter->SetOutValue(0);
thresholdFilter->Update();
vtkSmartPointer<vtkImageLuminance> luminanceFilter = vtkSmartPointer<vtkImageLuminance>::New();
luminanceFilter->SetInputConnection(thresholdFilter->GetOutputPort());
luminanceFilter->Update();
typedef itk::Image<unsigned char, 2> ImageTypetrans;
typedef itk::VTKImageToImageFilter<ImageTypetrans> VTKImageToImageType;
/************* vtk类型转换为itk类型 ************/
VTKImageToImageType::Pointer vtkImageToImageFilter = VTKImageToImageType::New();
vtkImageToImageFilter->SetInput(luminanceFilter->GetOutput());
vtkImageToImageFilter->Update();
typedef itk::Image<unsigned char, 2> ImageType;
ImageType::Pointer image = ImageType::New();
typedef itk::BinaryImageToLabelMapFilter<ImageType>
BinaryImageToLabelMapFilterType; //在一幅二值图像中标记连接组件,并产生一个标记组件的集合
BinaryImageToLabelMapFilterType::Pointer binaryImageToLabelMapFilter = BinaryImageToLabelMapFilterType::New();//实例化
binaryImageToLabelMapFilter->SetInput(vtkImageToImageFilter->GetOutput()); //输入图片
binaryImageToLabelMapFilter->Update(); //执行标记连接
typedef itk::LabelMapToLabelImageFilter<BinaryImageToLabelMapFilterType::OutputImageType, ImageType>
LabelMapToLabelImageFilterType; //将这些标记转化为标记的图像
LabelMapToLabelImageFilterType::Pointer labelMapToLabelImageFilter = LabelMapToLabelImageFilterType::New();//实例化
labelMapToLabelImageFilter->SetInput(binaryImageToLabelMapFilter->GetOutput());//输出作输入
labelMapToLabelImageFilter->Update(); //开始执行
typedef itk::LabelGeometryImageFilter< ImageType > LabelGeometryImageFilterType;
LabelGeometryImageFilterType::Pointer labelGeometryImageFilter = LabelGeometryImageFilterType::New();//实例化
labelGeometryImageFilter->SetInput( labelMapToLabelImageFilter->GetOutput() );//输入标记的图像
labelGeometryImageFilter->Update(); //开始执行
LabelGeometryImageFilterType::LabelsType allLabels =labelGeometryImageFilter->GetLabels(); //获取标记
LabelGeometryImageFilterType::LabelsType::iterator allLabelsIt;//定义迭代器
for( allLabelsIt=allLabels.begin();allLabelsIt!= allLabels.end(); allLabelsIt++ )
{
LabelGeometryImageFilterType::LabelPixelType labelValue = *allLabelsIt;//定义标记个数
std::cout << "\tCentroid: "
<< labelGeometryImageFilter->GetCentroid(labelValue) << std::endl;
std::cout << "Number of labels: "
<< labelGeometryImageFilter->GetNumberOfLabels() << std::endl;
}
return EXIT_SUCCESS;
}
2016年05月14日 13点05分 1
level 8
臭臭爸YY 楼主
能帮忙看看哪里应该改一下嘛 迫切求指导 有要求也答应 拜托
2016年05月14日 13点05分 2
是不是没考虑到Spacing? itk默认的spacing是1.如果你图像的Spacing不是1结果可能就不对。
2018年05月30日 09点05分
level 12
难道我会告诉你 itk vtk 坐标系不一致??[哈哈]
2016年05月17日 04点05分 3
可是吧神 我用前一段vtk的程序 把处理好的二值图像以png格式写出来 再用后面那一段itk的程序来提取质心 还是不行 [泪]我太笨了
2016年05月17日 04点05分
@臭臭爸YY 你转成PNG要设置spcing啊
2018年06月10日 13点06分
吧神, 它俩的坐标系到底有啥区别呢?
2019年10月17日 07点10分
1