基于匹配模板的术语自动翻译方法 halcon学习_模板匹配

日期:2023-03-11 12:39:36 / 人气: 1060 / 发布者:成都翻译公司

模板匹配中有基于点、基于灰度值、基于描述符、基于相关性、基于形状、基于组件的方法。基于相关性的模板匹配在创建模板时,会将模板角度转为0°;基于相关性的模板匹配ps:使用基于互相关的时候,要使用灰度图像!基于灰度值的模板匹配基于形状的模板匹配ps:创建函数第二个参数金字塔层数不要写1,不然识别起起来困难(而且应该离焦状态就找不到了)ps:学会灵活运用halcon自带例子,把它当字典用。

模板匹配有基于点、基于灰度值、基于描述符、基于相关性、基于形状和基于组件的方法。

一般流程:裁剪→创建模板→查找对象→仿射变换→显示

基于相关性的模板匹配会在创建模板时将模板角度转换为0°;

创建模板时,基于形状的模板匹配会将模板角度转为0°基于匹配模板的术语自动翻译方法,并将坐标移动到图像的左上角(0,0))。

基于相关性的模板匹配

1、 演示-模板匹配(基于相关性)-find_ncc_model_exposure

2、 Correlation适用于光照不均和明暗变化的场合(优点),但背景不宜太复杂(缺点)。

当照度变化很大时,使用良好的相关性,不要使用基于灰度的。

3、 可以通过调整参数来改变匹配效果。并且金字塔层数越​​多,搜索速度越快;反之,搜索速度越慢。

4、 相关值越接近1,越相关。

5、 实现模板匹配有两种方式:①助手②代码

6、 集合助手-创建参数→ 相对于create_ncc_model

…////Collection Assistant-Application → 相对于 find_ncc_model

ps:*大匹配数为0,表示查找所有匹配

7、 创建模板的方式可以是手绘,也可以是blob分析,然后就得拉出来了。减少域()

8、 助手方法,在图片中找到飞机(注意我用的图片,不是视频)

步:

先看一张图片-打开配对助手

创建tab-template资源:图像窗口(或使用文件或采集助手)-绘制ROI区域-基于互相关选择

应用选项卡-图片文件-加载-选择加载图片的名称-(勾选总是查找)-调整*低分

代码生成-插入代码

ps:我是来先插入图片的。如果使用摄像头,可以直接在抓图和应用的地方使用抓图助手。

ps:使用基于互相关,显示时为框架,如果基于形状,则显示为轮廓

ps:使用互相关时,使用灰度图像!!!

9、 代码方法,找到图中的平面

步:

看图→绘制ROI区域→area_center区域信息→裁剪ROI区域

创建ncc模板→找到ncc模板→仿射变换→显示

ps:基于归一化互相关(NCC)比较两幅图像的相似度是一种常见的图像处理方法。NCC算法可以有效降低光照对图像比对结果的影响。

ps:学会灵活使用复制粘贴

read_image (Image, 'C:/Users/yuan/Desktop/7.tif')
gen_rectangle2 (ROI_0, 415.916, 176.48, rad(-40.041), 19.9162, 16.9716)
area_center (ROI_0, Area, RowRef, ColumnRef)
reduce_domain (Image, ROI_0, ImageReduced)
dev_display (Image)
dev_set_draw ('margin')
create_ncc_model (ImageReduced, 'auto', rad(0), rad(360), 'auto', 'use_polarity', ModelID)
find_ncc_model (Image, ModelID, rad(0), rad(360), 0.5, 1, 0.5, 'true', 0, Row, Column, Angle, Score)
vector_angle_to_rigid (RowRef, ColumnRef, 0, Row, Column, Angle, HomMat2D)
affine_trans_region (ROI_0, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
dev_display (Image)
dev_display (RegionAffineTrans)

ps:仿射变换函数刚开始是这样打的

vector_angle_to_rigid (RowRef, ColumnRef, rad(-40.041), Row, Column, angle, HomMat2D)

affine_trans_region (ROI_0, RegionAffineTrans, HomMat2D,'nearest_neighbor')

这时候就说明模板匹配找到的区域不是有角度的,不是水平的。

这是因为在创建ncc模板的时候,ROI_0的角度自动转为0°,所以仿射变换的起始角度应该变成0。记住这种情况在获取仿射矩阵的时候,起始角度是直接只需填写0°,并为改变的角度写下角度。

vector_angle_to_rigid (RowRef, ColumnRef, 0, Row, Column, 角度, HomMat2D)

ps:另外需要注意的就是创建和查找ncc模板的功能,第一次打出来的时候

create_ncc_model (ImageReduced,'auto', 0, 0,'auto','use_polarity', ModelID)

find_ncc_model (Image, ModelID, 0, 0, 0.5, 1, 0.5,'true', 0, Row, Column, Angle, Score)

三、的四个位置是搜索的起始角度和结束角度,这里改成rad(0和rad(360),像这样。

find_ncc_model (Image, ModelID, rad(0), rad(360), 0.5, 1, 0.5,'true', 0, Row, Column, Angle , 分数)

vector_angle_to_rigid (RowRef, ColumnRef, 0, Row, Column, Angle, HomMat2D)

ps:由于仿射变换,查找ncc目标的函数第6个位置只能填1(匹配一个),否则会因为格式报错。

10、 一次代码匹配多架飞机

read_image (Image, 'C:/Users/yuan/Desktop/7.tif')
gen_rectangle2 (ROI_0, 415.916, 176.48, rad(-40.041), 19.9162, 16.9716)
area_center (ROI_0, Area, RowRef, ColumnRef)
reduce_domain (Image, ROI_0, ImageReduced)
dev_display (Image)
dev_set_draw ('margin')
create_ncc_model (ImageReduced, 'auto', rad(0), rad(360), 'auto', 'use_polarity', ModelID)
find_ncc_model (Image, ModelID, rad(0), rad(360), 0.5, 3, 0.5, 'true', 0, Row, Column, Angle, Score)
if(|Score|>0)
    for Index := 1 to 3 by 1	 
    vector_angle_to_rigid (RowRef, ColumnRef, 0, Row[Index-1], Column[Index-1], Angle[Index-1], HomMat2D)
    affine_trans_region (ROI_0, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
    dev_display (Image)
    dev_display (RegionAffineTrans)
    endfor
endif

ps:匹配了3个平面,所以行、列等值都是3个数字。

ps:|score|的值 是向量的维度!不是绝对值!

基于灰度值的模板匹配

1、 基于灰度值的目标匹配使用Mean Absolute Differences (MAD)

2、 rad() 函数将角度转换为弧度基于匹配模板的术语自动翻译方法,deg() 函数将弧度转换为角度。

3、 disp_arrow() 函数用于显示箭头。注意disp显示只是一个显示,在变量窗口是看不到数值的。

4、 rot 表示旋转搜索,mg 表示金字塔搜索。

best_match(), best_match_rot(), best_match_mg(), best_match_rot_mg()

fast_match(), fast_match_rot(), fast_match_mg(), fast_match_rot_mg()

基于形状的模板匹配

教程的前几课都是关于demo的,我们先来看看demo。

1、 对光线要求高,不适合室外自然光

2、基于形状的模板匹配创建模板时,ROI的位置自动移动到像素点(0,0)位置,角度旋转到0°。

3、 创建:

create_shape_model(), create_shape_model_xld(), create_scale_shape_model() / *后这个函数带有缩放功能

ps:如果用get_shape_model()创建模板,得到的是xld的轮廓,用于仿射变换函数中,显示的图形为轮廓。affine_trans_contour_xld() 使用这种仿射变换来显示轮廓。也可以不显示轮廓而想显示绘制的矩形框,那么affine_trans_region()函数,仿射变换之前绘制的roi区域,注意roi的行列角要填充在仿射前面矩形,而不是 (0,0,0).

ps:创建函数的第二个参数金字塔层不要写1,否则会很难识别(而且应该是失焦,找不到)

4、 查找:

find_shape_model(), find_scale_shape_model(), find_shape_models() / *后这个函数找到多个模板

5、 仿射变换:

平移和旋转:vector_angle_to_rigid()

比例:hom_mat2d_scale()

6、 显示:

dev_disp(图片)

dev_disp(RegionAffineTrans)

7、 详细了解demo,学习应用到实战项目中

ps:轮廓n。形状、轮廓

8、 演示模板匹配(形状)-align_measurements()

9、 演示模板匹配(形状)-create_average_shape_model():

①channels_to_image(Templates,MultichannelImage)

将多张图片变成多通道图片

②mean_n(MultichannelImage,ImageMean)

平均变成通道(然后用平均图像作为模板进行创建)

10、 演示-模板匹配(形状)-align_measurements()

write_shape_model(ModelID,'green-dot.shm')

将模板保存在 .shm 文件中,以备将来直接使用

检查形状模型()

检查模型轮廓

11、 演示-模板匹配(形状)-create_roi_via_vision()

dev_set_part(左上x,左上y,右下x,右下y)

这之后显示的图片都显示了划定的区域

12、 演示-模板匹配(形状)-create_shape_model_xld()

binary_threshold() //快速二值化

13、 演示-模板匹配(形状)-inspect_shampoo_label()

添加频道()

向区域添加灰度值

14、 演示-模板匹配(形状)-matching_coins()

前一个循环是创建模板,后一个循环是查找和显示

15、 演示-模板匹配(形状)-reuse_model()

write_shape_model()

存储为.sbm文件(上面是.shm文件,帮助也是shm文件,看不懂,但是这个例子中使用了.sbm文件,我试了一下,可以用),您可以保存创建的模型。

16、 demo-模板匹配(形状)-synthetic_circle

如果set_shape_model_para()函数中的第二个参数GenParamName是'timeout',这个函数的作用就是在时间过去后停止搜索。

油漆_xld(), 油漆区域()

从轮廓到图像,从区域到图像

17、 demo-模板匹配(形状)-pm_measure_board

我讲了(电路板芯片)定位+测量。通过定位电路板芯片的中心位置和角度,可以定位两排引脚,用两个矩形框来选择。

ps:对于膨胀腐蚀,二值图是面积的增减,灰度图是灰度值(亮度)的增减。

18、 demo-模板匹配(形状)-pm_multiple_models

以后做更多模板完全可以复制粘贴这个例子

inspect_shape_model() 用于检查模型的轮廓。如果您不满意,可以在创建后进行修改。使用特征直方图进行过滤。请注意,选择该功能时应将 xld 放在前面。

create_shape_model (Image, 5, rad(0), rad(360), 'auto', 'pregeneration', 'use_polarity', 30, 10, ModelID)
get_shape_model_contours (ModelCont, ModelID, 1)
select_shape_xld (ModelCont, ModelContours, 'contlength', 'and', 20, 1000)

下面的代码是为了方便直接建模,不用修改,然后进行仿射变换然后显示。

count_obj (ModelContours, NumModel)
count_obj (Models, NumModels)
concat_obj (Models, ModelContours, Models)
IndexS := [IndexS,NumModels + 1]
IndexE := [IndexE,NumModels + NumModel]
ModelIDs := [ModelIDs,ModelID]

用这张图更容易理解这段代码。(个人使用)

19、 演示-模板匹配(形状)-multiple_dxf_model

识别部分和前面的例子一样,区别在上半部分。

read_contours_xld_dxf() //这个demo的重点

本demo读取dxf文件,将轮廓转换为图像,然后创建轮廓

20、实战(实时查找瓶盖上的文字):

(基本上,写重要几乎很简单)

①:助手模式:

检测选项卡-需要点击执行,结果会显示到检测选项卡

②:编码方式:

裁剪(手绘或blob方法)→创建模板→查找识别→仿射变换→显示

在搜索函数的下一行添加一个if(|Score|> 1),防止找不到frame时出错

ps:取消勾选运行模式。连续运行时,创建模板时左上角显示的轮廓会消失。

ps:学会灵活使用halcon自己的例子,当成字典来使用。

相关阅读Relate

  • 法国签证营业执照翻译件模板 你与申根签证只有一条推送的距离
  • 江苏省增值税发票翻译模板 江苏税务局出口货物退(免)税申报管理系统软件
  • 肄业证书翻译模板 复旦大学学生学业证明文书管理细则(试行)
  • 四级英语作文模板带翻译 大学英语四级翻译模拟训练及答案
  • 社会某信用代码证翻译模板 js验证某社会信用代码,某社会信用代码 验证js,js+验证+社会信用代码证
  • 美国移民证件翻译模板 日语签证翻译聊聊身份证翻译模板
  • 翻译软件模板 人类史上*实用的的文档快速翻译指南
  • 江苏省增值税发票翻译模板 江苏出口货物退(免)税申报管理服务平台
  • 瑞士签证房产证翻译件模板 瑞士探亲签证—就读子女
  • 日语户口本翻译模板 户口本翻译价格_户口本翻译一般多少钱?
  • 基于匹配模板的术语自动翻译方法 halcon学习_模板匹配 www.chinazxzy.com/fymb/8677.html
    
    本站部分内容和图片来源于网络用户和读者投稿,不确定投稿用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的权利,请联系:chinazxzy@163.com,及时删除。
    Go To Top 回顶部
    • 扫一扫,微信在线