霍夫变换
时间:2020-01-03
本文章向大家介绍霍夫变换,主要包括霍夫变换使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 霍夫检测-直线
前提条件 – 边缘检测已经完成,霍夫变换解决平面空间到极坐标空间转换。
从霍夫空间曲线图来看,取不同的像素点都汇聚在一个点,这表明这些个像素点都属于同一条直线。(xi,yi).对于任意一条直线上的所有点来说变换到极坐标中,从[0~360]空间,可以得到r的大小属于同一条直线上点在极坐标空(r, θ)必然在一个点上有最强的信号出现(如上图),根据此反算到平面坐标中就可以得到直线上各点的像素坐标。从而得到直线。
下图第一张为原图,第二张为提取边缘,第三张为直线检测并绘制。
- 霍夫检测-圆
极坐标变换原理:
从平面坐标到极坐标转换三个参数C(x0,y0,r)其中(x0,y0)是圆心假设平面坐标的任意一个圆上的点,转换到极坐标中:C(x0,y0,r)处有最大值,霍夫变换正是利用这个原理实现圆的检测。
霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤波。
相关函数如下:
1 //标准的霍夫变换HoughLines从平面坐标转换到霍夫空间, 2 //最终输出是表示极坐标空间霍夫变换直线概率,要自己反变换到平面空间,一般不用; 3 HoughLinesP(int1,out1,)最终输出是直线的两个点(x1,y1,x2,y2). 4 5 霍夫直线检测HoughLinesP(out1,plinel,1,CV_PI/180.0,10,0,0); 6 // out1为要检测的灰度图像,plinel 为输出的直线的两点,类型为vector<Vec4f>plinel; 7 // 1为生成极坐标时候的像素扫描步长,CV_PI/180.0生成极坐标时候的角度步长,一般取值CV_PI/180,10为阈值, 8 //只有获得足够交点的极坐标点才被看成是直线,最小直线长度0最大间隔0; 9 for (size_t i=0;i<plinel.size();i++) 10 { 11 Vec4f hline = plinel[i]; 12 line(out2, Point(hline[0], hline[1]), 13 Point(hline[2], hline[3]), 14 colorf3, 3, 8); 15 } 16 17 霍夫圆检测HoughCircles(out2, pcircle, CV_HOUGH_GRADIENT,1, 10, 100, 30,80,100); 18 //out2为要检测的灰度图像,pcircle 为输出的圆心及半径,类型为vector<Vec3f>pcircle; 19 //10 最短距离-可以分辨是两个圆的,否则认为是同心圆,30为中心点累加器阈值用于确定圆心80为最小半径100最大半径, 20 Mat dst = Mat(in1_image.size(), in1_image.type()); 21 for (size_t i=0;i< pcircle.size();i++) 22 { 23 Vec3f cc = pcircle[i]; 24 circle(dst,Point(cc[0], cc[0]), cc[2], colorf3,2,LINE_AA); 25 circle(dst, Point(cc[0], cc[0]), 3, colorf, 2, LINE_AA); 26 }
原文地址:https://www.cnblogs.com/fuzhuoxin/p/12144424.html
- Java中有关Null的9问题
- 在C++中反射调用.NET(二) 定义数据接口 绑定委托方法 使用SOD DTO 对象 将.NET对象转换到C++结构体为何不使用序列化的问题
- Java阻塞队列线程集控制的实现方法
- 【自然框架】QuickPager分页控件,新增一种分页方式——伪URL分页(Postback版)
- 我们的漏洞Webug 3.0中级进阶攻略(上)
- 【自然框架】QuickPager分页控件的总体介绍和在线演示
- 在C++中反射调用.NET(三) 使用非泛型集合的委托方法C++中的列表对象list C++传递集合数据给.NET创建泛型List实例反射静态方法反射调用索引器当委托遇到协变和逆变C++/CLI
- 如何使用树莓派自制网络监视器
- 利用雅虎小型企业服务平台的目录遍历漏洞查看客户的信用卡信息
- 【自然框架】QuickPager asp.net 分页控件的Ajax分页方式。
- 骑行在华盛顿 针对320万次共享单车骑行数据的分析
- 【自然框架】QuickPagerSQL——专门生成分页用的SQL的类库
- 【数据科学】数据科学中的 Spark 入门
- 【自然框架】QuickPager分页控件的单独的源码 V2.0.4.2。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- haproxy与nginx集成实例 By HKL, Wed
- 通过JavaScript实现HTTP到HTTPS的强制跳转 By HKL,
- 在Windows10 Bash中默认启动其他shell By HKL,
- 基于R的竞争风险模型的列线图
- 安装zabbix的windows系统agent By HKL,
- NetBSD使用sysupgrade工具更新系统 By HKL,
- asterisk服务器的sip、iax2中继对接 By HKL,
- 用Windows10自带PowerShell获取文件Hash(MD5、SHA1/256)值得方法 By H
- 移除Blog对jQuery的依赖 By HKL, Tues
- 通过expect脚本在H3C设备批量执行命令 By HKL,
- 使用python的paramiko加flask模块实现H3C设备实时ssh信息查询 By HKL,
- MotherBoard JCOM to DB9 female By HKL,
- PHP实现根据请求的域名跳转到不同目录 By HKL, T
- frp定时监控脚本 By HKL, Tuesday 13
- iptables上入站流量同时启用DNAT和SNAT By HKL,