基元检测-霍夫直线变换原理

news2024/9/24 22:30:09

在之前已经使用过正规方程法、梯度下降法拟合直线

1、回顾过去

梯度下降法拟合一元函数

最小二乘法的线性代数推导

现在使用一种新的直线检测方法,霍夫变换,它也可以拟合直线,接下里将说明他的原理。

2、霍夫变换

霍夫变换(Hough Transform)是一种在图像处理和计算机视觉中广泛使用的技术,主要用于检测图像中的几何形状,如直线、圆等。该技术由Paul Hough于1962年首次提出,其基本思想是将图像空间中的点变换到参数空间中,通过寻找参数空间中的峰值来检测图像中的特定形状。

霍夫变换一般是用来检测图像中的直线的,而图像是由一个个像素点组成的,这个过程相当于拟合一条直线了。

2.1直线拟合任务介绍

假设我们有这样一个分布的数据:

我们想用一条直线拟合数据,它的表达式为Y=kX+B

关于最小二乘和梯度下降还不知道的可以去看以往的文章,这里就直接介绍霍夫变换了。

2.2霍夫变换参数平面

原来不是Y=kX+B吗,霍夫变换将其形式改变,转换为B=Xk+Y

思想:将数据的X作为斜率,Y作为截距,如果有N个点,在k,B这个坐标系下就会有N条直线,这些直线会有交点,选择经过直线最多的交点,比如上图中标记的交点,经过的直线最多,有4条。

将这个交点(k,B)选出,形成新的Y=kX+B

因为在原来的B=Xk+Y中大部分点都过这条直线,所以转换过来后也满足绝大多数点都经过Y=kX+B。

2.3 极坐标下的霍夫变换

2.3.1使用直角坐标系存在的问题

看下图的情况:

如上图所示,如果出现直线的斜率接近于无穷,就接近于一条竖线,图左中过原点的B=0,K就是接近无穷,图右则B和k都解靖宇无穷了。在参数平面里面,这个无穷就是个很大的数,计算机基本上无法表示,如果是一条标准的直线,那么参数K就是不存在,更谈不上什么参数平面了。

2.3.2解决方法-极坐标系表示

比如这种接近竖直线的利用极坐标系(r,θ)是可以表示的,r是原点到直线的垂直距离,θ指这原点到垂点连接形成的直线与x轴形成的夹角。

对于那些斜率不存在的:

θ=0直接就可以表示了

对于水平直线,θ=π/2即可表示。

2.3.3 极坐标系下的参数平面

将y=kx+b,转换为xcosθ+ysinθ=r的极坐标表示方式

将没个点的x,y带入,N个点就有个N条曲线,为什么是曲线呢?

假如点(1,1)点,带入极坐标表达式,r=cosθ+sinθ,表达式有cos和sin,肯定是条曲线了。

不妨多带几个例子进去,(1,3),(100,1)等,它们带进去后都会生成一条关于f(r,θ)的曲线

这个时候,我们和极坐标系下一样,将曲线中的交点进行排序,经过直线最多的那个点r,θ即为我们所需要的。原理和直角坐标系一样。

注:后期时间充裕的话可能要加上MATLAB仿真。

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

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

相关文章

工地安全巡检系统

在建筑施工行业,安全始终是高悬的“达摩克利斯之剑”。随着科技的日新月异,工地安全二维码巡检系统崭露头角,成为守护工地安全的强大利器。 通过凡尔码平台,工地安全巡检系统融合了先进信息技术与安全管理理念的创新成果。其功能丰…

免费的录屏软件有哪些?试试这4款巨好用的录屏软件

4个免费简单实用的录屏软件推荐,帮你解决录屏问题。 1、转转大师录屏软件 下载链接>>screencap.55.la 这是一款非会员录屏也不限制时长的免费录屏软件,操作简单,第一次用就会,必须五星推荐给你! 支持多种录制模…

数据结构——排序(1):插入排序

目录 一、排序的概念 二、排列的运用 三、常见的排序算法 四、插入排序 1.直接插入排序 (1)思路 (2)过程图示 (3)代码实现 (4)代码解释 (5)特性 2.希尔排序 (1…

【Java算法专场】位运算(上)

目录 常见位运算总结 位1的个数 算法思路 算法代码 比特位计数 算法思路 算法代码 汉明距离 算法思路 算法代码 只出现一次的数字 算法思路 算法代码 丢失的数字 算法思路 算法代码 常见位运算总结 了解位运算的一些基本操作,那么我们就来通过题目来…

STM32的USB接口介绍

STM32 USB接口是STM32微控制器系列中集成的一种通信接口,它允许STM32微控制器与外部设备或计算机进行高速的数据传输和通信。以下是STM32 USB接口的简要介绍: 1. 接口类型 STM32的USB接口通常支持USB 2.0标准,部分高端型号可能还支持USB 3.…

新手必看!剪映轻松上手,让你的视频瞬间高大上

相信现在短视频兴起的时代下,几乎人手都在学习如何剪辑出日常视频,尤其是想要走新媒体路线的小伙伴更是在尝试专业的剪辑,不过平时的vlog或者抖音短视频可以从简单的开始接触,剪映是其中的一款适合初学者上手的剪辑了,…

网络编程复习

1.网络编程基础 1.1引入 socket套接字实现主机之间的通信 cs通信模型基于socket实现,需要客户端软件来实现通信 bs通信模型基于http实现,是网页通信,不需要任何客户端软件 1.2通信协议 (1)OSI七层通信协议&#xff…

QEMU理解与分析系列(1):QEMU简介

QEMU简介 一、QEMU基本介绍1.1操作模式1.2 虚拟化方式中间代码实现方式简介源码结构分布 二、qemu tcg前端解码逻辑2.1 tcg翻译流程2.1.1 decode tree语法2.1.2 trans_xxx函数的逻辑 三、编译相关3.1 代码拉取(拉取自己想要的版本)3.2 编译参数3.3 依赖包…

Spring Boot - 在Spring Boot中实现灵活的API版本控制(上)

文章目录 为什么需要多版本管理?在Spring Boot中实现多版本API的常用方法1. URL路径中包含版本号2. 请求头中包含版本号3. 自定义注解和拦截器 注意事项 为什么需要多版本管理? API接口的多版本管理在我们日常的开发中很重要,特别是当API需要…

关于Zoho mail邮箱续费、退款、升级的说明

在使用企业邮箱服务的过程中,可能会遇到续费,退款及升级服务的情况。遇到这些情况时应该如何处理?本文将为您提供遇到邮箱情况时的详细操作步骤:邮箱续费方式及续费流程、邮箱申请退款方式、邮箱升级服务的流程。 一、Zoho邮箱如…

动态面板门槛模型及 Stata 具体操作步骤

目录 一、文献综述 二、理论原理 三、实证模型 四、稳健性检验 五、程序代码及解释 六、代码运行结果 一、文献综述 动态面板门槛模型作为一种先进的计量经济学方法,在众多领域的研究中发挥着关键作用。在经济增长领域,[学者 A]通过构建动态面板门槛…

你的会议记录还用手写吗?3款免费语音转文字工具

现在,随着大家越来越习惯用电脑和手机工作,很多专业人士都在找更快捷的方法来记录会议内容。以前那种手写笔记,不仅写起来慢,而且整理和分享起来也很麻烦。幸好,随着科技的发展,出现了一些能将说话的声音直…

【计算机网络】什么是socket编程?以及相关接口详解

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

letcode 分类练习 x个数之和问题 15. 三数之和 18. 四数之和 454. 四数相加 II 383. 赎金信

letcode 分类练习 x个数之和问题 15. 三数之和 18. 四数之和 454. 四数相加 II 383. 赎金信 三数之和四数之和454. 四数相加 II383. 赎金信 三数之和 三数之和,双指针模版代码,注意去重逻辑,还有只需要去重第一和第二重循环,第三…

从Python翻译Go代码谈起:AI辅助编程的现状与展望

最近,一位同学使用GPT-4o将一个约300行的Python程序转换成Golang,正确率达到了90%。这引发了一个有趣的讨论:如果是整个项目规模的代码转换,准确率会如何?作为被的对象,我决定深入探讨这个话题,…

高等数学精解【6】

文章目录 直线与二元一次方程直线方程斜率两点式方程截距式方程将不同形式的直线方程转换为截距方程直线的一般方程直线一般方程的系数有一个或两个为零的直线 参考文献 直线与二元一次方程 直线方程 斜率 直线对于 x 轴的倾角,平行于 x 轴,倾角为 0 &…

从一个服务预热不生效问题谈微服务无损上线

作者:凡问、启淮 前言 本文基于阿里云技术服务团队和产研团队,在解决易易互联使用 MSE(微服务引擎)产品无损上线功能所遇到问题的过程总结而成。本文将从问题和解决方法谈起,再介绍相关原理,后进一步拓展…

jupyter下载

https://blog.csdn.net/qq_48372575/article/details/125630622 我下面是CPU运行的,GPU链接在上面 Anaconda下载 https://docs.anaconda.com/miniconda/miniconda-other-installer-links/ 参考链接: https://blog.csdn.net/qq_48372575/article/detai…

计算机编码 - 笔记

1 ASCII码 - 0- 127 2 ASCII码扩展字符集 - 128- 255

反转字符串(LeetCode)

题目 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 的额外空间解决这一问题。 解题 def reverse_string(s):left 0right len(s) - 1while left …