(三)掰开了,揉碎了,说经典halcon中的那些算子(三)形态学、仿射变换和颜色识别

膨胀:只要结构元素与原区域有重合,那么中心元素就新增。

腐蚀:只有结构元素被原区域完全包含,那么中心元素才保留,否则中心元素就去掉。

开运算:减少像素,断开区域。先腐蚀,后膨胀。

闭运算:增加像素,连接区域。先膨胀,后腐蚀。

形态学结构元素,半径越大,程度越深。膨胀和腐蚀要比开闭运算程度厉害。

  图像处理流程:

  1. 采集
  2. 预处理:
    1. 中值滤波,均值滤波,高斯滤波。
    2. 频域中的高通滤波、低通滤波、高斯滤波。
    3. 动态范围gray_range_rect求最大亮度,最小亮度,让最亮的更亮,让最暗的更暗。
    4. 灰度图像形态学变换:并不改变形状,但改变亮度。gray_erosion灰度图像腐蚀相当于将图像变暗,对灰度图像膨胀,相当于让图像变亮。
    5. scale_image:图像线性变换。
    6. 反转inverse。
  3. 特征提取或形态学处理:
  4. 显示、训练、识别。

定位的两种方法:

1、Blob分析:分析像素块,受光照影响明显。(成像决定了项目的成败。)

2、模板匹配:模板角度、位置。有找mark点,有blob分析找特征的。周长等。点的坐标和角度。然后做仿射变换。

仿射变换是一种几何变换,投影变换。只对形状发生变化。变换到标准位置。

矩阵变换。平移、旋转、缩放。矩阵可以由一个函数求得。

3、深度学习定位检测:


求仿射变换的两种方式:

1、在【实例程序】中【分类】找到【几何转换】中的affine_trans_region.hdev。

第五行中draw_region,画一个区域,左键画图,右键确认。对于区域会有一个拟合椭圆,长轴中极性较强的一端作为椭圆的正轴。与水平轴的夹角作为旋转夹角。逆时针为正。

2、在【Blob分析】中找到check_blister.hdev。

通过Blob分析中shape_trans将图像凸性检测寻找外接轮廓凸性检测的椭圆实现定位,然后通过orientation_region求出角度。vector_angle_to_rigid直接求得旋转矩阵。然后通过仿射变换的矩阵affine_trans_image来旋转。


测量助手:

在Halcon中【助手】中【打开新的measure

在【输入】中可以绘制直线绘制圆弧来测量距离。可以选择标定不标定,如果有标定可以测量出实际尺寸,若未标定,测出像素距离值。

在【边缘】中:halcon中规定,由亮变暗为正边缘,由暗变亮为负边缘。在【变换】中:可以选择正边缘positive和负边缘negative。按照箭头方向【位置】中选择first和last。若将边缘组成边缘对,则两个边缘正负组合在一起。显示区域。有宽度。


遇到问题不要怕,分析问题出现的原因,想出解决问题的办法。

这个世界上只有没有发现的问题,没有解决不了的问题。最多只有没有找到解决办法的问题,而没有解决不了的问题。

技术一定要学活,改良才有吸引力。创新才有吸引力。常规问题有套路,具体问题具体分析。


如果采用RGB三通道图像处理,首先考虑转换颜色空间是否更容易处理些。在车牌中HSV对于蓝底的车牌,饱和度s测量更直接。特别是背景复杂,不好直接二值化的时候。

1、图像采集

2、车牌定位

3、旋转矫正

4、字符分割

5、识别显示


图像处理的10大基本领域划分。

1、图像处理基础:(RGB\HSV、GRAY)

2、图像灰度变换(scale_image)

3、图像增强(emphasize):增强对比度,方便后期处理。

4、图像几何变换(放射变换,极坐标变换)

5、图像分割(blob分析、边缘检测、分水岭法、区域增长法、reduce_domain)

6、图像的频域:主要应用于缺陷检测。高通、低通、带通。频段分析。

7、图像形态学:膨胀、腐蚀、开运算、闭运算。

8、图像复原:运用图像退化模型对图形复原,运动模糊。

9、运动图像:相邻两帧图像之间的分析。运动检测:差分的思想就是从此处来的。

10、图像配准:模板匹配(基于形状、灰度、相关性)、

Halcon的核心思想:Blob分析逼近思维:先选定一个区域,然后再缩小区域,然后再选定区域。受光照影响显著。工业应用上成像条件必须稳定可靠。


小技巧,通过【画图】点击【编辑颜色】就可以看到HSV和RGB对应关系。


MFC架构:

1、创建窗口类

2、注册窗口类

3、创建窗口

4、更新显示窗口

5、消息循环

软件层级:

1、UI层:

2、业务逻辑层:Halcon完成算法逻辑,配合业务完成工作。

3、数据层:


在VS中配置连接halcon

1、配置.h

2、配置lib

3、配置dll文件

4、include


reduce_domain():裁剪图像,只是划定了区域,并非实际裁剪,如果保存图像还是原图大小。


工业需求应用场景:

二维:1、识别定位;2、OCR光学字符、一维码、二维码;3、测量;4、缺陷检测;5、运动控制-手眼标定。

三维:1、双目标定;2、3维点云数据重建。


C#要求:

winform下编程:

1、相机采集、图像采集:halcon与C#变量转换

2、串口通信,网口通信

3、多线程编程。

4、访问文件。

5、界面编程。控件编程。


1、在halcon中将程序写好。算法流程

2、导成C#文件。

3、配置、让VS识别halcon,把halcon看做成dll动态资源库。

4、逻辑调用和开发。

配置:

1、【添加引用】右键工程:【依赖项】中【添加项目引用...】【浏览】【浏览(B)】

路径为:C:\Program Files\MVTec\HALCON-17.12-Progress\bin\dotnet35。根目录下:dotnet35中的halcondotnet.dll。添加确认即可。

2、【添加命名空间】在命名空间中加上:

using HalconDotNet;

### Halcon仿射变换缩放算子的使用方法 在 Halcon 中,仿射变换是一种常见的几何操作,可以实现图像或区域的旋转、缩放平移等功能。以下是关于如何使用 Halcon仿射变换缩放算子的具体明。 #### 定义初始矩阵 为了执行任何仿射变换操作,首先需要创建一个单位矩阵作为基础。这可以通过 `hom_mat2d_identity()` 函数完成[^3]: ```hdevelop * 创建单位矩阵 hom_mat2d_identity (HomMat2DIdentity) ``` 此函数返回一个标准的 2D 单位矩阵,后续所有的变换都将基于该矩阵进行叠加。 --- #### 缩放示例 对于缩放操作,`hom_mat2d_scale` 是主要使用的算子。它允许指定缩放中心以及水平方向 (`sx`) 垂直方向 (`sy`) 上的比例因子。其语法如下[^4]: ```hdevelop * 基于 HomMat2D 进行缩放 hom_mat2d_scale (HomMat2DInput, HomMat2DScale, Sx, Sy, Px, Py) ``` 其中: - `Sx`: 水平方向上的缩放比例。 - `Sy`: 垂直方向上的缩放比例。 - `(Px, Py)`:缩放中心点坐标。 例如,如果希望将图像围绕原点放大两倍,则可设置参数为 `Sx=2`, `Sy=2`, 并保持缩放中心位于原点 `(0, 0)`: ```hdevelop * 将图像沿两个轴均放大两倍 hom_mat2d_scale (HomMat2DIdentity, HomMat2DScale, 2.0, 2.0, 0, 0) ``` --- #### 结合其他变换 除了单独应用缩放外,还可以通过串联多个变换来构建复杂的仿射变换模型。例如,在缩放之后再添加一次旋转操作,可以调用 `hom_mat2d_rotate` 来扩展现有的变换矩阵: ```hdevelop * 添加旋转角度(假设顺时针旋转90度) hom_mat2d_rotate (HomMat2DScale, HomMat2DRotate, Angle, Rx, Ry) ``` 这里需要注意的是,每次新的变换都会以前一阶段的结果为基础继续修改原始矩阵。 --- #### 应用于图像或区域 最终得到完整的变换矩阵后,就可以将其应用于实际数据上。如果是处理整个图像对象,则应采用 `affine_trans_image`; 若目标是一个特定形状或者轮廓,则可以选择 `affine_trans_region` 或者类似的专用算子: ```hdevelop * 对输入图像实施仿射变换 affine_trans_image (ImageOriginal, ImageTransformed, HomMat2DRotate, 'constant', 'false') ``` 上述命令会依据给定的变换矩阵调整源图的内容并生成新版本的目标图形文件。 --- ### 总结 综上所述,Halcon 提供了一套灵活而强大的工具集支持各种类型的二维空间转换需求。从简单的尺度变化到复杂组合型动作序列设计都变得简单可行。用户只需按照既定流程依次初始化基本框架结构、逐步加入所需功能模块即可轻松达成预期效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值