IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Halcon实例之hough变换检测圆 -> 正文阅读

[人工智能]Halcon实例之hough变换检测圆

Halcon实例之hough变换检测圆

1. 问题描述

在工业检测中,我们有时需要找到图像中的圆,如下图所示,可能是需要对图中的目标进行计数,也可能是需要定位到这些目标进行后续的检测.
在这里插入图片描述
该图像来自OpenCV的示例图像smarties.png
在本文中,因为主要任务是目标定位,所以把这张图的颜色细节忽略掉,转换成灰度图来进行处理.

2. hough_circles算子解析

Halcon中用来进行hough圆检测的算子为hough_circles
算子原型为
hough_circles(RegionIn:RegionOut:Radius, Percent, Mode)
其中,

  • RegionIn: 输入的Object,必须为Region,相当于对原图进行二值化
  • RegionOut: 检测得到的可能的圆心位置,单个圆检测的结果区域可能是若干个像素区域,不一定是单个像素
  • Radius: 程序设计者需要预先知道像素半径值Radius
  • Percent: 待检测圆的完整度,对于完整的圆一般使用90%即可
  • Mode: 取值为0 1 2,其中,
    • 0模式下,设定的Radius半径针对圆区域(往往是圆环)的外边缘,
    • 1模式下,设定的半径Radius针对圆环的中间线,
    • 2模式下,设定的半径Radius针对圆环的内边缘

3. 检测圆实例

回到我们初始的那个问题,对这幅图像进行处理. 以下是Halcon的实例代码:

read_image (Smarties, './smarties.png')
rgb1_to_gray (Smarties, GrayImage)
edges_sub_pix (GrayImage, Edges, 'canny', 1, 40, 80)
select_contours_xld (Edges, SelectedContours, 'contour_length', 140, 220, -0.5, 0.5)
gen_region_contour_xld (SelectedContours, Region, 'filled')
opening_circle (Region, RegionOpening, 13.5)
union1 (RegionOpening, RegionUnion)
hough_circles (RegionUnion, RegionOut, 25, 90, 0)
connection (RegionOut, ConnectedRegions)
area_center (ConnectedRegions, Area, Row, Column)
gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)
tuple_gen_const (|Area|, 26, Radiuses)
gen_circle (Circle, Row, Column, Radiuses)
gen_contour_region_xld (Circle, Contours, 'border')
dev_set_line_width (2)
dev_set_color ('green')
dev_clear_window ()
dev_display (GrayImage)
dev_display (Cross)
dev_display (Contours)

代码的整体思路整理如下:

  1. 读取原图;
  2. 将原图转换为灰度图;

在这里插入图片描述

  1. 在灰度图中应用边缘检测,这里用的是canny边缘检测算子,针对这张图,阈值选的是40和80之间;

在这里插入图片描述

  1. 对得到的边缘进行筛选,去除长度不符的边缘;

在这里插入图片描述

  1. 由筛选得到的边缘生成Region;

在这里插入图片描述

  1. 对Region进行一次形态学处理,分离不同的目标个体,然后再合并Region;

在这里插入图片描述
在这里插入图片描述

  1. 应用hough_circles算子,这里选择的半径为25,因为检测的是完整圆弧,百分比设90,这样就能得到检测所得的圆心位置(但并不是很精确,可以看到每个圆心都是若干个像素);

在这里插入图片描述

  1. 对每一“团”圆心Region计算质心,这样计算不是很精确,但是对于本例足够使用;
  2. 通过圆心和半径画出结果

在这里插入图片描述

4. 结果讨论

A. 从结果可以看出,我们找到了所有完整的目标,图像左下角的两个不完整目标则没有找到.

B. 图像中的目标并不是非常圆,而通过算法找到的圆的圆心则基本上位于目标的中心.

C. 了解hough检测原理的同学应该知道,如果不对Radius加以指定,那么算子需要在三维空间中求解圆锥面截面圆的交点,计算量过大,所以我们看到Halcon在实现这个算子的过程中也是通过限定Radius,将求解限定在二维空间.

D. Halcon中还有一个hough_circle_trans算子,可以看一下得分图(极坐标空间图):

hough_circle_trans (RegionUnion, HoughImage, 25)

在这里插入图片描述

图中越亮的点得分越高,也即目标圆心点.

E. 本文中代码不需要进行边缘提取也能得到结果:

read_image (Smarties, './smarties.png')
rgb1_to_gray (Smarties, GrayImage)
threshold(GrayImage, RegionThresh, 0, 200)
hough_circles (RegionThresh, RegionOut, 25, 90, 0)
connection (RegionOut, ConnectedRegions)
area_center (ConnectedRegions, Area, Row, Column)
gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)
tuple_gen_const (|Area|, 25, Radiuses)
gen_circle (Circle, Row, Column, Radiuses)
gen_contour_region_xld (Circle, Contours, 'border')
dev_set_line_width (2)
dev_set_color ('green')
dev_clear_window ()
dev_display (GrayImage)
dev_display (Cross)
dev_display (Contours)

在这里插入图片描述

注意对比一下以上结果和做了边缘提取+形态学处理之后的结果,很明显的是,在左侧第二个目标的检测效果上,前者不如后者.这是由于图像中的阴影对找圆的结果造成了影响.

→ \rightarrow 本文对hough圆检测的原理未作阐述,因为网上解释这部分原理的博客很多,下面也贴一两个链接,有兴趣的话可以去阅读一下:

  1. 已故大神浅墨(毛星云)关于opencv霍夫检测原理的博客文章
  2. LancerHarries关于霍夫变换的博客文章
  3. Hough变换检测原理

作者水平有限,若有错漏,欢迎指正,轻喷勿骂
在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:11:31  更:2022-03-11 22:16:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:37:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码