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. ZOJ 3960:What Kind of Friends Are You?

    What Kind of Friends Are You? Time Limit: 1 Second Memory Limit: 65536 KB Japari Park is a large zoo ...

  2. 第三十四个知识点:描述攻击离散对数问题的baby-step/Giant-step方法

    第三十四个知识点:描述攻击离散对数问题的baby-step/Giant-step方法 Baby-step/Giant-step是Dnaiel Shanks为解决DLP问题开发的算法.DLP问题已经是许 ...

  3. 第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法

    第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法 原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-45-de ...

  4. CS5211替代LT7211 DP转LVDS芯片方案 替代龙迅LT7211方案

    LT7211是一种用于虚拟现实/显示应用的高性能C/DP1.2至LVDS芯片方案.LT7211支持DP1.2输入,LT7211可以配置为1.2.4车道,还支持车道交换功能.自适应均衡使其适用于长电缆应 ...

  5. 市场上十块钱买一个随身WiFi使用技术手段,插卡流量不限速不限量?

    全部章节 >>>> 文章目录 一.前言 二.进入安卓界面 1.进入网页控制台 2.先开启adb 3.CMD连接设备 4.对界面进行控制 三.刷入clnc脚本实现免流 1.ADB ...

  6. 使用 Eclipse 可视化插件 windowbuilder 进行Java GUI开发(插件安装的两种方法)

    对于Java GUI开发 其实最方便的方法是用插件制作,当然先了解完代码原理是最好的. eclispe安装windowbuilder有两种方式,一种是离线安装,一种是在线安装. 一.第一种在线安装: ...

  7. 【】URL中的文本IPv6地址的格式RFC2732

    RFC2732规范中URL中的文本IPv6地址的格式, 截取其中重要部分原文如下: RFC 2732 Format for Literal IPv6 Addresses in URL's Decemb ...

  8. MySQL支持IPv6

    开启和验证MySQL支持IPv6的方法, 此处使用的MySQL版本为mysql-5.5.35-linux2.6-x86_64. 1.验证操作系统支持IPv6,此处是Linux操作系统 ping6 :: ...

  9. linux 之 误删openssl文件夹重装openssl

    背景 使用 scp.ssh 都报错 error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared objec ...

  10. linux(CentOS7) 之 ntp时间同步配置步骤

    下 载 百度搜索 ntp rpm 下载(或直接进入官网https://pkgs.org/download/ntp) 搜多ntp,选择centos7 64位下载,ntpdata 是依赖包也要下载 基 础 ...