使用 OpenCV 从 X 射线图像进行 3D 重建所需的信息



任何人都知道一个很好的起点,使用OpenCV从X射线图像/2D图像进行3D重建。我试图使用 nodejs 和 OpenCV 的 js 版本来做这个项目。我基本上尝试从2D X射线图像重建骨骼结构(有多个视图可用)。开源代码(在python/c/c++中)/算法/指南/任何东西都是值得赞赏的。

谢谢

简而言之,要获得良好的3D重建图像,您需要了解有关两个相机的一些信息(镜头失真,距离,校准等)

网上有很多信息,这里有一些很好的起点

  1. http://docs.opencv.org/master/dd/d53/tutorial_py_depthmap.html#gsc.tab=0这是创建视差图的示例。OpenCV有3个立体声匹配算法 - 块匹配(立体BM),图形切割(立体GC),和半全局块匹配 (stereoSGBM) - 更深入解释,请尝试 http://scholar.google.com。
  2. 生成视差图后,可以在3D 空间。但是,正如我所说,您需要来自照相机。此问题中的代码示例可能会有所帮助从 2 张图像进行 3D 重建,没有关于相机的信息

  3. 从 openCV 示例文件夹中查找示例https://github.com/Itseez/opencv/blob/master/samples/cpp/stereo_match.cpp

    和文档
    http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

旁注:

我正在使用EmguCV,这是一个用于C#的openCV包装器,来创建人脸的3D重建。您可能会发现此示例很有用,但是,您需要在 openCV 中找到相应的方法(它们通常具有相同的名称)http://www.emgu.com/wiki/index.php/Stereo_Imaging

希望对您有所帮助!

通常您有以下内容:

  • N 个图像图层,每个图像尺寸 = 宽度 * 高度
  • 从颜色值到某个"厚度值"的解释

一般思路是:使用浮点或字节值创建尺寸为 N * 宽度 * 高度的 3D 地图。然后只需将图像图层添加到该地图中,即可获得类似于巨大 3D 纹理的东西。现在,您可以定义您感兴趣的组织厚度,例如骨骼。然后在 3D 地图中搜索值从"小于骨骼厚度"到"大于或等于骨骼厚度"(或仅存储了确切厚度值的单元格)的每个单元格,并将这些单元格标记为"骨骼"。然后你有一些骨骼的体素网格:)

更好的方法是使用类似marching cubes的东西并在厚度变化之间进行插值。

也许,如果你在谷歌上搜索"行进立方体"和"X射线",你会发现一些更详细的信息(和大学讲义),关于解决这种方法的不同方法。例如:http://www.eecs.berkeley.edu/~jrs/meshpapers/LorensenCline.pdf,从这些论文中,您可能会找到更多要搜索的标签。

最新更新