图像处理与计算机视觉--第五章-图像分割-霍夫变换

news2024/11/25 16:57:02

文章目录

      • 1.霍夫变换(Hough Transform)原理介绍
      • 2.霍夫变换(Hough Transform)算法流程
      • 3.霍夫变换(Hough Transform)算法代码
      • 4.霍夫变换(Hough Transform)算法效果

1.霍夫变换(Hough Transform)原理介绍

 Hough Transform是一种常用的计算机视觉图形检验方法,霍夫变换一般用于检验直线或者圆。

 霍夫变换的原理具体如下所示:
 假设图像中存在一条直线,表达式如下所示:
y = k x + b y=kx+b y=kx+b
 假设我们任意指定一个点 ( x 0 , y 0 ) (x_{0},y_{0}) (x0,y0),则对于任意穿过该点的直线,一定有如下公式成立:
b = − k x 0 + y 0 b=-kx_{0}+y_{0} b=kx0+y0
 此时我将以x,y为轴的图像变为以b,k为轴的图像,此时该直线也能够进行变化,并且如上推导可知,对应的图像也是一条直线,如图所示:
在这里插入图片描述
 进一步的,我们再从直线上取一点 ( x 1 , y 1 ) (x_{1},y_{1}) (x1,y1),则必有如下公式:
b = − k x 1 + y 1 b=-kx_{1}+y_{1} b=kx1+y1
 在图像上绘制会这样的函数,我们可知,两条直线相交于一点 ( k ∗ , b ∗ ) (k^{*},b^{*}) (k,b),而这个点就是x,y轴上的 ( x 1 , y 1 ) (x_{1},y_{1}) (x1,y1) ( x 0 , y 0 ) (x_{0},y_{0}) (x0,y0)两点所确定的直线。
![在这里插入图片描述](https://img-blog.csdnimg.cn/905cb7cad8ce40eaa338bde0626db96d.png
 但是我们在实际的直线检测中,我们不会用到上述的坐标系方法,上述的方法只是提供一个求解的思路,我们将使用极坐标方程来完成上述方法的求解,对于上述的直线,极坐标方程可以表示为:
ρ = x c o s θ + s i n θ \rho=xcos\theta+sin\theta ρ=xcosθ+sinθ
 其中, θ \theta θ为直线的法线向量与x轴正向的夹角,而 ρ \rho ρ为坐标系原点至直线的垂直距离,如下图所示:
在这里插入图片描述
 如下所示,我们可以发现,这条直线在极坐标下只有一个( ρ \rho ρ, θ \theta θ) 与之对应,改变一个参数大小变换到空域上的直线即会改变。而空域这条直线上的所有点都可以在极坐标为( ρ \rho ρ, θ \theta θ) 所表示的直线上 (如下图所示)
在这里插入图片描述
 空域直线上的一个点在极坐标系下具体对应多少个极坐标对,取决于 θ \theta θ的步长 ,如果设步长为 β \beta β,则极坐标对n的表示如下所示:
n = 360 β n=\frac{360}{\beta} n=β360
 对应的图片如下所示:
在这里插入图片描述
 接下来我们假设空域上的三个点对应的极坐标曲线如下图的(a)所示,极坐标曲线同时经过一个点表示空域下有一条直线经过这三个点,只要寻找交点最多的点,在空域内就是要寻找的直线。
在这里插入图片描述

2.霍夫变换(Hough Transform)算法流程

·Hough变换直线检测的步骤如下:
1.0的取值范围为[0,360],单位为度根据检测精度要求,采取适当的步长对角度和长度的取值范围进行离散化,形成0-p平面上的离散网格。
2.将每一个离散网格视为一个投票累加器,初始时全部清03.遍历图像的所有像素,对于每个像素计算离散值0i和p=xcos0+ysin0.
4.对在参数空间中将对应的累加器中的值加1,从而完成求出相应的离散化值p,对于每个(p,0)该像素点的投票的投票之后,在离散化的参数空间中找出所累积的投票值
5.访问完所有的图像像素并完成所有,点这些点所对应的参数即为检测得到的直线的参数大于某给定闽值T的局部极大值点,

3.霍夫变换(Hough Transform)算法代码

import numpy as np
import cv2
from PIL import Image,ImageEnhance 
import matplotlib.pyplot as plt
"""
hough变换是一种常用的计算机视觉图形检验方法,霍夫变换一般用于检验直线或者圆。

"""
img = Image.open(r"C:\Users\Zeng Zhong Yan\Desktop\py.vs\python学习\test.webp")
#增强图像效果
img = ImageEnhance.Contrast(img).enhance(3)
img.show()
#处理成矩阵,便于后续处理
img = np.array(img)
#灰度处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#cv2.THRESH_OTSU具有双峰值,显示效果更好.
"""
cv2.THRESH_OTSU使用最小二乘法处理像素点。一般情况下,cv2.THRESH_OTSU适合双峰图。
cv2.THRESH_TRIANGLE使用三角算法处理像素点。一般情况下,cv2.THRESH_TRIANGLE适合单峰图。
"""
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
#canny边缘检验算法处理
result = cv2.Canny(thresh, ret-30, ret+30, apertureSize=3)

#霍夫变换检测直线
lines = cv2.HoughLinesP(result, 1, 1 * np.pi / 180, 10, minLineLength=10, maxLineGap=5)
# 画出检测的线段
for line in lines:
    for x1, y1, x2, y2 in line:
        cv2.line(img, (x1, y1), (x2, y2), (255, 0, 0),2)
img = Image.fromarray(img, 'RGB')
img.show()

4.霍夫变换(Hough Transform)算法效果

1.原先的图片如下所示:
在这里插入图片描述
2.霍夫变换后的检测直线的效果
在这里插入图片描述

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

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

相关文章

【再识C进阶3(下)】详细地认识字符分类函数,字符转换函数和内存函数

前言 💓作者简介: 加油,旭杏,目前大二,正在学习C,数据结构等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏&#x1…

明年亮相香港与新加坡!Polkadot 区块链学院欢迎 Web3 革新者报名

熊市是建设的绝佳时机。继剑桥大学、布宜诺斯艾利斯大学、加州大学伯克利分校之后,Polkadot 区块链学院(PBA)宣布明年将在亚洲开设两站课程!你是否准备好全身心投入到 Web3 的世界,突破边界束缚,开拓创新&a…

Python如何优雅地可视化目标检测框

读入图像 img_name ./pikachu.jpg img cv2.imread(img_name) box [ 140, 16,468,390, "pikachu"] box_color (255,0,255) cv2.rectangle(img, (box[0], box[1]), (box[2], box[3]), colorbox_color, thickness2)标签美化 接下来我们来给矩形框添加标签,我们…

Win10电脑任务栏没有蓝牙图标的简单解决方法

Win10电脑任务栏没有蓝牙图标怎么办?在Win10电脑中,用户有时候会发现任务栏上没有蓝牙图标了,这样就无法通过蓝牙图标快速打开蓝牙服务了。下面小编给大家介绍最简单的解决方法,帮助大家找回任务栏上面的蓝牙图标吧。 问题原因 反…

一致性 Hash 算法

是什么: 一致性 hash,是一种比较特殊的 hash 算法,它的核心思想是解决在分布式环境下, hash 表中可能存在的动态扩容和缩容的问题。 为什么会出现一致性Hash 一般情况下,我们会使用 hash 表的方式以 key-value 的方式来…

一个月软考高项(信息系统项目管理师)冲刺攻略

2023下半年软考信息系统项目管理师(高项),离11月4号的考试,只有1个多月了,啃书是来不及了,要抓重点看了 信息系统项目管理师考试介绍: 考试时间:一年考两次,上半年的5月…

pytorch的pixel_shuffle转tflite文件

torch.pixel_shuffle()是pytorch里面上采样比较常用的方法,但是和tensoflow的depth_to_space不是完全一样的,虽然看起来功能很像,但是细微是有差异的 def tf_pixelshuffle(input, upscale_factor):temp []depth upscale_factor *upscale_f…

基于SpringBoot的微服务在线教育系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 用户管理 课程信息管理 学科管理 职业规划管理 我的笔记管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本…

张量-类型转换函数

代码示例如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior()a tf.constant(6) b tf.constant([1,2,3]) a1 tf.to_float(a,nameToFloat) b1 tf.cast(b,dtype tf.float32)with tf.Session() as session:print(session.run(a1))print(session.run(b1))

【LeetCode75】第六十五题买卖股票的最佳时机含手续费

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 这是力扣里动态规划类题目里的一道系列题目,买卖股票,直接在题库里搜就能搜到这一系列。 我建议各位可以先去做一…

经验分享|甘肃某中型灌区信息化管理平台案例

河西走廊绿洲灌区,润泽万亩良田 甘肃某中型灌区位于河西走廊中端的黑河中游,从黑河引水自流灌溉,通过渠首输配水闸站,将水量输送并分配到田间,进行灌溉。 该灌区所处区域是农业灌溉大县,是甘肃河西走廊…

编程新时代:Amazon CodeWhisperer 助您轻松驾驭代码世界

文章目录 一、什么是 Amazon CodeWhisperer?二、个人无限免费使用三、安装配置3.1 手把手教你在pycharm配置3.2 同理在VSCODE安装 三、Pycharm上测试3.1 根据注释写代码3.2 检查修复代码错误3.3 构建一个简单爬虫 四、 VSCODE上测试4.1 个性化体验4.2 系统兼容性4.3…

项目任务管理上的一些总结

1. 开发任务管理现状: 1:基于禅道进行任务派发,缺少任务统计,进度上只能以“来不及”、“进度正常”、“进度延后”等模糊字眼。 2:“感觉”工作效率不高了,工作量是否饱和,任务投入产出偏差多…

桥梁模板人工费多少钱?

桥梁模板是桥梁工程中不可或缺的一部分,它起到支撑和固定混凝土浇筑的作用。在桥梁建设中,模板人工费用是一个重要的成本因素。那么,桥梁模板人工费到底是多少呢?下面我们来详细了解一下。 首先,需要明确的是&#xff…

目标检测算法改进系列之Backbone替换为EMO

EMO:结合 Attention 重新思考移动端小模型中的基本模块 近年来,由于存储和计算资源的限制,移动应用的需求不断增加,因此,本文的研究对象是端侧轻量级小模型 (参数量一般在 10M 以下)。在众多小模型的设计中&#xff0…

安防监控/视频监控系统EasyCVR平台界面侧边栏优化

视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等,视频智能分析平台EasyCVR融合性强、开放度…

windows10系统镜像安装含驱动补丁

前言 都2023年了为什么不装windows11, 当然是硬件不支持了(TPM), 当然你也可以跳过TPM验证硬装 Windows11对系统的要求 如何检测TPM :WindowsR, 输入 tpm.msc 检测是否兼容TMP 言归正传,开始安装 windows10镜像下载 windows11镜像下载 下载工具按流程安装即可 驱动补丁安装…

【SpringCloud】-Ribbon负载均衡

一、背景介绍 项目中使用到的SpringCloud Alibaba这一套微服务架构中服务注册与发现Nacos兼容了Feign,而Feign默认集成了Ribbon,当Nacos下使用Feign默认实现了负载均衡的效果。即使是默认集成了,也要追根溯源。 二、过程 负载均衡是什么&am…

00后卷王的自述,我真的很卷吗?

前言 前段时间去面试了一个公司,成功拿到了offer,薪资也从12k涨到了18k,对于工作都还没两年的我来说,还是比较满意的,毕竟一些工作3、4年的可能还没我高。 我可能就是大家说的卷王,感觉自己年轻&#xff…

设计模式2、抽象工厂模式 Abstract Factory

解释说明:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。 简言之,一个工厂可以提供创建多种相关产品的接口,而无需像工厂方法一样,为每一个产品都提供一个具体工厂 抽象工厂(Abstra…