LSD源代码编译运行

LSD算法简介

LSD快速直线检测算法是由Rafael Grompone、Jeremie Jackbowicz、Jean-Michel Morel于2010年发表在PAMI上的文献《LSD:a Line Segment Dectctor》中提出的,该算法时间复杂度较霍夫变换低。LSD算法通过对图像局部分析,得出直线的像素点集,再通过假设参数进行验证求解,将像素点集合与误差控制集合合并,进而自适应控制误检的数量 。由于LSD算法是对图像的局部分析,所以对于特别模糊的目标,或小目标,LSD是具有较大优势的。

1.源代码下载地址http://www.ipol.im/pub/art/2012/gjmr-lsd/

2.源代码压缩包的组成:

Files 简介
README.txt 说明书
COPYING GNU AFFERO GENERAL PUBLIC LICENSE Version 3
Makefile Compilation instructions for ‘make’.“make”的编译说明文件
lsd.c LSD module ANSI C code, peer reviewed file. LSD模块ANSI C代码,同行评审文件(即LSD算法的源文件)
lsd.h LSD module ANSI C header, peer reviewed file.LSD模块是ANSI C头文件,是一个经过同行评审的文件。(LSD算法的头文件)
lsd_cmd.c command line interface for LSD, ANSI C code. LSD的命令行接口,ANSI C代码。
lsd_call_example.c Minimal example of calling LSD from a C language program.LSD的最小示例(自定义一张左半边是黑色,右半边是灰色的图片,并提取中间的一条直线)
chairs.pgm Test image in PGM format.PGM格式的测试图像
chairs.lsd.txt Expected result for ‘chairs.pgm’ image as an ASCII file.'chairs.pgm’图像的预期结果的ASCII文件
chairs.lsd.eps Expected result for ‘chairs.pgm’ image as an EPS file.'chairs.pgm’图像的预期结果的EPS文件
doc Html code documentation.
doxygen.config doxygen configuration file for documentation generation.

3.编译
LSD算法采用标准C语言程序编写,可以被其他C语言程序调用,也可以用作独立命令。发行版中包含一个Makefile文件,Makefile文件中包含编译源程序“lsd.c”,头文件“lsd.h”,和“lsd_call_example.c“程序的指令。要构建这几个程序,必须在系统上安装C语言编译器(用“cc”调用),以及“make”工具。LSD只使用标准C库,因此它应该在任何ANSI C语言环境中编译。应当注意的是,它应该在类Unix系统中编译。
首先,在源代码和生成文件所在的目录打开终端,输入编译指令make,进行编译。为了验证编译的正确性,您可以将LSD应用于测试的椅子图像。并将结果与提供的结果进行比较。这里提供一个示例,这个示例清晰地演示了如何使用LSD作为一个模板来编译程序,编译命令行为:cc -o lsd_call_example lsd_call_example.c lsd.c -lm,得到lsd_call_example的可执行程序,运行该示例程序:./lsd_call_example
在这里插入图片描述
得到示例程序的输出,自定义一张左半边是黑色,右半边是灰色的图片,并提取中间的一条直线。
最简单的LSD命令行是./lsd,这将打印LSD版本和命令行接口,包括可用选项。
在这里插入图片描述
LSD处理的唯一输入图像格式是PGM,输出有ASCII和二进制两种版本。输入命令行:./lsd chairs.pgm chairs.result.txt,即运行lsd程序,输入图像为chairs.pgm ,输入结果保存到一个ASCII文件“chairs.result.txt”中。文件中每一行对应于检测到的线段。每行由七个由空格分隔的数字组成,即
x1, y1, x2, y2, width, p, -log_nfa.
例如: 159.232890 134.369601 160.325338 105.613616 2.735466 0.125000 17.212465
表示检测到从点(159.232890134.369601)开始、结束于点(160.325338 105.613616)且宽度为2.735466的线段。角度精度p为0.125,这意味着梯度角度公差为p180=0.125180=22.5度。检测的NFA值是以10为底的对数值,即-log_10(NFA)=17.212465,因此NFA值为10^(-17.2124656),大致为6e-18。长度单位为像素,坐标原点为左上像素(0,0)的中心。
为了更容易地可视化结果,LSD命令还可以以EPS或SVG文件格式提供输出。命令行为./lsd -P chairs.result.eps chairs.pgm chairs.result.txt,表示运行lsd程序,输入图像为chairs.pgm ,输入结果保存到一个ASCII文件result.txt中,还保存到一个EPS文件“chairs.result.EPS”中。
要查看完整选项,请执行不带参数的LSD命令,如“./lsd”
注意:可选参数应该总是出现在所需参数的输入和输出之前。例如,下面的行是错误的:./lsd chairs.pgm -s 0.5 chairs.result.txt -> WRONG!!。正确写法应是./lsd -s 0.5 chairs.pgm chairs.result.txt,从而修改了LSD算法的默认参数值,将高斯滤波器的图像尺度值s由默认的0.8修改为0.5。

猜你喜欢

转载自blog.csdn.net/xiao_qs/article/details/126607313
今日推荐