当前位置: 首页 > news >正文

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

文章目录

      • 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.霍夫变换后的检测直线的效果
在这里插入图片描述

相关文章:

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

文章目录 1.霍夫变换(Hough Transform)原理介绍2.霍夫变换(Hough Transform)算法流程3.霍夫变换(Hough Transform)算法代码4.霍夫变换(Hough Transform)算法效果 1.霍夫变换(Hough Transform)原理介绍 Hough Transform是一种常用的计算机视觉图形检验方法,霍夫变换一…...

linux下文件操作命令

title: linux下文件操作命令 createTime: 2020-10-29 18:05:52 updateTime: 2020-10-29 18:05:52 categories: linux tags: Linux下文件操作命令 tar命令 使用tar命令一般打包分为两种*.tar ,*.tar.gz 相信大家也使用过tar -zcvf test.tar test/tar -zcvf test.tar.gz test/…...

Golang语法、技巧和窍门

Golang简介 命令式语言静态类型语法标记类似于C(但括号较少且没有分号),结构类似Oberon-2编译为本机代码(没有JVM)没有类,但有带有方法的结构接口没有实现继承。不过有type嵌入。函数是一等公民函数可以返…...

Grander因果检验(格兰杰)原理+操作+解释

笔记来源: 1.【传送门】 2.【传送门】 前沿原理介绍 Grander因果检验是一种分析时间序列数据因果关系的方法。 基本思想在于,在控制Y的滞后项 (过去值) 的情况下,如果X的滞后项仍然有助于解释Y的当期值的变动,则认为 X对 Y产生…...

Python-Flask:编写自动化连接demo脚本:v1.0.0

主函数: # _*_ Coding : UTF-8 _*_ # Time : 13:14 # Author : YYZ # File : Flask # Project : Python_Project_爬虫 import jsonfrom flask import Flask,request,jsonify import sshapi Flask(__name__)# methods: 指定请求方式 接口解析参数host host_info[…...

kafka客户端应用参数详解

一、基本客户端收发消息 Kafka提供了非常简单的客户端API。只需要引入一个Maven依赖即可&#xff1a; <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka_2.13</artifactId><version>3.4.0</version></depend…...

Apache Doris 行列转换可以这样玩

行列转换在做报表分析时还是经常会遇到的&#xff0c;今天就说一下如何实现行列转换吧。 行列转换就是如下图所示两种展示形式的互相转换 1. 行转列 我们来看一个简单的例子&#xff0c;我们要把下面这个表的数据&#xff0c;转换成图二的样式 image-20230914151818953.png …...

【Qt图形视图框架】自定义QGraphicsItem和QGraphicsView,实现鼠标(移动、缩放)及键盘事件、右键事件

自定义QGraphicsItem和QGraphicsView 说明示例myitem.hmyitem.cppmyview.hmyview.cpp调用main.cpp 效果 说明 在使用Qt的图形视图框架实现功能时&#xff0c;一般会在其基础上进行自定义功能实现。 如&#xff1a;滚轮对场景的缩放&#xff0c;鼠标拖动场景中的项&#xff0c;…...

C语言结构体指针学习

结构体变量存放内存中&#xff0c;也有起始地址&#xff0c;定义一个变量来存放这个地址&#xff0c;那这个变量就是结构体指针&#xff1b; typedef struct mydata{int a1;int a2;int a3; }mydata;void CJgtzzView::OnDraw(CDC* pDC) {CJgtzzDoc* pDoc GetDocument();ASSERT…...

华为云云耀云服务器L实例评测|部署在线轻量级备忘录 memos

华为云云耀云服务器L实例评测&#xff5c;部署在线轻量级备忘录 memos 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品优势1.3 应用场景1.4 支持镜像 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 memos3.1 memos介绍3.2 Docker 环境搭建…...

详解Avast Driver Updater:电脑驱动更新工具的利器还是多余的软件?

亲爱的读者朋友们&#xff0c;你是不是经常为电脑的驱动问题而烦恼&#xff1f;如果是的话&#xff0c;你可能会对这款软件——Avast Driver Updater 电脑驱动更新工具感兴趣。但在你决定尝试之前&#xff0c;不妨先和我一起深入探讨一下它的优点、缺点以及它适用的使用场景。 …...

大数据Flink(九十五):DML:Window TopN

文章目录 DML:Window TopN DML:Window TopN Window TopN 定义(支持 Streaming):Window TopN 是一种特殊的 TopN,它的返回结果是每一个窗口内的 N 个最小值或者最大值。 应用场景...

使用OKHttpClient访问网络

使用OKHttpClient前要引入依赖&#xff1a; 在build.gradle(Moduel :app)中添加 implementation com.squareup.okhttp3:okhttp:3.14.1 implementation com.squareup.okhttp3:logging-interceptor:3.14.1 implementation com.squareup.okio:okio:1.6.0 1. GET&#xff08;同步…...

maui 开发AMD CPU踩的坑。

刚换的 amd R7735HS 笔记本&#xff0c;8核16线程&#xff0c;32GB内存。性能得实强悍 。 当需要发布iOS版本时发现&#xff0c;我没有macos &#xff0c;那就安装个vmware 吧。看了一下Apple 要求以后的发布的APP需要以xcode14.3或以后版本开发的版本&#xff0c;但xcode14.3…...

宝塔反代openai官方API接口详细教程,502 Bad Gateway问题解决

一、前言 宝塔反代openai官方API接口详细教程&#xff0c;实现国内使用ChatGPT502 Bad Gateway问题解决&#xff0c; 此方法最简单快捷&#xff0c;没有复杂步骤&#xff0c;不容易出错&#xff0c;即最简单&#xff0c;零代码、零部署的方法。 二、实现前提 一台海外VPS服务…...

【leetocde】128. 最长连续序列

给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff1a;4 …...

【Vue3】动态 class 类

如果你想在 Vue.js 中动态设置元素的 class 类名&#xff0c;你可以使用以下两种主要方式&#xff1a; 绑定一个动态的 class 对象&#xff1a;你可以使用 v-bind 或简写的 : 来绑定一个包含类名的对象&#xff0c;其中类名的键是类名字符串&#xff0c;值是一个布尔值或计算属…...

【Redis】redis基本数据类型详解(String、List、Hash、Set、ZSet)

目录 RedisString(字符串)List(列表)Hash(字典)Set(集合)ZSet(有序集合) Redis Redis有5种基本的数据结构&#xff0c;分别为&#xff1a;string&#xff08;字符串&#xff09;、list&#xff08;列表&#xff09;、set&#xff08;集合&#xff09;、hash&#xff08;哈希&a…...

ubuntu源码安装aria2

github:GitHub - aria2/aria2: aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink. 发行说明&#xff1a;GitHub - aria2/aria2 at releas…...

【多任务案例:猫狗脸部定位与分类】

【猫狗脸部定位与识别】 1 引言2 损失函数3 The Oxford-IIIT Pet Dataset数据集4 数据预处理4 创建模型输入5 自定义数据集加载方式6 显示一批次数据7 创建定位模型8 模型训练9 绘制损失曲线10 模型保存与预测 1 引言 猫狗脸部定位与识别分为定位和识别&#xff0c;即定位猫狗…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

微服务通信安全:深入解析mTLS的原理与实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言&#xff1a;微服务时代的通信安全挑战 随着云原生和微服务架构的普及&#xff0c;服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...