利用Hough变换识别图像中的直线
引入
近期看到2015年数学建模A题太阳影子定位中的第四问,需要根据附件中视频里的直杆的太阳影子的变化确定拍摄地点。其实确定拍摄地点这个问题并不是十分困难,因为有前三问的铺垫,我们已经得出了太阳影子长度和观测地点的经纬度、时间、直杆高度四个参数之间的关系;所以我们只要知道了直杆太阳影子的长度就可以通过问题2中的优化模型求解出拍摄地点的经纬度了。但是本题难就难在,如何确定视频中直杆的太阳影子的长度?
----
求解
首先想到的是:将视频处理后,能否通过手动标示像素点来确定直杆的太阳影子的长度,因为可以手动标示的工具较多,如AE中的动态跟踪、PS中的像素点提取、Matlab里的ginput。虽然可以有效的解决直杆的太阳影子长度的测量,但是笔者认为这种人工手动测量的方法的误差较高,且逐个进行测量特别麻烦,且误差可能不够大。不符合笔者比较懒得性格,所以在这里给出自己的一种解法
1.视频的逐分提取
这部分比较简单。
2图像的预处理
图像二值化处理。
3.通过Hough变换
Hough变换是图像处理中从图像识别几何形状的方法。它利用点与线的对偶性,将原始图像空间的给定曲线通过曲线表达形式变为Hough参数空间中的一个点。所以原始图像给定曲线的检测问题就转化为在Hough参数空间的峰值问题,即检测整体特性转化为检测局部特性[7]。
欧式空间中一条直线上的点在Hough参数空间中为一条正弦曲线;欧式空间中同一条直线上的多个点在Hough参数空间中为一个正弦曲线簇且曲线簇相交于一点,称此点为峰值点。而Hough参数空间下的峰值点,则对应了欧式空间下的一条直线。
如图所示,
直线l方程为:
\[ xcosθ+ysinθ=ρ \]
在欧式空间中数据点的表示为(x,y),而在Hough参数空间内表示为(ρ,θ),P点即为Hough参数空间中的峰值点,它所表示的含义即为欧式空间的l直线。
下面给出Hough变换的算法:
(1)初始并网格化Hough参数空间
(2)对于欧氏空间中的每个(x,y)执行步骤3;
(3)for θ=-90° to 180°,执行ρ=xcosθ+ysinθ与H(ρ,θ)=H(ρ,θ)+1
(4)设立阈值,寻找参数空间的峰值点。参数空间每一个峰值点对应欧式空间中一条直线。
其中每一个网格颜色代表能量高低,颜色越亮表明能量越高,反之能量越低。能量越高的地方,即为所需求解的峰值点。得到峰值点后,通过编程反变换到原图像的RGB值空间中,即可识别出峰值点所对应的直线;直杆影子图像所检测出的直线如图所示:
已知直杆的高度\(h_真\)为2m,通过Hough变换得到了直杆的像素高度\(h_像\)为664.9218像素,同样直杆影子长度\(L_真\)通过Hough变换得到的直杆影子像素长度\(L_像\)为一组像素数据,根据比例关系:
\[\frac{L_真}{L_像}=\frac{h_真}{h_像}\]可以计算出直杆影子的真实长度。
利用Hough变换识别图像中的直线的更多相关文章
- Matlab实现Hough变换检测图像中的直线 分类: 图像处理 2014-06-14 22:07 641人阅读 评论(0) 收藏
Hough变换的原理: 将图像从图像空间变换至参数空间,变换公式如下: 变换以后,图像空间与参数空间存在以下关系: 图像空间中的一点在参数空间是一条曲线,而图像空间共线的各点对应于参数空间交于一点的各 ...
- Matlab实现Hough变换检測图像中的直线
Hough变换的原理: 将图像从图像空间变换至參数空间.变换公式例如以下: 变换以后,图像空间与參数空间存在下面关系: 图像空间中的一点在參数空间是一条曲线,而图像空间共线的各点相应于參数空间交于一点 ...
- 利用百度文字识别API识别图像中的文字
本文将会介绍如何使用百度AI开放平台中的文字识别服务来识别图片中的文字.百度AI开放平台的访问网址为:http://ai.baidu.com/ ,为了能够使用该平台提供的AI服务,你需要事先注册一 ...
- Hough变换在opencv中的应用
霍夫曼变换(Hough Transform)的原理 霍夫曼变换是一种可以检测出某种特殊形状的算法,OpenCV中用霍夫曼变换来检测出图像中的直线.椭圆和其他几何图形.由它改进的算法,可以用来检测任何形 ...
- Zybo智能小车识别图像中的文字
智能小车识别图像中的文字 [TOC] 运行平台 这次的内容是基于Xilinx公司的Zybo开发板以及其配套的Zrobot套件开发 Zybo上面的sd卡搭载了Ubuntu12.04LTS的linux版本 ...
- hough变换是如何检测出直线和圆的?
(I)直线篇 1 直线是如何表示的?对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法.然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示一条直线. ...
- Python 利用pytesser模块识别图像文字
使用的是python的pytesser模块,原先想做的是图片中文识别,搞了一段时间了,在中文的识别上还是有很多问题,这里做记录分享. pytesser,OCR in Python using the ...
- Android调用OCR识别图像中的文字
// CharacterExtractor.java // Copyright (c) 2010 William Whitney // All rights reserved. // This sof ...
- hough变换检测直线和圆
图像测量和机器视觉作业: 提取图像中的直线和点的位置坐标,将其按一定顺序编码存入一文本文件,并在原图像上叠加显示出来. 下午实验了一下: 程序环境:vs2013(活动平台为x64)+opencv3.1 ...
随机推荐
- 纯CSS3实现淡入淡出下拉菜单
纯CSS3实现淡入淡出下拉菜单是一款比较简单清新的CSS3教程下拉菜单,这款下拉菜单是垂直方向的,点击主菜单项可以展开和折叠子菜单,在展开折叠的过程中伴随着淡入淡出的动画效果 源代码:http://w ...
- leetcode 191 Number of 1 Bits(位运算)
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also know ...
- Python 微信通知 先挖个坑
桑心病狂,试试把报警信息发到微信上 原文 https://segmentfault.com/a/1190000009717078
- C语言中数据类型和变量
C语言中的数据类型 数据类型的本质,固定大小内存块的别名. 数组名代表数组首元素的地址. 数组首元素的地址,&代表整个数组的地址. 数组数据类型,怎么定义数据数组类型,定义数组类型指针,数组类 ...
- JDK中主要的包介绍
- CodeForcesdiv1:995C - Leaving the Bar(随机算法+贪心)
For a vector →v=(x,y)v→=(x,y), define |v|=√x2+y2|v|=x2+y2. Allen had a bit too much to drink at the ...
- 「P4994」「洛谷11月月赛」 终于结束的起点(枚举
题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...
- CodeForces - 204C Little Elephant and Furik and Rubik
CodeForces - 204C Little Elephant and Furik and Rubik 个人感觉是很好的一道题 这道题乍一看我们无从下手,那我们就先想想怎么打暴力 暴力还不简单?枚 ...
- 九 Vue学习 manager页面布局
1: 登录后系统页面如下: 对应代码: <template> <div class="manage_page fillcontain"> <el-r ...
- 六 Vue学习 首页 (下)
一:Store介绍: state: 相当于数据 action: action去commit mutations mutation: 只有mutation 才能改变state 例: const stor ...