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。

LSD源代码编译运行相关推荐

  1. IDEA 上 Tigase8.0 源代码编译运行

    一些小伙伴们经常问Tigase8 check下来的源代码怎么跑起来,因为我不能及时一 一回答,所以还是写个博文来演示一下吧,一般针对新手而言,老手的话,就跳过吧! 一.一般第一步是进入tigase的官 ...

  2. blender源代码编译运行

    其实在blender官网上已经给出了编译步骤https://wiki.blender.org/wiki/Building_Blender/Windows,由于在源码编译的过程中还遇到了很多问题,特此记 ...

  3. java游戏刀剑_Game_rc 刀剑无双服务端后端源代码,完美编译运行,javawanmeiyunxing Engine 游戏引擎 267万源代码下载- www.pudn.com...

    文件名称: Game_rc下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 8214 KB 上传时间: 2016-12-01 下载次数: 0 提 供 者: 王文文 ...

  4. 【CLR的执行模型:将源代码编译成托管模块】

    CLR:由多种不同编程语言使用的运行库 托管模块:中间语言和元数据 非托管语言:C/C++,不过此为特殊,可以写成托管代码 托管语言:C# 托管模块 1,PE32/PE32+头:PE32运行在win3 ...

  5. java 源码分析_Java 源代码编译成 Class 文件的过程分析

    原标题:Java 源代码编译成 Class 文件的过程分析 在上篇文章< Java三种编译方式:前端编译 JIT编译 AOT编译 >中了解到了它们各有什么优点和缺点,以及前端编译+JIT编 ...

  6. Java 11 快要来了,编译 运行一个命令搞定!

    Java 11 马上要来了,原定于 9 月发布,还有不到 3 个月了,敬请期待更多新功能被加入到 11 当中,本文本讲的是 JEP 330 这个新特性. 化繁为简,一个命令编译运行源代码 看下面的代码 ...

  7. linux ubuntu pkg-config工具的使用(源代码编译库接口查询工具)

    后更... 文章目录 1. pkg-config介绍 2. pkg-config的使用 1. pkg-config介绍 pkg-config是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件 ...

  8. vc60如何输入c语言,vc60中如何编译运行及调试c语言程序.pdf

    VC++6.0中如何编译运行调试 C语言程序 1. 启动VC++6.0 (如下图) 2. 单个源文件的编译运行 例如下面的源代码 #include void main() { int i,sum=0; ...

  9. 【AWSL】之Linux源代码编译及配置yum源(tar 解包、./configure配置软件模块、make)

    源代码编译 序言 一.源代码概述 1.使用源代码安装软件的优点 2.应用场合举例 3.安装源代码软件为什么使用编译安装 二.编译安装的基本思路 三.配置本地yum源仓库 四.`yum常用命令` 五.` ...

  10. [GO语言基础] 二.编译运行、语法规范、注释转义及API标准库知识普及

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了什么是GO语言 ...

最新文章

  1. MySQL 中 6 个常见的日志问题
  2. GetHashCode() 的研究
  3. 学习知识[置顶] C++学习方式方法
  4. flutter 版本控制fvm
  5. 蚂蚁集团网络通信框架 SOFABolt 功能介绍及协议框架解析 | 开源
  6. Python将序列分解为单独的变量
  7. 电脑技巧:键盘失灵怎么办?
  8. Symantec改变了产品下载方式
  9. 软件安全测试报告模板_软件测试工程师经典面试题
  10. 浅析Serverless
  11. MongoDB未授权访问漏洞记录(端口:27017,37017)
  12. 威纶通触摸屏与2台台达温控器modbus rtu 通讯程序
  13. C语言_printf
  14. 弗洛伊德的乌龟与兔子
  15. 基于java报刊图书征订管理系统
  16. ChatGPT插件与简要介绍(已收集70个)了解添加插件后的chatgpt能做什么
  17. three good things
  18. 商业银行业务培训总结
  19. 想要制作令人震撼的大屏可视化,要如何提升自己的可视化效果?
  20. (附源码)app校园购物网站 毕业设计 041037

热门文章

  1. 关于cookie的详细讲解
  2. 【Day4.3】大皇宫内蹭讲解
  3. 苹果怎么用微信链接服务器,苹果手机如何设置微信登陆锁
  4. python植树问题代码_小学数学最难的13种典型题,让孩子吃透了,拿高分不难!...
  5. chapter02作业
  6. Bluetooth 5 新功能概述
  7. 行人属性识别 PETA数据集
  8. 数据分析实战(三):美国1800~2010年婴儿名字
  9. 根据两点的经纬度求方位角和距离
  10. Flask Marshmallow基本使用