ITK 从 itk::LabelObject 获取像素列表
ITK get pixels list from itk::LabelObject
我在访问 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);
}
}
此信息是从文章 Label object representation and manipulation with ITK 中的 Insight Journal 获得的。在那里,它说您可以直接使用 Region 属性 获取边界框。我没找到itk::LabelObject获取区域的方法,这里是itk::LabelObject
的继承图:
如果您的标签对象是itk::ShapeLabelObject
类型,您可以使用GetBoundingBox() 方法获取边界框。它还有其他许多值得一看的方法。
然后我尝试转换 itk::LabelMap (...) 但没有更多结果(我得到一张黑色图像)。
这里提个忠告,不要用这个复杂的东西去验证其他复杂的东西。您可能在链中的其他地方失败了。相反,像我之前说的那样读取像素并检查数据。好看!
我在访问 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);
}
}
此信息是从文章 Label object representation and manipulation with ITK 中的 Insight Journal 获得的。在那里,它说您可以直接使用 Region 属性 获取边界框。我没找到itk::LabelObject获取区域的方法,这里是itk::LabelObject
的继承图:
如果您的标签对象是itk::ShapeLabelObject
类型,您可以使用GetBoundingBox() 方法获取边界框。它还有其他许多值得一看的方法。
然后我尝试转换 itk::LabelMap (...) 但没有更多结果(我得到一张黑色图像)。
这里提个忠告,不要用这个复杂的东西去验证其他复杂的东西。您可能在链中的其他地方失败了。相反,像我之前说的那样读取像素并检查数据。好看!