直线检测霍夫变换VS深度学习

news2024/11/14 19:05:02

1. 引言

直线检测有很多应用:例如,创建矢量化图、端点检测等。在这篇文章中,我们不讨论其具体的应用程序,而是重点关于于如何使用传统算法和深度学习的方法来进行直线检测,这里我们将对二者进行相关比较。
闲话少说,我们直接开始吧!

2. 霍夫变换

通过opencv-python进行canny边缘检测和hough变换来进行直线检测是图像处理中最基本的思想。
其中,一个简单的读取图像并获取直线的样例代码如下:

import cv2 
path = 'sudoku-png-6.png'
src = cv.imread(cv.samples.findFile(path), cv.IMREAD_GRAYSCALE)
dst = cv.Canny(src, 50, 200, None, 3)
linesP = cv.HoughLinesP(dst, 1, np.pi / 180, 50, None, 50, 10)

cdstP = np.zeros(src.shape,dtype=np.uint8)
cdstP.fill(255) # or img[:] = 255
cdstP = cv.cvtColor(cdstP, cv.COLOR_GRAY2BGR)

if linesP is not None:
  for i in range(0, len(linesP)):
    l = linesP[i][0]
    cv.line(cdstP, (l[0], l[1]), (l[2], l[3]), (0,0,255), 3, cv.LINE_AA)

cv.imwrite('lines.png', cdstP)

得到结果如下:
在这里插入图片描述

3. 神经网络

当然,直线检测在神经网络领域也有各种各样的实现方式,本文重点推荐两种最为常用的。
● 方案一:Deep Hough Transform for Semantic Line Detection

自然图像中的“语义线”指的是图像中能够勾勒出图像内容结构的直线,例如不同区域的分割线,建筑物的中轴线等等。语义线检测在摄影构图,图像处理等下游任务中有着广泛应用。如下图所示,将图像中的语义线置于照片的黄金分割比位置能拍出视觉效果更好的图片 。

而本文就是利用 神经网络在神经网络特征图上进行相应的霍夫变换,从而兼顾了CNN的特征学习能力和霍夫变换的高效性。

论文地址:点我
GitHub: 点我
在线demo: 点我

在线demo的一些测试效果如下:

在这里插入图片描述

● 方案二: LETR: Line Segment Detection Using Transformers without Edges

在这里插入图片描述

同样我们也有其他方法,如LETR(线段检测),使用wireframe数据集来找到更多可以描述3D对象的分割线

论文地址:点我
GitHub: 点我
在线demo: 点我
在线demo的一些测试效果如下:
在这里插入图片描述

● 二者对比

第一种方法找到图像中所有的语义分界线,因此它可以用来找到更好的透视线;第二种方法是找到元素边界的分割线,这些分割线可以用来在很短的时间内创建一个3D模型,进而得到图像的纹理。

4. 总结

如果我们需要解决简单的任务,比如检测桌子、数独或网球场的线条,在特定的光线条件下,场景不会有太大的变化,那么传统的图像处理的方法就是最好的解决方案,特点为:简单、可控,不需要太多的计算资源。
但是,对于场景更为多变的任务,神经模型的表现可以更好,泛化能力更强。
最后,我上面展示的所有内容都是开源的,所以请使用它并为开源做出更多贡献!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

经典算法之异或运算(无进位相加)

目录异或运算的定义异或运算的性质异或运算的应用交换两数翻转指定位寻找单身狗异或运算的定义 众所周知,计算机中的所有数据都是以二进制(0或者1)的形式存储。而异或运算符(^)就是将参加运算的两个数据,按…

C语言—数据类型

通过sizeof运算符获取数据类型的大小&#xff0c;int占4个字节&#xff0c;表示一个int变量可以存储32位的数据&#xff1b; vs2022中&#xff0c;sizeof运算符返回的结果是一个64位 (8bytes)的无符号整型的值&#xff0c;所以占位符要使用%lld&#xff1b; #include <std…

【空气起动系统控制】使用PID调节起动机入口压力值

前段时间师傅让做一个空起系统的建模&#xff0c;结果给忘了&#xff0c;现在趁着这几天疫情封控期间在家搞一搞&#xff0c;断断续续搞了五天&#xff0c;空起系统控制的相关资料太少了&#xff0c;还好最后弄出来了&#xff0c;虽然最后还存在点小问题&#xff0c;不过大体上…

【Java编程】SSH:Struts、Spring、Hibernate

SSH&#xff1a;Struts、Spring、HibernateSSH 框架指的是 Struts、Spring 和 Hibernate 三者的集成。集成 SSH 框架的系统从职责上分为表示层、业务逻辑层、数据持久层和域模块层。Struts 属于 MVC 框架的一种&#xff0c;提供了对 MVC 系统底层的支持&#xff0c;负责 MVC 的…

汽车ECU通信相关验证项有哪些?

已剪辑自: https://mp.weixin.qq.com/s/-fIAXkS37r6jvnuA7yIQDA 汽车电子的高速发展决定了基础软件所面临的要求将会更加严格&#xff0c;其要求会覆盖软件的安全性、稳定性、可扩展性等方方面面。为了提高软件质量&#xff0c;降低软件应用风险&#xff0c;构建高安全、高可靠…

什么是网站安全?如何查询网站在百度是否安全?

什么是网站安全&#xff1f; 百度词条的定义为网站安全是指出于防止网站受到黑客入侵者对其网站进行挂马&#xff0c;篡改网站源代码&#xff0c;被窃取数据等行为而做出一系列的安全防御工作&#xff0c;在我的理解中&#xff0c;网站安全就是当有人攻击你的网站时&#x…

Java+SSM社团管理系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用的技术实现如下 后台框架&#xff1a;Spring、SpringMVC、MyBatis UI界面&#xff1a;JSP、jQuery 、H-ui 数据库&#xff1a;MySQL 系统功能 本社团管理系统是根据大学社团管理的实际应用而开发的&#xff0c;采用JSP技术&#xff0c;Java编程语言&am…

python调用halcon程序/.hdev文件/直接调用halcon引擎

一、前言 python有两种调用halcon的方法 1、安装halcon的python库&#xff0c;pip install mvtec-halcon20111 然后python代码中主要调用方式为&#xff1a;通过ha来调用halcon中的各种算子&#xff0c;本人不是很喜欢这种方式&#xff0c;后面主要介绍第2种方法。 import …

java计算机毕业设计springboot+vue校园出入管理系统

项目介绍 本论文主要论述了如何使用JAVA语言开发一个校园出入管理系统 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述校园出入管理系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系…

可能你看到的大部分教材里讲的指针和指针变量是一个概念,但是真的是这样吗?看完我这篇文章肯定会颠覆你的认知哦?

指针vs指针变量一、指针和指针变量的含义1、变量的“左值”和“右值”2、什么是指针&#xff1f;3、什么是指针变量&#xff1f;二、如何看待“指针就是指针变量”这种说法三、为什么要存在指针&#xff1f;四、对指针进行解引用操作的本质一、指针和指针变量的含义 1、变量的…

2022云南省职业院校技能大赛(高职组) Web技术(网站设计与开发)赛项规程

2022云南省职业院校技能大赛&#xff08;高职组&#xff09; Web技术&#xff08;网站设计与开发&#xff09;赛项规程 一、赛项名称 赛项名称&#xff1a;Web技术&#xff08;网站设计与开发&#xff09; 赛项组别&#xff1a;高职组 二、竞赛内容 Web技术&#xff08;网站设计…

SA-UNet:用于视网膜血管分割的空间注意力UNet

摘要 在本文中提出了一种名为空间注意力UNet&#xff08;SA-UNet&#xff09;的轻量级网络&#xff0c;它不需要大量的带注释的训练样本&#xff0c;可以以数据增强的方式来更有效的使用可用的带注释的样本。SA-UNet引入一种空间注意模块&#xff0c;这个模块沿着空间维度推断…

[激光原理与应用-61]:激光器 - 种子源 - 1064nm皮秒种子源参数解读

目录 第1章 种子源介绍 1.1 简介 1.2 种子源特点 1.3 皮秒种子源应用 第2章 《瀚盈激光》种子源性能指标解读 2.1 波长&#xff1a;1064nm 》红外 2.2 光谱宽度&#xff08;频率宽度、带宽&#xff09; 2.3 线宽 2.4 脉冲宽度 2.5 重复频率 周期T 2.6 输出功率 2.…

【世界杯黑技术专题】「原理探索专题」一文解读一下“卡塔尔世界杯”的先进技术之半自动越位技术SAOT+比赛用球Al Rihla

2022年卡塔尔世界杯即将谢幕 纵观2022年的卡塔尔世界杯的赛程&#xff0c;还是很多波澜的&#xff0c;很多强队都被草草的淘汰掉&#xff0c;特别是我之前较为看好的德国队、西班牙、葡萄牙等队伍草草的出局。让我的心不禁的一紧&#xff0c;到底花落谁家呢&#xff1f;我后面…

渲染组的使用

渲染组件目录概述需求&#xff1a;设计思路实现思路分析参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive. happy for har…

Python OS库详解(一)——OS库简介与路径操作

今天继续给大家介绍Python相关知识&#xff0c;本文主要内容是Python OS库详解&#xff08;一&#xff09;——OS库简介与路径操作。 一、Python OS库简介 Python os库是Python的标准库&#xff0c;提供通用的Python程序和操作系统交互的功能函数。os库包含几百个Python函数&…

《数据结构、算法与应用C++语言描述》线性表-链表描述

_11 《数据结构、算法与应用C语言描述》线性表-链表描述 11表示第11篇博文&#xff0c;6表示在 数据结构算法与应用C语言描述 书中所在章节。 本文包含了《数据结构、算法与应用C语言描述》第六章主要练习题答案&#xff0c;给出了线性表链表描述完整测试代码。 6.1 线性表数…

【C语言】编译链接 _Linux下操作 _#define详解 [进阶篇 _复习总结]

1.翻译环境和执行环境 1.1翻译环境 翻译环境又可以分为编译和链接&#xff0c;形成的可执行程序test.exe通过执行环境显示运行结果。 把源代码转换为可执行的机器指令(二进制指令)&#xff0c;由编译器完成。 每个源文件经过编译器生成目标文件(windows下命名为xxx.obj&…

【C++初阶】string类各部分的使用介绍

文章目录1.为什么学string类&#xff1f;2. 标准库中的string类string类的介绍string类常用的接口说明a.常见的构造b.string类对象的常用容量操作c.string类对象的访问及遍历操作d.string类对象的修改操作1.为什么学string类&#xff1f; C语言中&#xff0c;字符串是以’\0’…

计算机毕设Python+Vue休闲网络宾馆管理(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…