我有一堆开放的多孔结构的二进制图像,我想得到一个二元掩模,它覆盖了整个结构(结构本身和结构中包含的空洞)。我认为实现我的目标的一个好方法是计算图像的凸包。这在使用skimage.morphology.convex_hull_image的Python中工作得很好(见图)。


但是我需要C++中的这个功能,我想使用DIPlib库。不幸的是,由于文档给我带来了一点困惑,所以我很难找到正确的实现。
发布于 2022-09-23 19:44:49
您可能希望使用函数dip::MakeRegionsConvex2D()。例如:
dip::Image img = dip.ImageRead('yIFuP.jpg');
dip::Image bin = img > 128; // assuming img is scalar
dip::MakeRegionsConvex2D(bin, bin);此函数是为2D图像显式编写的,对3D图像不起作用。
对于3D图像,我将获得所有集合像素的坐标列表(使用dip::Find),并将其传递到快速壳算法实现(如CGAL中的 )中,然后将生成的三维多面体绘制到图像中。最后一步可能是最具挑战性的一步(我不知道CGAL是否有将多面体呈现给图像的功能)。快速而肮脏的解决方案是对所有像素进行迭代,对于每个像素进行输入/输出测试,如果像素位于多面体内,则设置像素。
https://stackoverflow.com/questions/73829448
复制相似问题