我正在尝试使用ITK库与C++计算3D图像的形状特征。所以我遵循ITK文档中给出的example。该示例采用2D图像,并提取不同的形状特征。在我的程序中,我只想为给定的3D图像获取形状属性并将其存储在array <double>
中。ITK-图像处理,计算3D图像的形状特征
这是我到目前为止有:
//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
类型。我得到这个错误:智能感知:从常量ITK没有合适的转换功能:: ImageRegion < 3U>以“双重”存在
是否有任何人用ITK做到这一点?如果有其他方法可以实现这一点,有谁能指出我的解决方案吗?
任何帮助将大大apreciated
你能编辑你的文章以包含你得到的确切错误信息吗?我也很困惑,你试图存储的'双重'值是什么。你可以在你的代码中指出它们吗? – eigenchris
这是错误消息:**智能感知:从“const itk :: ImageRegion <3U>”到“double”存在没有合适的转换函数** –