我正在嘗試使用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」存在沒有合適的轉換函數** –