• 称为基于边缘方向梯度的匹配,是一种最常用也是最前沿的模板匹配算法

(一)根本思想

  • 以物体边缘的梯度相关性作为匹配标准

(二)原理

  • 提取ROI中的边缘特征,结合灰度信息创建模板,并根据模板的大小和清晰度的要求生成多层级的图像金字塔模型

  • 接着在图像金字塔层中自上而下逐层搜索模板图像,直到搜索到最底层或得到确定的匹配结果为止

(三)使用条件

  • 该方法使用边缘特征定位物体,对于很多干扰因素不敏感,如光照和图像的灰度变化,甚至可以支持局部边缘缺失、杂乱场景、噪声、失焦和轻微形变的模型

  • 更进一步说,它甚至可以支持多个模板同步进行搜索

  • 但是它不适用于旋转和缩放比较大的情况

(四)形状匹配算子

 /*1.创建形状模型:create_shape_model()2.寻找形状模型:find_shpae_model()3.释放形状模型:clear_shape_model()*/

(五)实例

1、创建ROI区域,准备模板图像用来创建模板(创建模板以后可以保存下来)

  • 标准形状:draw_rectangle1/2、draw_circle、draw_ellipse、draw_line

  • 任意形状:draw_region、draw_polygon

  • 生成标准ROI:gen_rectangle1/2、gen_circle、gen_ellipse、gen_region_line

  • 通过XLD创建AOI:gen_region_contour_xld、gen_region_polygon_xld

  • 利用area_center()找到这个ROI区域的中心

  • 通过reduce_domain()从图像中获取这个ROI区域

2、ROI修正,通过预处理改善图像质量,以便找到更合适的模板图像

  • 修正函数:erosion(减小ROI)、dilation(扩大ROI)、shape_trans(形状转换)、boundary(像素级边界)、move_region(移动区域到新位置)

  • 组合:intersection(交集)、difference(差集)、union2(两个区域的并集)

3、直接创建模板

 create_shape_model(Template , // 模板图像NumLevels, // 金字塔层数AngleStart, // 起始角度AngleExtent, // 角度范围AngleStep, // 角度步长Optimization, // 设置模板优化和模板创建方法Metric, // 匹配方法设置Contrast, // 模板中前景与背景的对比度MinContrast, // 被查找图片的最小对比度ModelID) // 模板ID// 可缩放比例create_scaled_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep, Optimization, Metric, Contrast, MinContrast : ModelID)create_scaled_shape_model (ImageReduced, 5, rad(-45), rad(90), 0, 0.8, 1.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID)
  • 通过determine_shape_model_params算子得到金字塔层数,再通过inspect_shape_model算子测试对比度的数值是否合理

  • 创建好模板以后,需要监视模板,用inspect_shape_model算子来完成,用来检测参数的适用性与找到合适的参数

  • 该算子执行后将会把预设参数的金字塔分级图像显示出来,可以根据需要判断参数选取的是否合理

  inspect_shape_model(Image : // 输入参数,输入图像ModelImages, // 输出参数,输出图像基于金字塔的影像ModelRegions : // 输出参数,输出模型区域NumLevels, // 输入参数,使用的金字塔层数。默认4,范围1~10Contrast : ) // 输入参数,设置对比度。默认30,参考10,20,30,40,60,80,100,120,140,160

(1)NumLevels

  • 最开始是第一层,逐层+1

  • 金字塔越小,细节信息越多,定位的更准确,但消耗的时间也更多;金字塔越大,找到匹配使用的时间就越小

  • 另外必须保证最高层的图像具有足够的信息(至少四个点)。如果金字塔过大,模板不容易识别出来,这是需要将find_shape_model函数中MinScore和Greediness参数设置的低一些(注意这里的解决办法!!!)

  • 如果最高层金字塔的消息太少,算法内部会自动减少金字塔层数

  • 如果最底层金字塔的信息太少,函数就会报错

  • 如果设为auto,算法会自动计算金字塔的层数,我们可以通过get_shape_model_params函数查看金字塔的层数

 // 根据创建的模型ID来查看形状模型的参数get_shape_model_params( : : ModelID : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep, Metric, MinContrast)// ScaleMin, ScaleMax, ScaleStep是模型的最小比例、最大比例、缩放步长

(2)Contrast

  • 对比度是用来测量目标与背景之间和目标不同部分之间局部的灰度值差异

  • 1个元素时:128,对比度,直接提取边缘

  • 2个元素时:[100, 128],表示使用滞后阈值的算法来进行分割提取边缘

  • 3个元素时:[100, 128, 10],前两个参数同2,最后一个参数表示所提取边缘的最小长度为10

  • 对比度阈值可以使用determine_shape_model_params函数自动确定,也可以在调用create_shape_model之前使用inspect_shape_mode函数检查效果

 determine_shape_model_params(Template, // 模板 ‘auto’, // 金字塔层数0, // 起始角度rad(360), // 角度范围0.9, // 缩小范围1.1, // 放大范围‘auto’, // 减少像素的方法‘use_polarity’, // 极性‘auto’, // 对比度‘auto’, // 最小对比度'all', // 需要自动确定的参数ParameterName, // Name of valuesParameterValue) // Values

(3)AngleStart、AngleExtent、AngleStep

  • AngleStep的选择是基于目标的大小的,如果模板图像太小就不能产生许多不同离散角度的图像,因此对于较小的模板图像AngleStep应该设置的比较大

  • 如果AngleExtent不是AngleStep的整数倍, 将会相应的修改AngleStep

  • AngleStep

    • 选择标准:模板越大,角度步长越小;模板越小,角度步长越大

    • 速度和内存:步长越小,占用内存越多,定位速度越慢

    • 如果没有特殊要求,可选"auto"让系统做最佳选择,会基于模板的大小自动定义一个合适的角度步长

(4)Optimization

  • 设置模板优化和模板创建方法

  • 一些模板包含了太多像素点,这导致模板过大、增加执行时间、增加内存需求

  • 参数Optimization是用来减少这些点,相同条件下,运行时间依次减少

    • none,不减少像素

    • point_reduction_low,大约一半点

    • point_reduction_medium,大约1/3

    • point_reduction_high,大约1/4

  • 对于特别大的模板图像,将参数Optimization设置为不同于’none’的其他数值是非常有用的;对于比较小的模型,减少模型点数并不能提高搜索速度

  • 如果模型点数变少了,必须在find_shape_model函数中将参数Greediness设为一个比较小的值 比如:0.7、0.8

  • 如果Optimization设置为’auto’, create_shape_model自动确定模型的点数

  • 除了减少像素,该参数也可以控制模板的创建方式,来选择内存优先还是速度优先

  • 第二个值可选下面两个

    • 'pregeneration',模板预先创建,牺牲内存来换取查找速度

    • 'no_pregeneration',在查找时才创建必须数据,占用内存少

  • 默认的是系统中的设置

     set_system('pregenerate_shape_models','true'/'false')
  • 如果没有设置,默认为

     set_system('pregenerate_shape_models','false')

(5)Metric

  • 在图像中匹配模板的条件

    • use_polarity:图像中的目标和模型具有一样的对比度(前景亮,背景暗,那么仅仅那些比背景亮的目标可以找到)

    • ignore_global_polarity:在两者对比度完全相反时也能找到目标(如果目标是比背景暗的也能将目标找到)

    • ignore_local_polarity :即使局部对比度改变也能找到模型(当目标包含一部分中等灰度,并且其中部分比较亮部分比较暗时,这种模式是非常有用的)

  • 由于这种模式下find_shape_model函数的运行时间显著增加,最好的方法是使用create_shape_model创建几个反映目标可能的对比度变化的模型,同时使用find_shape_models去匹配他们

(6)MinContrast

  • 将模板从图像噪声中分离出来,如果灰度值的波动范围是10,则MinContrast = 10

  • 模板图像边缘不一定都是有益的,噪声、纹理会造成有害边缘,有害边缘会导致定位不准或找错、错误的分值、稍微增大查找时间

  • 参数MinContrast是在查找模板的时候,来减少“有害”边缘的

  • 该值可通过estimate_noise函数、inspect_shape_model函数、助手判断得到

(7)注意事项:通过Dxf(格式交换文件)文件创建模板

  • 通过像素轮廓可以直接创建模板

create_scaled_shape_model_xld
create_aniso_shape_model_xld

4、需要获得这个模板的轮廓,用来之后的匹配

 get_shape_model_contours(ModelContours, // 输出形状模型的轮廓表示ModelID, // 模型句柄Level) // 金字塔层数

5、模板匹配,得到位置、角度、缩放值、分值信息

  • 在图像中找出最佳匹配的模板,返回一个模板实例的长、宽、旋转角度

 find_shape_model(Image, // 搜索图像ModelID, // 模板句柄AngleStart, // 搜索时的起始角度AngleExtent, // 搜索时的角度范围,必须与创建模板时的有交集MinScore, // 最小匹配值,输出的匹配的得分Score大于该值NumMatches, // 定义要输出的匹配的最大个数MaxOverlap, // 当找到的目标存在重叠时,且重叠大于该值时选择一个好的输出SubPixel, // 计算精度的设置,五种模式,多选2,3NumLevels, // 搜索时金字塔的层数Greediness, // 贪婪度,搜索启发式,一般都设为0.9,越高速度快,容易出现找不到的情况Row, Column, Angle, Score) // 输出匹配位置的行和列坐标、角度、得分(模板在搜索图像中可见比例的近似测量,如果模板的一半被遮挡,该值就不能超过0.5)
  • 参数影响到匹配的速度与精度

(1)MinScore

  • 模板匹配时至少有个什么样的质量系数才算是在图像中找到模板

  • MinScore设置的越大,越相似,搜索的就越快

  • 如果模板在图像中没有被遮挡,MinScore可以设置为0.8这么高甚至0.9

(2)NumMatches

  • 在图像上找到模板的最大的个数

  • 如果匹配时的质量系数大于MinScore的目标个数多于NumMatches,仅仅返回质量系数最好的NumMatches个目标位置。如果找的匹配目标不足NumMatches,那么就只返回找到的这几个

  • 参数MinScore优于NumMatche

(3)Maximum Overlap

  • 参数MaxOverlap是0到1之间的,定义了找到的两个目标区域最多重叠的系数,以便于把他们作为两个不同的目标区域分别返回

  • 如果找到的两个目标区域彼此重叠并且大于MaxOverlap,仅仅返回效果最好的一个

  • 重叠的计算方法是基于找到的目标区域的任意方向的最小外接矩形(看smallest_rectangle2)。如果MaxOverlap=0, 找到的目标区域不能存在重叠,如果MaxOverlap=1,所有找到的目标区域都要返回

(4)SubPixel

  • 确定找到的目标是否使用亚像素精度提取,一般设置为interpolation

  • 精度控制模型

    • none:不使用亚像素,最大误差为半个像素

    • interpolation:位置和角度都是亚像素精度的。在这种模式下模型的位置是在质量系数函数中插入的,这种模式几乎不花费计算时间,并且能达到足够高的精度

    • least_squares、least_squares_high、least_squares_very_high:最小二乘法亚像素精度

  • 不同模式对运行时间的影响:前两者时间相同,最小二乘法时间比较长

  • 该参数可影响以下结果:Position、Angle、Scaling

(5)NumLevels

  • 如果NumLevels=0,使用创建模板时金字塔的层数

  • NumLevels还可以包含第二个参数,这个参数定义了找到匹配模板的最低金字塔层数

  • 如NumLevels=[4,2]表示匹配在第四层金字塔开始,在第二层金字塔找到匹配(最低的设为1)

  • 可以使用这种方法降低匹配的运行时间,但是这种模式下位置精度是比正常模式下低的,所谓正常模式是在金字塔最底层匹配

  • 因此如果需要较高的精度,应该设置SubPixel至少为’least_squares’。如果金字塔最底层设置的过大,可能不会达到期望的精度,或者找到一个不正确的匹配区域。这是因为在较高层的金字塔上模板是不够具体的,不足以找到可靠的模板最佳匹配。在这种情况下最低金字塔层数应设为最小值

(6)Greediness

  • 该参数是用来做定位加速的,很大程度上影响着搜索速度

  • 若为0,则为启发式搜索;若为1,则为不安全搜索

  • 值越小,速度越慢;值越高,找丢目标的可能越大

  • 建议取值:0.7~0.9

6、模板匹配之后进行转换(未完善)

(1)vector_angle_to_rigid()

  • 从一个点和角度计算一个刚体仿射变换

(2)affine_trans_contour_xld()

 for i:=0 to |Score|-1 by 1// 得到对应匹配目标的旋转矩阵vector_angle_to_rigid (0, 0, 0, Row[i], Column[i], Angle[i], HomMat2DRotate)// 在旋转矩阵的基础上添加缩放量,生成新的矩阵hom_mat2d_scale (HomMat2DRotate, Scale[i], Scale[i], Row[i],Column[i], HomMat2DScale)// 矩阵变换(xld基础上)affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DScale)// xld转换成regiongen_region_contour_xld (ContoursAffineTrans, Region, 'filled')// 对区域,生成最小外接矩形smallest_rectangle1 (Region, Row1, Column1, Row2, Column2)// 使用绿色矩形框,框选匹配结果dev_set_color ('green')disp_rectangle1 (WindowHandle, Row1[0], Column1[0], Row2[0], Column2[0])// 使用红色勾画匹配结果轮廓dev_set_color ('red')dev_display (ContoursAffineTrans)// 显示各匹配结果提示语disp_message (WindowHandle, '第'+(i+1)+'个', 'window', Row1[0]-30, (Column1[0]+Column2[0])/2-10, 'green', 'false')endfor

7、如何加快搜索匹配?

  • 只要匹配成功,就尽可能的增加参数MinScore的数值

  • 增加Greediness的值直到匹配失败,同时在需要时减小MinScore的值

  • 在创建图像时,增加金字塔层数

  • 限定允许的旋转范围与大小范围,在调用find_shape_model()时调整相应的参数

  • 尽量限定搜索ROI区域的值

8、实例

(1)网格线

 // 关闭程序计数器,变量更新,图像窗口更新dev_update_off ()dev_close_window ()​// 读取模版图像read_image (Image, 'wafer/wafer_mirror_dies_01')dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)set_display_font (WindowHandle, 16, 'mono', 'true', 'false')// 定义输出区域,轮廓的线宽dev_set_line_width (3)dev_display (Image)​// 这个过程会在屏幕右下角显示“Click 'Run' to continue”。disp_continue_message (WindowHandle, 'black', 'true')stop()​// 创建剪切矩形ROI作为模板图像gen_rectangle1 (Rectangle, 362, 212, 414, 262)reduce_domain (Image, Rectangle, ImageReduced)​// 根据金字塔数和对比度获取输入图像的金字塔图像、金字塔区域inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 4, 30)// 显示金字塔各层级的图像,以检查层数的合理性dev_display(ModelRegions)area_center(ModelRegions, AreaModelRegions, RowModelRegions, ColumnModelRegions)count_obj(ModelRegions, Number)// 确定金字塔的层级for i := 1 to Number by 1if(AreaModelRegions[i-1]>=10)NumLevels := iendifendfor​// 创建形状模版create_shape_model (ImageReduced, NumLevels, rad(0), rad(1), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)// 获得模型轮廓,中心点在原点位置get_shape_model_contours (ModelContours, ModelID, 1)​// 开始在搜索图像中搜索模版for Index := 1 to 4 by 1read_image (Image, 'wafer/wafer_mirror_dies_' + Index$'02')// 计算当前过去的时间,单位是秒count_seconds (S1)// 使用匹配算子进行形状模板匹配find_shape_model (Image, ModelID, rad(0), rad(1), 0.5, 0, 0.0, 'least_squares', 2, 0.5, Row, Column, Angle, Score)// 计算当前过去的时间,单位是秒count_seconds (S2)Runtime := (S2 - S1) * 1000​// 生成十字对象gen_cross_contour_xld (Cross, Row, Column, 6, rad(45))// 显示匹配结果,将匹配得到的实例以形状轮廓的形式绘制出来dev_display_shape_matching_results (ModelID, 'lime green', Row, Column, Angle, 1, 1, 0)// 设置输出对象的颜色dev_set_color ('orange')// 显示图像dev_display (Image)// 显示十字dev_display (Cross)stop ()​endforget_system ('border_shape_models', model)//  匹配结束,释放模板资源clear_shape_model (ModelID)
  • 边界处理

    • set_system('border_shape_models','false')

    • 模板必须在ROI内

    • 靠近边缘部分会被裁减

    • set_system('border_shape_models','true')

    • 模板可以部分在ROI外面

    • 注意:分值会降低

(2)环保标志

 dev_update_off ()dev_close_window ()​// 定位模板// 读取图像read_image (Image, 'E:/Halcon/算法/11模板匹配/基于形状的模板匹配/一个环保标志.png')// 获取图像的宽高get_image_size (Image, Width, Height)// 以合适的尺寸打开图像dev_open_window_fit_size (0, 0, Width, Height, -1, -1, WindowHandle)//显示图像、字体、填充方式、颜色、字宽dev_display (Image)set_display_font (WindowHandle, 16, 'mono', 'true', 'false')dev_set_draw ('margin')dev_set_color ('red')dev_set_line_width (3)​// 定义数组Message := '这个实例演示如何创建一个模板'Message[1] := '形状匹配模板建立与保存'Message[2] := '模板匹配的使用'// 显示数组话语disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')// 继续提示语显示disp_continue_message (WindowHandle, 'black', 'true')// 执行断点处stop()​// 预处理获得优质的模板图像threshold (Image, Regions, 0, 122)dev_set_colored(12)connection (Regions, ConnectedRegions)fill_up (ConnectedRegions, RegionFillUp)select_shape (RegionFillUp, SelectedRegions, 'area', 'and', 14845, 57911.9)dilation_circle (SelectedRegions, RegionDilation, 3.5)reduce_domain (Image, RegionDilation, ImageReduced)​// 生成模板determine_shape_model_params(ImageReduced, 'auto', -0.39, 0.79, 0.9, 1.1, 'auto', 'use_polarity', 'auto', 'auto', 'all', ParameterName, ParameterValue)// 监视模板inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 5, 40)​// 创建形状模板// 使用用图像创建带有缩放的匹配模板create_scaled_shape_model (ImageReduced, 5, rad(-45), rad(90), 0, 0.8, 1.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID)// 保存模板write_shape_model (ModelID, 'E:/Halcon/算法/11模板匹配/基于形状的模板匹配/shapemodel_huanbao.shm')// 清除模板clear_shape_model (ModelID)// 模板匹配// 获取检测目标图像read_image (Image1, 'E:/Halcon/算法/11模板匹配/基于形状的模板匹配/三个环保标志.png')// 提示语定义与显示Message := '形状匹配步骤开始'disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')// 读取形状模板read_shape_model ('E:/Halcon/算法/11模板匹配/基于形状的模板匹配/shapemodel_huanbao.shm', ModelID1)// 模板匹配,后面的几个参数是匹配图像的位置状态等参数find_scaled_shape_model (Image1, ModelID1, rad(-45), rad(90), 0.8, 1.0, 0.5, 0, 0.5, 'least_squares', 5, 0.8, Row, Column, Angle, Scale, Score)// 返回一个轮廓模型的轮廓表示get_shape_model_contours (ModelContours, ModelID1, 1)​dev_display (Image1)// 循环for i:=0 to |Score|-1 by 1// 得到对应匹配目标的旋转矩阵vector_angle_to_rigid (0, 0, 0, Row[i], Column[i], Angle[i], HomMat2DRotate)// 在旋转矩阵的基础上添加缩放量,生成新的矩阵hom_mat2d_scale (HomMat2DRotate, Scale[i], Scale[i], Row[i],Column[i], HomMat2DScale)// 矩阵变换(xld基础上)affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DScale)// xld转换成regiongen_region_contour_xld (ContoursAffineTrans, Region, 'filled')// 对区域,生成最小外接矩形smallest_rectangle1 (Region, Row1, Column1, Row2, Column2)// 使用绿色矩形框,框选匹配结果dev_set_color ('green')disp_rectangle1 (WindowHandle, Row1[0], Column1[0], Row2[0], Column2[0])// 使用红色勾画匹配结果轮廓dev_set_color ('red')dev_display (ContoursAffineTrans)// 显示各匹配结果提示语disp_message (WindowHandle, '第'+(i+1)+'个', 'window', Row1[0]-30, (Column1[0]+Column2[0])/2-10, 'green', 'false')endfor​// 提示语定义与显示Message := '形状匹配结果如下:'disp_message (WindowHandle, Message, 'window', 12, 12, 'green', 'false')// 将窗口内容写入图像对象dump_window_image (Image2, WindowHandle)write_image (Image2, 'png', 0, 'E:/Halcon/算法/11模板匹配/基于形状的模板匹配/环保标志结果.bmp.png')

(3)晨光

 dev_update_off()dev_close_window()// 读取图像read_image(Image, 'E:/Halcon/算法/11模板匹配/基于形状的模板匹配/晨光模板图像.jpg')get_image_size(Image, Width, Height)rgb1_to_gray(Image, GrayImage)dev_open_window_fit_image(GrayImage, 0, 0, -1, -1, WindowHandle)dev_display(GrayImage)​// 预处理binary_threshold(GrayImage, Region, 'max_separability', 'dark', UsedThreshold)connection(Region, ConnectedRegions)fill_up(ConnectedRegions, RegionFillUp)select_shape(RegionFillUp, SelectedRegions, 'area', 'and', 22500, 23000)dilation_circle(SelectedRegions, RegionDilation, 3.5)reduce_domain(GrayImage, RegionDilation, ImageReduced)​// 获取金字塔层数,图像监视determine_shape_model_params(ImageReduced, 'auto', -0.39, 0.79, 0.9, 1.1, 'auto', 'use_polarity', 'auto', 'auto', 'all', ParameterName, ParameterValue)inspect_shape_model(ImageReduced, ModelImages, ModelRegions, 5, 20)​dev_set_draw ('margin')dev_set_line_width(3)​// 创建模板create_shape_model(ImageReduced, 'auto', rad(0), rad(1), 'auto', 'auto', 'use_polarity', 20, 3, ModelID)write_shape_model(ModelID, 'E:/Halcon/算法/11模板匹配/基于形状的模板匹配/shapemodel_chenguang.shm')clear_shape_model(ModelID)​// 在目标图像中寻找模板图像read_image(ImageTest, 'E:/Halcon/算法/11模板匹配/基于形状的模板匹配/晨光测试图像.jpg')message:= '查找模板'disp_message(WindowHandle, message, 'window', 16, 16, 'black', 'true')read_shape_model('E:/Halcon/算法/11模板匹配/基于形状的模板匹配/shapemodel_chenguang.shm',ModelID1)find_shape_model(ImageTest, ModelID1, rad(0), rad(1), 0.5, 0, 0, 'least_squares', 5, 0.8, Row, Column, Angle, Score)get_shape_model_contours(ModelContours, ModelID1, 1)dev_display(ImageTest)// 显示匹配结果,将匹配得到的实例以形状轮廓的形式绘制出来dev_display_shape_matching_results(ModelID1, 'red', Row, Column, Angle, 1, 1, 0)// 匹配结束,释放模板资源clear_shape_model (ModelID1)

基于形状的模板匹配(Shape-Based)相关推荐

  1. OpenCV基于形状的模板匹配

    OpenCV基于形状的模板匹配 引言 基于形状的匹配算法 具体代码 KcgMatch.h KcgMatch.cpp main.cpp 匹配的结果 引言 在OpenCV中有个用于模板匹配的基本函数mat ...

  2. Qt与halcon联合开发实现基于形状的模板匹配

    目录 前言 一.基于形状的模板匹配是什么? 二.具体实现 1.算子介绍 2.关键代码实现 总结 前言 第一次在CSDN写博客,准备写一个简单的形状匹配算子的用法及实现的介绍. 一.基于形状的模板匹配是 ...

  3. OpenCV实现基于形状的模板匹配(附源码)

    效果预览 OpenCV实现基于形状的模板匹配(多角度+不同亮度) 实例演示一: 实例演示二: 实例演示三: 实例演示四: 实例演示五: 实例演示六ÿ

  4. 基于形状的模板匹配(用于字符识别)研究

    一.各模板匹配方法对比 1.基于灰度的匹配一般被称为模版匹配,直接以灰度进行匹配效果不好,对光照很敏感,所以一般会以灰度归一化互相关(NCC)作为匹配依据,增强光照变化下的鲁棒性,为了降低计算量,多采 ...

  5. halcon基于形状的模板匹配第三例:rectify_result.hdev

    这个例子其实是在比较两种ROI"还原"的方式: 模板匹配后,获得仿射变换矩阵T,则对于ROI的分析有两种: 1.全局的,将T.inv()*Img_target得到目标图片全局还原后 ...

  6. HALCON联合C#检测表面缺陷——基于形状的模板匹配设置流程

    接上一篇文章,上两篇文章我们把匹配助手中生成的代码导出到C#文件,导出的过程如果有不清楚的可以给我留言. 上一节我们也说过,代码是分为两个部分的,前一部分是设置模板,后一部分是检测流程. 这里多说两句 ...

  7. 【Halcon】基于形状的模板匹配的定位.md

    看到一句非常入心的话:天雨大不润无根之草,道法宽只度有缘之人! 说的就是这个理,所有的因果都要追至事物的本质.从古至今,从国家到个人,如果只是华而不实.外强中干,就算机会.机遇在你身旁,你能做的也只能 ...

  8. 基于opencv的模板匹配详解

    1.什么是模板匹配 在OpenCV教程中这样解释模板匹配: 模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术.这里说的模板是我们已知的小图像,模板匹配就是在一副大图像中搜寻目标. ...

  9. Halcon 第五章『模板匹配Matching』◆第5节:基于组件的模板匹配|Component-Based

    一.介绍 基于组件的模板匹配是基于形状匹配的一种应用,也可以说是基于形状的模板匹配的加强版,加强的地方在于,这种方法允许模板中包含多个目标,并且允许目标之间存在相对运动(位移和旋转).区别在于基于形状 ...

  10. HALCON基于形变的模板匹配实现

    基于形变的模板匹配 先看匹配结果: 下面是HALCON的代码,用匹配助手生成的,现在得到的就是模板上61个点的坐标,还有仿射矩阵,利用仿射矩阵可以算出61个点匹配上的像素坐标. * * Matchin ...

最新文章

  1. R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(改变分组的次序)实战(dot plot)
  2. fzu 2139 久违的月赛之二
  3. k8s kustomize 简明教程:安装 kustomization.yml常用字段解读
  4. 庖丁解牛-----Live555源码彻底解密(根据MediaServer讲解Rtsp的建立过程)
  5. jdbc连接mysql8的一些坑_mysql8.0 jdbc连接注意事项
  6. 2022中国素质教育行业报告
  7. OpenJudge NOI 1.7 26:字符串最大跨距
  8. UE4 间接光照缓存
  9. ubuntu下django的项目相关软件安装测试
  10. 重庆Uber优步司机奖励政策
  11. docker 常用指令
  12. JAVA汽车4s店管理系统前后台
  13. 【学习笔记】Arduino uno r3 控制led灯闪烁
  14. 小米蓝牙键盘怎么连接_【米物蓝牙双模键盘使用总结】连接|操作|按键_摘要频道_什么值得买...
  15. 第二十九章、containers容器类部件QFrame框架部件详解
  16. lifeifei翻译目录
  17. 一加 Ace 竞速版什么时候发布 一加 Ace 竞速版配置怎么样
  18. 【阿里云IoT+YF3300】2.阿里云IoT云端通信Alink协议介绍
  19. history.pushState()
  20. 系统的学习网络编程,这篇就够了!(来收藏夹里吃灰)

热门文章

  1. python绘制堆叠柱状图_Python绘制堆叠柱状图的实例
  2. 网页的排版布局和原则
  3. C语言检索单词程序,用C语言编写的英文单词管理小程序
  4. 2013\National _C_C++_A\3.埃及分数
  5. 报错解决-Ubuntu下Typora+Gitee图床上传失败
  6. mgg格式怎么转换为mp3?一键批量mgg格式转mp3
  7. Gaussian03自带nbo3.1程序输入格式的BUG
  8. Vue3从零开始直接上手(2023全新详解)
  9. html字体分行设置,Css 文字换行的几种样式!
  10. 【转载】最新:国家级《工业互联网综合标准化体系建设指南》发布(附全文)