halcon视觉入门扫盲篇

前言

    在公司让我研究视觉的时候,我是两眼一抹黑的。之前完全没有接触过视觉。综合权衡后选择了Halcon,使用的是HDevelop 13 (64-bit)。

    下载地址 官方下载

    破解有点麻烦,我使用的是文件替换破解。一个exe文件一个dll文件,替换即可。

假设以上环境搭建没有问题,现在开始了解视觉识别的套路

基础知识

既然是做视觉,就需要图像,不管这个图像是从摄像头读过来的还是从文件中读取的。图片有一些基础信息,比如:

通道:一张图片一般有3个通道,也就是R G B 三个通道,R 代表红色 G 代表绿色 B 代表蓝色。

像素:计算机存储每个图片有N多个像素点,我们常说某个相机有几百万像素,说的就是这个,像素在计算机存储层面不可分割,是最小粒子。但在视觉算法上是可以的(后面再说)。

灰度值:灰度也可以认为是亮度,也是黑白图像中点的颜色深度,范围一般从0到255,白色为255 ,黑色为0,故黑白图片也称灰度图像。(如此简单理解即可)

Region:区域,根据特征提取出来的一些范围。

算子:直接理解成方法。

知道这些基础知识以后,我们在来理解什么是视觉识别。也别去看百度百科了,简单的理解就是,通过提取图像中的特征,选取我们需要的区域,从而达到一定的目的。

比如,有如下图



需要识别每个方格中是否有芯片。这是一个需求。根据这个需求,我们来进行需求拆解:

1. 如何在这张图里面得到这些方格。

2. 如何在每个方格中判断芯片是否存在。

大体思路就是这样了,接下来对图像进行分析,得到具体解决问题的思路:

如何在这张图里面得到这些方格。

分析图像可以知道:

  1. 方格是白色的,亮度较高。但白色的内容不只有方格,所以在提取特征的时候,需要注意。

  2. 方格比较规整,都是方形,面积相似。

  3. 方格与方格相连,所在的区域在整个图像的中心位置。

以上就是分析图像得到的信息。这些信息就是方格的特征,我们通过特征进行筛选,从而得到所有的方格。

如何判断方格中是否存在芯片

此时我们的兴趣点就在每个方格中,所以分析每个方格,我们可以得出一下结论:

  1. 芯片面积大小都差不多。

  2. 因为光照不均匀,导致有些地方的芯片亮度较高,有些亮度比较低,这可能是我们识别芯片过程中的难点。

  3. 芯片都是矩形。

  4. 有些芯片跟白色方格线比较近,可能会给我们识别芯片带来干扰。

  5. 芯片颜色灰度跟方格中的背景色不一致。

  6. 如果方格中没有芯片,那么方格中没有上述特征。

以上是特征分析,和解决问题的思路,接下来是编程的套路。

视觉分析的编程套路一般如下几个步骤:

  1. 打开图片(OpenImage)
  2. 将图片分解成3通道图片,或是转成灰度图(GrayImage)。
  3. 二值化或动态二值化(Region)。
  4. 联通区域。
  5. 特征筛选。
  6. 如果区域有干扰,一般会进行一下操作:
    1. 腐蚀
    2. 膨胀
    3. 形状转换
    4. 以上步骤重复,或组合重复。
  7. 根据需要,还可以合并区域,并重复4-6,从而达到目的。
  8. 输出区域并标注。

实则还有其他的处理方式,比如我们需要的区域特征不明显,不需要的区域特征很明显,此时,我们可以获取不需要的区域,然后使用相减的方式得到需要的区域。(这个会在实际的使用中讲到)

接下来进行答疑

我在学习的过程中,产生了很多疑问,直到我反复编程理解后才明白为什么要这么做。在这里,我会先给出答案。

Q:为什么需要将图片分解成3通道图片,或是灰度图?

A:我的理解是,因为如果不分解,图片是RGB三通道图片,那么程序就不知道对哪个通道进行操作。将图片转换为灰度图或是单通道后,我们才能根据图片的明暗,也就是灰度,进行特征提取。

Q:什么是二值化?

A:二值化通俗的讲就是通过两个灰度值来分割出感兴趣的区域。比如,我需要的区域很亮,我查看特征后发现,这个区域的亮度范围在 210-255之间。此时我就可以通过 threshold 算子,如: threshold(Image, Region, 210, 255) 来得到我们感兴趣的区域 Region。这里 Image是输入参数,210是控制参数,255是控制参数,Region是输出参数。

Q:什么是联通区域?

A:联通区域实际上是一个算子 connection,是这样调用的:connection (Region, ConnectedRegions) ,实际上我们通过二值化得到的区域不一定就完全是我们需要的内容,可能会存在干扰。也就是说,会有很多个区域存在,但这些区域在没有执行 connection之前是一个整体,我们只有在对他进行联通之后,才会被分割成多个对象。此时,我们就可以通过,面积,长宽,矩形相似度等特征进行进一步筛选。总的说回来,connection这个算子虽然说是联通区域,但实际上是将区域分割成多个部分。

Q:什么是特征筛选?

A:特征筛选是通过面积,长宽,矩形相似度,灰度值等条件,将我们需要的内容筛选出来。

Q:什么是腐蚀?

A:腐蚀的前提是我们要的比实际的结果要小,所以需要对目标区域进行腐蚀,让它变小。

Q:什么是膨胀?

A:膨胀跟腐蚀正好相反,因为我们要的比较大,但目标区域比较小,所以我们需要让它变大。

Q:什么是形状转换?

A:将目标区域转化为特定的形状,比如得到的区域是一个不规则的矩形,我们可以作外接矩形或是外接圆,让它更符合实际结果。

halcon视觉入门扫盲篇的更多相关文章

  1. halcon视觉入门钢珠识别

    halcon视觉入门钢珠识别 经过入门篇,我们有了基础的视觉识别知识.现在加以应用. 有如下图片: 我们需要识别图片中比较明亮的中间区域,有黑色的钢珠,我们需要知道他的位置和面积. 分析如何识别 编写 ...

  2. Halcon视觉入门芯片识别

    Halcon视觉入门芯片识别 需求 有如下图的一个摆盘,摆盘的方格中摆放芯片,一个格子中只放一个,我们需要知道每个方格中是否有芯片去指导我们将芯片放到空的方格中. 分析 通过图片分析得出 我们感兴趣的 ...

  3. java学习——入门扫盲篇

    概要 近期这几天開始进入java的学习,接触到了好多不是非常了解的概念,像JDK.JRE.JVM.GC等等这些,放到这里来进行下扫盲. java java是一种面向对象程序设计语言和java平台的总称 ...

  4. Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇

    Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Internet与中国 Internet最早来源于美 ...

  5. 《IM开发新手入门一篇就够:从零开发移动端IM》

        登录 立即注册 TCP/IP详解 资讯 动态 社区 技术精选 首页   即时通讯网›专项技术区›IM开发新手入门一篇就够:从零开发移动端IM   帖子 打赏 分享 发表评论162     想开 ...

  6. 使用Python+OpenCV进行图像处理(二)| 视觉入门

    [前言]图像预处理对于整个图像处理任务来讲特别重要.如果我们没有进行恰当的预处理,无论我们有多么好的数据也很难得到理想的结果. 本篇是视觉入门系列教程的第二篇.整个视觉入门系列内容如下: 理解颜色模型 ...

  7. 转摘 MySQL扫盲篇

    一下文章摘自:http://www.jellythink.com/archives/636 MySQL扫盲篇 2014-09-15 分类:MySQL / 数据库 阅读(1412) 评论(1)  为什么 ...

  8. Asp.Net MVC2.0 Url 路由入门---实例篇

    本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...

  9. 分布式协调服务Zookeeper扫盲篇

    分布式协调服务Zookeeper扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 身为运维工程师对kubernetes(k8s)可能比较熟,那么etcd(go语言实现)分布式协 ...

随机推荐

  1. 51Nod 1264:线段相交(计算几何)

    51Nod 1264:线段相交 Decision 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出&q ...

  2. Chapter 15 Outcome Regression and Propensity Scores

    目录 15.1 Outcome regression 15.2 Propensity scores 15.3 Propensity stratification and standardization ...

  3. Browser Events 常用浏览器事件

    事件 说明 click 鼠标点击时触发此事件 dblclick 鼠标双击时触发此事件 mousedown 按下鼠标时触发此事件 mouseup 鼠标按下后松开鼠标时触发此事件 mouseover 当鼠 ...

  4. nginx配置指定域名访问,nginx禁止ip访问,配置空主机头 syscal

    1.大家有过这方面的困扰,就是自己的网站给其他人恶意域名解析到自己的服务器ip上. 特别不爽,那大家可以用用空主机头的方法. 先给大家看下我的nginx.conf配置 http { log_forma ...

  5. 论文翻译:2021_ICASSP 2021 ACOUSTIC ECHO CANCELLATION CHALLENGE: INTEGRATED ADAPTIVE ECHO CANCELLATION WITH TIME ALIGNMENT AND DEEP LEARNING-BASED RESIDUAL ECHO PLUS NOISE SUPPRESSION

    论文地址:https://ieeexplore.ieee.org/abstract/document/9414462 ICASSP 2021声学回声消除挑战:结合时间对准的自适应回声消除和基于深度学习 ...

  6. Vue下路由History mode 出现404,无法正常刷新

    在History mode下,如果直接通过地址栏访问路径,那么会出现404错误,这是因为这是单页应用(废话)-其实是因为调用了history.pushState API 所以所有的跳转之类的操作都是通 ...

  7. 主流浏览器内核、css权重

    主流浏览器及其内核: IE:trident Firefox:Gecko Google Chrome:webkit/blink Safari:webkit Opera:presto css权重 优先级大 ...

  8. 【Java常用类】BigDecimal

    BigDecimal 一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中, 要求数字精度比较高,故用到java.math.BigDecimal类. BigDecimal类支 ...

  9. 计算机视觉--CV技术指南文章汇总

    前言  本文汇总了过去本公众号原创的.国外博客翻译的.从其它公众号转载的.从知乎转载的等一些比较重要的文章,并按照论文分享.技术总结三个方面进行了一个简单分类.点击每篇文章标题可阅读详细内容 欢迎关注 ...

  10. CTF-sql-sql约束注入

    create table user( id int not null auto_increment, username varchar(30) not null, password varchar(3 ...