该代码实现 IPOL 论文 (以下简称 "IPOL 论文") 中描述的算法:

C. Dalitz, T. Schramke, M. Jeltsch: 'Iterative Hough Transform for Line Detection in 3D Point Clouds.' IPOL, 2017

源文件

  • hough3dlines.cpp:主程序,实现 IPOL 论文中算法 1(迭代 Hough 变换)。
  • hough.[h|cpp]:实现 IPOL 论文中算法 2(Hough 变换)的类。
  • sphere.[h|cpp]:实现 IPOL 论文第 2.2 节中描述的方向离散化的类。
  • vector3d.[h|cpp]:用于处理 3D 点的类,包含常见的数学运算。
  • pointcloud.[h|cpp]:用于表示一组 3D 点的类。

安装

源代码是用 C++ 编写的,因此需要一个 C++ 编译器。此外,它还需要外部库 libeigen 3.x,可从 http://eigen.tuxfamily.org/ 获取。

使用提供的 Makefile 进行编译时,可能需要针对您的环境进行以下三处调整:

  • CC 设置为您的 C++ 编译器。
  • LIBEIGEN 设置为您的 libeigen 头文件的路径。
  • 定义 WEBDEMO 用于在线演示版本。

最后一个选项仅针对 IPOL 在线演示,不建议用于生产环境,因为它会在 Hough 空间过大或输入点云超过 10^6 个点时停止程序。

要编译程序,只需键入 make。要在测试数据上进行测试,请键入 make test

使用方法

hough3dlines 在没有选项或使用未知选项(例如 -?)时,将打印以下使用信息:

Usage:
    hough3dlines [options] <infile>
Options (defaults in brackets):
    -o <outfile>   write results to <outfile> [stdout]
    -dx <dx>       step width in x'y'-plane [0]
                   when <dx>=0, it is set to 1/64 of total width
    -nlines <nl>   maximum number of lines returned [0]
                   when <nl>=0, all lines are returned
    -minvotes <nv> only lines with at least <nv> points are returned [0]
    -gnuplot       print result as a gnuplot command
    -raw           print plot data in easily machine-parsable format
    -v             be verbose and print Hough space size to stdout
    -vv            be even more verbose and print Hough lines (before LSQ)

输入

输入格式在 IPOL 论文的第 5 节中描述。输入文件必须包含点坐标,每行一个点,用逗号分隔。以井号 (#) 开头的行将被忽略。例如:

# point cloud data from a wondrous experiment
41.7201,138.2140,-648.0000
0.0001,-138.2140,-440.0000
2.4543,-136.8650,-436.8000

输出

除非使用 -o 选项将其重定向到文件,否则输出将打印到 stdout。标准输出格式在 IPOL 论文的第 5 节中描述。它将检测到的线逐行列出,包括点数和参数 a 和 b,例如:

npoints=58, a=(2.5682,-123.8986,0.3456), b=(0.0000,0.7071,0.7071)
npoints=32, a=(-2.4576,34.8665,0.0000), b=(0.7071,0.0000,0.7071)
npoints=3, a=(7.0056,-12.7867,8.5634), b=(0.5773,0.5773,0.5773)

还有两种可选的输出格式,可以用于可视化结果:

  1. -gnuplot 选项可以用于通过将程序输出管道传送到 gnuplot 来立即可视化结果,例如:

    hough3dlines testdata.dat -dx 0.4 -gnuplot | gnuplot -persist
    
  2. -raw 选项以易于机器解析的格式打印绘图数据,作为空格分隔的值,可用于自动构建绘图命令。这些数字具有以下含义:

    minX maxX minY maxY minZ maxZ
    paramMin paramMax
    aX aY aZ bX bY bZ npoints
    

    其中第一行指定点云边界框,第二行指定线参数化 a + t*bt 值的范围,后面的行列出每个线的线参数。

作者与版权

Christoph Dalitz, Tilman Schramke, Manuel Jeltsch, 2017 Institute for Pattern Recognition Niederrehin University of Applied Sciences Krefeld, Germany

许可证

该代码使用 BSD 样式许可证发布。有关详细信息,请参见文件 LICENSE-BSD2

3D 线检测的迭代 Hough 变换 - IPOL 算法实现

原文地址: https://www.cveoy.top/t/topic/mhpx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录