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
可是感觉思路没错啊 好难过 下面是源代码 各位帮忙了 小弟不胜感激
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;
}