gpt4 book ai didi

c++ - ITK-图像处理,计算3D图像的形状特征

转载 作者:太空狗 更新时间:2023-10-29 21:41:10 26 4
gpt4 key购买 nike

我正在尝试使用 ITK 库和 C++ 计算 3D 图像的形状特征。所以我跟着example在 ITK 文档中给出。该示例采用 2D 图像,并提取不同的形状特征。在我的程序中,我只想让给定的 3D 图像获取形状属性并将它们存储在 array <double> 中。 .

这是我目前所拥有的:

//principal declarations
const unsigned int Dimension = 3;
typedef unsigned char PixelType;
typedef unsigned short LabelType;
typedef itk::Image<PixelType, Dimension> InputImageType;
typedef itk::Image< LabelType, Dimension > OutputImageType;
typedef itk::ShapeLabelObject< LabelType, Dimension > ShapeLabelObjectType;
typedef itk::LabelMap< ShapeLabelObjectType > LabelMapType;
typedef itk::ImageFileReader<InputImageType> ReaderType;
typedef itk::ConnectedComponentImageFilter <InputImageType, OutputImageType > ConnectedComponentImageFilterType;
typedef itk::LabelImageToShapeLabelMapFilter< OutputImageType, LabelMapType> I2LType;

typedef itk::Array< double > MeasurementVectorType;

MeasurementVectorType formes(9);
InputImageType::Pointer image;

//read the 3Dimage
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName(file);
reader->Update();
image = reader->GetOutput();

ConnectedComponentImageFilterType::Pointer connected = ConnectedComponentImageFilterType::New ();
connected->SetInput(image);
connected->Update();

// create the shape label map filter
I2LType::Pointer i2l = I2LType::New();
i2l->SetInput( connected->GetOutput() );
i2l->SetComputePerimeter(true);
i2l->Update();

LabelMapType *labelMap = i2l->GetOutput();

//calculate shape attributes for the first label
ShapeLabelObjectType *labelObject = labelMap->GetNthLabelObject(0);
//stock the attributes in the array
formes[0]=labelObject->GetBoundingBox();
formes[1]=labelObject->GetNumberOfPixels();
formes[2]=labelObject->GetPhysicalSize();
formes[3]=labelObject->GetElongation();
formes[4]=labelObject->GetPerimeter();
formes[5]=labelObject->GetRoundness();
formes[6]=labelObject->GetEquivalentSphericalRadius();
formes[7]=labelObject->GetEquivalentSphericalPerimeter();
formes[8]=labelObject->GetFlatness();

我能够读取 3D 图像并计算其形状属性。但是我有这个问题:我不能把它们存入 array <double>因为labelObject方法返回 const类型。我收到此错误:IntelliSense:不存在从 const itk::ImageRegion<3U> 到“double”的合适转换函数

有人用 ITK 来做这个吗?如果有任何其他方法可以实现这一点,请问有人能指出解决方案吗?

任何帮助将不胜感激

最佳答案

问题不在于 const 类型——您可以从 const 中赋值,只是不允许赋值他们。

问题是 GetBoundingBox() 返回 itk::ImageRegion对象,这是一个更复杂的对象,包含IndexSize对象作为成员。没有简单的方法可以将其转换为 ITK 理解的 double,因此尝试将其转换为 double 没有意义。

你应该通过ShapeLabelObject类文档并查看哪些方法返回可以转换为 double 的类型。

例如,GetNumberOfPixels() 方法返回一个 SizeValueType,它只是 unsigned longtypedef >,所以这可以转换为 doubleGetElongation()GetRoundness() 方法都有返回类型 const double,所以它们也可以。

关于c++ - ITK-图像处理,计算3D图像的形状特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29657074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com