4个版本 (2个破坏性版本)
0.3.0 | 2019年11月14日 |
---|---|
0.2.0 | 2019年11月8日 |
0.1.1 | 2019年11月8日 |
0.1.0 | 2019年11月8日 |
#401 in 科学
660KB
331 行
tls_3d_to_2d
将汉克地面激光扫描二进制极坐标格式转换为2D图像以便快速检查的命令行工具。
描述
此工具将投影3D TLS极点格式到2D格式。投影将点云视为围绕传感器的大约球形,并将其投影到圆柱体上,就像墨卡托投影一样。因此,计算x和y的方程式为
其中
- W: 投影图像宽度
- : 角度方位角
- : 角度仰角
从这些方程中,我们可以将坐标x和y投影到一个网格图像中,像素值将对应于该单元格所属所有像素的平均反射率值。
用法
基本
tls_3d_to_2d -z 35 -Z 125 -d 0 -D 40 --output output.png input_file.bin
它将从传感器0到40米的水平距离以及从35到125度的仰角投影云点。如果最小仰角为0度,则会导致cot(0度)的计算,这是无穷大,从而使程序崩溃。
多帧
我们可以用它从多个帧中生成一个视频,通过点云从一个距离走到另一个距离。用法是
tls_3d_to_2d -z 35 -Z 125 --mult-frames 120 --mult-dist-from 0 --mult-dist-to 30 --sigma 1 --mult-range-view 8 --output output.png input_file.bin
它将输出120帧(--mult-frames 120),从0(
--mult_dist_from 0)到30(
--mult_dist_to 30)的距离行走,使用高斯平滑因子sigma为1(
--sigma 1)和8米的可见范围(
--mult-range-view 8)。算法将
- 对于
i
在0到30之间,分成120部分- 设
i
为中距离 - 计算最小距离:
i - (range_view/2)
- 计算最大距离:
i + (range_view/2)
- 将最小和最大距离之间的点投影到2D
- 通过水平距离进行高斯平滑:均值 =
i
,sigma 由--sigma 或 -s 选项
定义 - 创建图像为
OUTPUT_NAME.{n}.png
,其中{n}
将被替换为每个步骤从0到119的数字。
- 设
除了灰度以外的着色
您应该能够使用类似 ImageMagick 的工具将灰度 PNG 输出格式转换为伪彩色。命令行可能如下所示
convert {INPUT_FILE} -normalize ( xc:black xc:red xc:yellow xc:blue +append -filter Cubic -resize 600x1! ) -clut {OUTPUT_FILE}
这将把 {INPUT_FILE} 的灰度转换为黑→红→黄→蓝的刻度。但如果您这样做,请注意实际上不要将高斯应用于灰度图像,而应使用 --split
或 -S
标志将输出图像分为 reflectance
部分和 gaussian_weigths
之间,文件应命名为 {OUTPUT_FILE}.{n}.png(反射数据)和 {OUTPUT_FILE}.{n}.g.png(高斯权重)。然后您可以先像之前解释的那样将伪彩色应用于反射数据,然后使用类似
convert {INPUT_REFLECTANCE_FALSE_COLOR_FILE} {INPUT_GAUSSIAN_WEIGHTS} -compose multiply -layers flatten {OUTPUT_FILE}
创建视频文件
有许多将顺序图像转换为视频文件的方法,我使用了 ffmpeg,以下是其命令行
ffmpeg -start_number 0 -i {INPUT_IMAGE_PATTERN} -c:v libx264 -vf "fps=23,format=yuv420p,pad=width=ceil(iw/2)*2:height=ceil(ih/2)*2" {OUTPUT.mp4}
奇怪的 pad=width=ceil(iw/2)*2:height=ceil(ih/2)*2
将处理奇数高度和宽度,否则可能会失败。{INPUT_IMAGE_PATTERN} 应该类似于 images_%3d.png
,这将匹配前缀为 images_
+ 三个数字 + .png
的文件。
注意
这是一个命令行工具,它可以接受多个文件,并将并行运行。
示例
$ cargo install tls_3d_to_2d
$ tls_3d_to_2d --help
3d-to-2d 0.3.0
USAGE:
tls_3d_to_2d [FLAGS] [OPTIONS] --output <output> [file]...
FLAGS:
-h, --help Prints help information
-p, --progress
-S, --split Save splitted gauss weights and reflectance images (see README)
--version Prints version information
OPTIONS:
-D, --dist-max <dist-max> Maximum distance [default: 20.0]
-d, --dist-min <dist-min> Minimum distance [default: 0.0]
-f, --mult-dist-from <mult-dist-from> From distance (multiple images, see readme) [default: -1.0]
-F, --mult-dist-to <mult-dist-to> To distance (multiple images, see README) [default: -1.0]
-t, --mult-frames <mult-frames> Total frames (multiple images, see README) [default: 120]
-V, --mult-range-view <mult-range-view> Range view (multiple images, see README) [default: 6.0]
-n, --n-threads <n-threads> Number of threads to run multiple files in parallel [default: 0]
-o, --output <output> Output file name
-s, --sigma <sigma> Sigma gaussian smoothing factor from range center [default: 0.0]
-w, --width <width> Azimuth pixel resolution [default: 1800]
-Z, --zen-max <zen-max> Maximum zenith [default: 120.0]
-z, --zen-min <zen-min> Minimum zenith [default: 30.0]
ARGS:
<file>... Input file list space separated
输出示例
依赖项
~8–17MB
~201K SLoC