- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在访问 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
的继承图:
如果您的标签对象是 itk::ShapeLabelObject
类型,您可以使用 GetBoundingBox() 方法获取边界框。它还有其他许多值得研究的方法。
然后我尝试转换 itk::LabelMap (...) 但没有更多结果(我得到一个黑色图像)。
这里有个忠告,不要用这个复杂的东西来验证其他复杂的东西。您可能在链中的其他地方失败了。相反,像我之前说的那样读取像素并检查数据。好看!
关于c++ - ITK 从 itk::LabelObject 获取像素列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33354569/
我在访问 itk::LabelObject 的像素列表时遇到问题。此 LabelObject 是通过 itk::OrientedBoundingBoxLabelObject ( https://git
我是一名优秀的程序员,十分优秀!