CV第一篇:EDLines基础理论

2023-11-13

EDLines: A real-time line segment detector with a false detection control

简介

图像信息特征的描述大致分为角点特征、线特征和语义特征。点特征如harris、sfit、surf、orb等点特征,线特征主要包括如hough、houghP、Etemadi、LSD等等。

论文提出了一种超快的直线检测器EDLines,在保证实时性的同时抑制了误检量,并对比了以上特征在提取质量和速度上的差异,得出该检测器在保证较高准确性的同时,其速度比现有直线检测器的快至少一个数量级。
在这里插入图片描述

  • 论文地址:

百度网盘 论文 提取码:a3eu

百度网盘 代码 提取码:8q5e

论文解读

EDLines的基本结构分为以下三部分:

  1. 输入灰度图,利用Edge Drawing算法进行提取,输出一系列连续的像素点
  2. 利用最小二乘法来连接像素点,避免连到外点
  3. 用Desolneux等提出的Helmholtz Principle来抑制误检的线段

1、Edge Drawing检测算法

ED检测算法大致分为以下4个步骤:

步骤 操作 作用/示例
1 滤波核遍历图像 高斯滤波,抑制噪声
2 计算像素梯度 Prewitt,Sobel等算子
3 选出梯度较大者为“锚” “锚”(anchors)极可能为线段
4 连接锚点 生成初始线段

演示如下图所示

在这里插入图片描述

2、线段提取

拟合好的线段事实上并不符合要求,因为初始线段连接了所有锚点,如上图(d)所示,线段是由每个相连的锚点拼接而成,并不光滑。

因此需要筛选掉没有价值的中间点,使线段更为平滑。这里使用的是最小二乘法

最小二乘法( the Least Squares Line Fitting )

其基本思路可以参考以下连接,来自Matlab 帮助文档
在这里插入图片描述

3、线段筛选

经过简单生成和提取的线段可能并不能选取合适的线段数量,如Hough直线检测由于缺乏筛选验证的部分因此可能导致过拟合或者欠拟合(实际上是中间参数选取不合理导致)

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

因此,需要中间参数进行合理估计和选择,才能得到适当数量和位置的拟合线段。

这里就需要用到前面提到的Helmholtz Principle来选取合适的线段

// 伪代码

LineFit(Pixel ⁄pixelChain, int noPixels){
double lineFitError = INFINITY; // current line fit error
LineEquation lineEquation; // y = ax + b OR x = ay + b
while (noPixels > MIN_LINE_LENGTH){
LeastSquaresLineFit(pixelChain, MIN_LINE_LENGTH, &lineEquation,
&lineFitError);
if (lineFitError <= 1.0) break; // OK. An initial line segment detected
pixelChain ++; // Skip the first pixel & try with the remaining pixels
noPixels–; // One less pixel
} // end-while
if (lineFitError > 1.0) return; // no initial line segment. Done.
// An initial line segment detected. Try to extend this line segment
int lineLen = MIN_LINE_LENGTH;
while (lineLen < noPixels){
double d = ComputePointDistance2Line(lineEquation,
pixelChain[lineLen]);
if (d > 1.0) break;
lineLen++;
} //end-while
// End of the current line segment. Compute the final line equation & output it.
LeastSquaresLineFit(pixelChain, lineLen, &lineEquation);
Output ‘‘lineEquation’’
// Extract line segments from the remaining pixels
LineFit(pixelChain + lineLen, noPixels-lineLen);
} //end-LineFit

//下一次讨论代码

此部分思想源于Desolneux提出的方法,主要思路是引入一个*NFA(Number of False Alarms,误检数量)*的概念

首先提出梯度值和梯度角的概念

3.1、计算像素的梯度

每个点的梯度值*m(x,y)*和梯度角 θ ( x , y ) \theta(x,y) θ(x,y)

一般的梯度和梯度角度公式:

m ( x , y ) = [ L ( x + 1 , y ) − L ( x − 1 , y ) ] 2 + L ( x , y + 1 ) − L ( x , y − 1 ) ] 2 m(x,y) = \sqrt{[L(x+1,y)-L(x-1,y)]^2+L(x,y+1)-L(x,y-1)]^2} m(x,y)=[L(x+1,y)L(x1,y)]2+L(x,y+1)L(x,y1)]2

θ ( x , y ) = a r c t a n L ( x , y + 1 ) − L ( x , y − 1 ) L ( x + 1 , y ) − L ( x − 1 , y ) \theta(x,y) = arctan{\frac{L(x,y+1)-L(x,y-1)}{L(x+1,y)-L(x-1,y)}} θ(x,y)=arctanL(x+1,y)L(x1,y)L(x,y+1)L(x,y1)

论文的梯度和梯度角度公式:

g x ( x , y ) = L ( x + 1 , y ) − L ( x , y ) + L ( x + 1 , y + 1 ) − L ( x , y + 1 ) 2 g_x(x,y) = \frac{L(x+1,y)-L(x,y)+L(x+1,y+1)-L(x,y+1)}{2} gx(x,y)=2L(x+1,y)L(x,y)+L(x+1,y+1)L(x,y+1)
g y ( x , y ) = L ( x , y + 1 ) − L ( x , y ) + L ( x + 1 , y + 1 ) − L ( x + 1 , y ) 2 g_y(x,y) = \frac{L(x,y+1)-L(x,y)+L(x+1,y+1)-L(x+1,y)}{2} gy(x,y)=2L(x,y+1)L(x,y)+L(x+1,y+1)L(x+1,y)
g ( x , y ) = [ g x ( x , y ) ] 2 + [ g y ( x , y ) ] 2 g(x,y) = \sqrt{[g_x(x,y)]^2+[g_y(x,y)]^2} g(x,y)=[gx(x,y)]2+[gy(x,y)]2

θ ( x , y ) = a r c t a n g x ( x , y ) − g y ( x , y ) \theta(x,y) = arctan{\frac{g_x(x,y)}{-g_y(x,y)}} θ(x,y)=arctangy(x,y)gx(x,y)
每个特征点可以得到三个信息*(x,y,m, θ \theta θ),*即位置,尺度和方向。

梯度值为非负数,而角度范围为360°

在这里插入图片描述

箭头的大小和方向为梯度大小*m(x,y)*和梯度角 θ ( x , y ) \theta(x,y) θ(x,y)

3.2 、NFA(误检线段数量)

定义一张尺寸为NxN个像素的图像,A为一段线段,其中n 为 A 的线段长度,像素值;k为 A 上与A方向一致的点的数目
N F A ( n , k ) = N 4 ⋅ ∑ i = k n ( n i ) p i ( 1 − p ) n − i NFA(n,k) = N^4 ·\sum_{i=k}^n \binom{n}{i} p^i (1-p)^ {n-i} NFA(n,k)=N4i=kn(in)pi(1p)ni

其中 N 4 \N^4 N4NxN图像潜在线段的数量,因为图像有NxN个像素点,而两个点确定一个线段,共 N 2 N^2 N2个点,因此共有 N 4 N^4 N4条可能的线段

NFA代表一张图像的误检线段数量

论文设定NFA有意义的条件是NFA(n,k)<= ε \varepsilon ε,实际上一般取1,即一张图像允许一个误检线段

具体验证过程:

对于长度为n的线段,计算沿线段的每个像素的梯度角和与线段方向一致的像素点数量k,

然后计算NFA的值

若NFA<= 1,则线段有效;否则丢弃

事实上验证筛选是可选的,因为短线段会被筛选掉,而长线段会被保留

4、参数选取(对ED和NFA参数值的讨论)

线段的筛选实际上是基于线段长度和方向一致像素点的数量的。

  • NFA中的p的选取

论文首先定义了方向一致这个概念:

梯度角度计算时的范围为360°,但判定方向时不需要如此细致的划分,就像SFIT特征,其直方图将360°划分为8份再进行方向统计,

类似的,此处也是一样的思路,将360°划分为8等份,即22.5°,方向一致定义为线段方向与像素梯度方向处于22.5°之内

因此公式1选取的p值为1/8 = 0.125

  • Edge Drawing算法中的 ρ \rho ρ的选取

ρ \rho ρ是一个阈值常数,大于 ρ \rho ρ的梯度值才被计入统计,否则去掉,作用是在ED算法中筛选出是否认定为锚点的像素点。

锚点中两像素点的最大数值误差为2(一正一负),角度误差为22.5°。即数值误差小于2,方向误差小于22.5°才作为锚点,因此:
ρ = 2 s i n ( 22.5 ° ) = 5.22 \rho = \frac{2}{sin(22.5°)} = 5.22 ρ=sin(22.5°)2=5.22
遍历图像,小于 ρ \rho ρ值得到的点称为边缘区域

  • Edge Drawing算法中的anchor threshold的选取

实际上就是NMS(non-maximal suspression,非最大抑制)。传统的NMS的依据是判断一个像素点的梯度是否大于周边像素的梯度值

而论文改进的NMS是判断一个像素点的梯度是否比周边像素的梯度值大anchor threshold个值

在这里插入图片描述

论文对anchor threshold的选择采用实验的方法,得到anchor threshold = 3较为理想

  • Edge Drawing算法中的scan interval的选取

扫描间隔,即NFA公式中k的值,代表每隔多少圈扫描一次像素值。默认为1,保证像素全部扫描到。

重新把NFA公式列一下
N F A ( n , k ) = N 4 ⋅ ∑ i = k n ( n i ) p i ( 1 − p ) n − i NFA(n,k) = N^4 ·\sum_{i=k}^n \binom{n}{i} p^i (1-p)^ {n-i} NFA(n,k)=N4i=kn(in)pi(1p)ni
且有NFA(n,k)<= ε \varepsilon ε,实际上一般 ε \varepsilon ε取1

  • 线段拟合中的Minimum line length的选取

    对于过短的线段(即首末像素的距离长度小于一定值),可以直接过滤掉

    之前提到NFA(n,k)<= 1来保证像素和线段的方向一致。要使得最小线长有效,必有k = n,得到 N F A ( n , n ) = N 4 ⋅ P 4 ≤ 1 NFA(n,n) = N^4·P^4 \leq 1 NFA(n,n)=N4P41

    移项可得 n ≤ − 4 l o g ( N ) l o g ( p ) n \leq \frac{-4log(N)}{log(p)} nlog(p)4log(N),其中p = 0.125。对于一个512x512的图像,最小线段长应为12像素

  • 线段拟合中的maximum mean square line fit error的选取

最大平方根误差用于线段拟合,当误差大于一定值,线段截止,重新计算生成新的线段,基于实验将其设定为1个像素误差

5、实验

在这里插入图片描述

EDLines在保证与LSD质量相近的同时,其速度为LSD的十倍左右

在这里插入图片描述

同时非常好的保留了图像的信息,比Hough等好很多

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CV第一篇:EDLines基础理论 的相关文章

随机推荐

  • jvm内存模型与垃圾回收(下)

    上篇地址 jvm内存模型与垃圾回收 上 1 垃圾回收相关算法 标记清除 标记整理 复制 这三个看上面的文章 1 1 分代收集算法 将不同生命周期的对象采用不同的收集方式 以便提高回收效率 一般是将Java堆分为新生代和老年代 这样可以根据各
  • 接口与实现

    public interface Computable 接口体包含常量和抽象方法 没有普通方法 int MAX 46 常量 int f int x 抽象方法 默认权限friendly public class China implement
  • 【C++】使用Windows操作系统的API在控制台输出绿色的文本

    2023年8月21日 周一下午 include
  • linux桌面远程控制,在LINUX下远程控制WIN桌面

    rdesktop 是个在veket下访问视窗系统 远程桌面的客户端程式 当前 rdesktop 所支持的 视窗系统 系列版本包括 NT 2000 XP 和2003 通过使用 rdesktop 所实现的远程桌面协议 RDP 你能在veket系
  • 企业微信群机器人开发

    准备工作 已经注册了有效的企业微信账号 并且在客户端上已经登录 现有或者新建有效的包含多名企业微信成员的群聊 创建群聊机器人 右键群聊 gt 管理聊天信息 gt 添加群机器人 使用群机器人 在终端某个群组添加机器人之后 创建者可以在机器人详
  • 【单片机笔记】STM32+ESP8266通过AT指令WIFI连接阿里云MQTT服务器

    上一篇使用USB转串口的方式通过ESP8266wifi模块的方式成功连接上了阿里云 现在就要通过单片机来替换电脑上位机了 这样单片机自动的去调用并发送串口数据更加方便 也更加符合一个产品的开发 板载的传感器有NTC温度 光强 这两个主要用来
  • 音频采样率、采样深度、占用字节数浅析

    1 从一个问题来看 16K采样率 16bit采样深度 20ms的数据共占用多少字节 想要解这个问题 首先就要明白采样率是什么 它的单位是什么 采样率 就是指音频在每秒的采样次数 采样多少个点 单位是赫兹 hz 在这里 尤其不要与比特率 bp
  • wxc-icon使用

  • Vue3中的computed函数详解

    计算属性是Vue中常用的一种方式 主要用于在模板中放置逻辑计算 方便开发者进行数据操作和展示 在Vue3中 计算属性依然是非常重要的一种功能 而computed函数则更加的方便计算属性的使用 本文将对Vue3中的computed函数进行详细
  • 修改约束(注意是否存在字段名的情况)

    添加字段名时添加约束 语法 alter table 表名 add 字段名 数据类型 约束名 注意 这个方法会让表中让所有address都变成 中国 表达有点不清晰 自己去试试此方法和其他方法就知道了 例如 alter table emp a
  • 汇编语言笔记-ARM架构基本寄存器

    文章目录 寄存器组 1 R0 R12 2 R13 3 R14 4 R15 特殊寄存器 程序状态寄存器 xPSR 中断 异常屏蔽寄存器 CONTROL寄存器 浮点寄存器 1 S0 S31和D0 D15 浮点状态和控制寄存器 FPSCR 浮点单
  • 玩转ChatGPT:Excel操作初探

    一 写在前面 首先还是让小Chat推销下自己 Excel 表格制作是个技术活 你掌握了吗 没关系 现在有了 ChatGPT 让 Excel 辅助操作变得更简单 再也不用苦恼于数据分析和整理了 让 ChatGPT 成为你的数据处理助手 让 E
  • FISCO BCOS 区块链应用(五)结合WeBase开发区块链目录管理系统

    目录 前提条件及说明 1 1 搭建Fisco Bcos区块链底层平台 1 2 搭建java项目并引入 web3sdk 1 3 搭建WeBase区块链管理平台 应用开发 1合约设计 2代码实现 3合约编译 4 java SDK集成 应用端对接
  • linux系统 <linux/fs.h>头文件查找

    起因 因为在做模块实验时要对register chrdev函数绘画流程图 于是我就想着去找找看到底这个函数在哪 首先根据这个笔记来看 Linux内核API register chrdev 极客笔记 deepinout com 应该在linu
  • CJson-修改浮点数的位数

    现状 调用cJSON Print 将组成的json转为字符串格式时 对于浮点数的位数是不固定的 length sprintf char number buffer 1 15g d 源代码里用的是 1 15g 代表输出字符最少一位 最大15位
  • 【技术方案】springboot全局异常处理方式

    springboot全局异常处理方式 springboot全局异常有两种处理方式 第一种方案 继承DefaultErrorAttributes类 重写getErrorAttributes方法 代码如下 Slf4j RestControlle
  • SyntaxError: missing ) after argument list

    消息 语法错误 参数列表后面缺少 错误类型 SyntaxError 什么地方出错了 有一个函数在调用时出现错误 这可能是一个错误 丢失运算符或者转义字符等 示例 因为没有使用 操作符来连接字符串 JavaScript 认为 log 函数的参
  • Java 解析http返回的xml数据

    Java 解析http返回的xml数据 写成txt文件 需求 每小时抓取给定api接口返回的xml数据 把xml数据保存为XML文件 把xml数据转换txt文件格式数据 保存txt文件 文件名以yyyyMMddHH0000 txt和yyyy
  • FileZilla_Server快速搭建FTP服务器

    文档目的 介绍如何使用FileZilla Server软件在windows server服务器上搭建FTP服务器 注意 如果需要这个具及这个工具的视频操作教程 请点击 此处 下载 文档目的 介绍如何使用FileZilla Server软件在
  • CV第一篇:EDLines基础理论

    EDLines A real time line segment detector with a false detection control 简介 图像信息特征的描述大致分为角点特征 线特征和语义特征 点特征如harris sfit s