gpt4 book ai didi

c++ - ITK 从 itk::LabelObject 获取像素列表

转载 作者:搜寻专家 更新时间:2023-10-31 02:19:53 25 4
gpt4 key购买 nike

我在访问 itk::LabelObject 的像素列表时遇到问题。此 LabelObject 是通过 itk::OrientedBoundingBoxLabelObject ( https://github.com/blowekamp/itkOBBLabelMap ) 获得的。原始 3D 图像是 CBCT Dicom,我在其中寻找一个小矩形标记的位置和方向。

这是获取 itk::LabelObject 的代码:

typedef short LabelPixelType;
typedef itk::LabelMap<LabelObjectType> LabelMapType;
typedef itk::OrientedBoundingBoxLabelMapFilter<LabelMapType> OBBLabelMapFilter;

typename OBBLabelMapFilter::Pointer toOBBLabelMap = OBBLabelMapFilter::New();
typename ToLabelMapFilterType::Pointer toLabelMap = ToLabelMapFilterType::New();

toOBBLabelMap->SetInput(toLabelMap->GetOutput());
toOBBLabelMap->Update();

LabelObjectType* labelObject = toOBBLabelMap->GetOutput()->GetNthLabelObject(idx);
OBBSize = labelObject->GetOrientedBoundingBoxSize();

我想访问像素坐标是可能的,因为必须以某种方式访问​​它才能计算边界框,但到目前为止我没能做到。然后我尝试将 itk::LabelMap(或直接将 LabelObject)转换为二进制图像,这样我可以更轻松地获取像素;并使用 VTK 转换并显示此 markerBinaryImage,但没有更多结果(我得到一个黑色图像)。

typedef itk::LabelMapToBinaryImageFilter<LabelMapType, ImageType> LabelMapToBinaryImageFilterType;
LabelMapToBinaryImageFilterType::Pointer labelImageConverter = LabelMapToBinaryImageFilterType::New();
labelImageConverter->SetInput(toLabelMap->GetOutput());
labelImageConverter->Update();
ImageType::Pointer markerBinaryImage = labelImageConverter->GetOutput();

有没有人知道如何访问这个像素列表?

最佳答案

你可以这样做:

for(unsigned int i = 0; i < filter->GetOutput()->GetNumberOfLabelObjects(); ++i) {
//Obtain the ith label object
FilterType::OutputImageType::LabelObjectType* labelObject =
filter->GetOutput()->GetNthLabelObject(i);

//Then, you may obtain the pixels of each label object like this:
for(unsigned int pixelId = 0; pixelId < labelObject->Size(); pixelId++) {
std::cout << labelObject->GetIndex(pixelId);
}
}

此信息是从 Insight Journal 的文章 Label object representation and manipulation with ITK 中获得的.在那里,它说您可以直接使用 Region 属性 获取边界框。我在itk::LabelObject中没有找到获取区域的方法,不过下面是itk::LabelObject的继承图:

Inheritance diagram of LabelObject

如果您的标签对象是 itk::ShapeLabelObject 类型,您可以使用 GetBoundingBox() 方法获取边界框。它还有其他许多值得研究的方法。

然后我尝试转换 itk::LabelMap (...) 但没有更多结果(我得到一个黑色图像)。

这里有个忠告,不要用这个复杂的东西来验证其他复杂的东西。您可能在链中的其他地方失败了。相反,像我之前说的那样读取像素并检查数据。好看!

关于c++ - ITK 从 itk::LabelObject 获取像素列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33354569/

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