基于HALCON的模板匹配方法总结
- 格式:doc
- 大小:74.50 KB
- 文档页数:3
halcon模板匹配* 在一个图片中获取ROI并在此图片中匹配dev_close_window ()dev_open_window (0, 0, 600, 600, 'black', WindowHandle)* 窗口语句read_image(Image,'L:/Halcon test/mk2.jpg')*read_image(Image,'L:/Halcon test/mk3.jpg')*read_image(Image,'L:/Halcon test/mk4.jpg')* 这里有4张图片,每一张都说明一个小问题,附图分析。
gen_rectangle1 (ROI1, 57.8333, 49.5, 181.167, 342.833)* 画一个矩形选择ROI,矩形在左上角,覆盖一个完整的,无变形规定尺寸的商标,作为模板。
reduce_domain(Image,ROI1,ImageReduced1)* 大图和这个矩形的ROI相减就会得到一个左上角的商标的图案作为模板,命名ImageReduced。
create_shape_model(ImageReduced1,0,0,rad(360),0,'no_pregeneration','use_polarity',40,10,ModelID1)* 创建一个比例不变(1:1)的匹配的轮廓模型。
具体参数下个帖子说明,也可见[Halcon算子学习交流区] Halcon模版匹配算子解析。
find_shape_model(Image,ModelID1,0,rad(360),0.7,13,0.5,'interpolation',0,0.9,Row,Column,Angle,Score)* 寻找与模板的大小尺寸必须是一比一匹配的,只是角度的不同而已,若大小发生变化,则不能匹配get_shape_model_contours(ModelContours1,ModelID1,1)* 在大图中获取匹配。
在进行高质量、深度和广度兼具的文章撰写之前,我首先需要对您提出的主题进行全面评估和研究。
在本文中,我将按照您的要求,从简到繁地探讨“halcon单目视觉模板匹配例子”这一主题,以便您能更深入地理解。
在文章中,我会反复提及这一主题,并在总结回顾部分共享我的个人观点和理解。
请您耐心等待我的文章完成。
在深度了解halcon单目视觉模板匹配例子之前,我们需要先了解一些基础知识。
Halcon是一种先进的机器视觉库,它具有强大的图像处理和分析能力,可以应用于工业自动化、质量控制、医学影像等领域。
而单目视觉模板匹配则是Halcon中的重要功能之一,它能够在图像中找到指定模板的位置,从而实现对象识别和定位的功能。
通过模板匹配,我们可以实现自动化生产线上的零件检测、物体定位和跟踪等任务。
接下来,让我们以最简单的例子开始,来了解单目视觉模板匹配的基本原理。
假设我们有一张包含特定物体的模板图像,我们希望在另一张大图像中找到并定位该物体的位置。
这时,我们可以利用Halcon提供的模板匹配功能来实现这一目标。
我们需要在模板图像中提取出物体的特征,然后将其用于在大图像中进行匹配。
Halcon的模板匹配功能可以帮助我们快速准确地找到并定位物体的位置,实现自动化检测和定位的需求。
然而,现实中的应用场景往往更加复杂和多样化。
在工业生产线上,我们可能需要处理物体旋转、缩放、遮挡等情况。
这就需要我们对单目视觉模板匹配功能有更深入的理解和应用。
Halcon提供了丰富的参数和算法,可以帮助我们应对各种复杂情况。
通过设置旋转不变性参数,我们可以在一定范围内实现对旋转变换的兼容;通过使用多尺度匹配算法,我们可以处理物体尺度的变化;通过使用区域过滤器,我们可以处理部分遮挡的情况。
这些高级功能使得Halcon在工业自动化领域具有广泛的应用前景。
对于个人的理解和观点,我认为单目视觉模板匹配是机器视觉领域中一项非常重要的技术。
它可以帮助我们实现自动化生产和质量控制,提高生产效率和产品质量。
halcon find_scaled_shape_model 原理HALCON是一款先进的机器视觉库,提供了丰富的图像处理和分析功能。
其中之一的find_scaled_shape_model函数是一个强大的形状匹配算法,用于在图像中快速准确地找到和匹配一个已知的对象模型。
在本文中,我们将详细介绍find_scaled_shape_model函数的原理和工作流程。
同时,我们还会讨论与该函数相关的一些重要概念和技术。
原理:find_scaled_shape_model是基于模板匹配的算法。
模板匹配是一种基本的图像处理技术,用于在图像中检测并匹配一个已知的模板(或形状)。
它的原理是通过比较模板与图像中的局部区域,寻找最佳的匹配位置。
find_scaled_shape_model通过对模型的缩放进行建模,可以在不同尺度下进行匹配,从而提高匹配的鲁棒性和准确性。
其主要工作流程如下所示:1. 准备模型:首先,需要准备一个模型图像作为匹配的参考。
模型图像通常是对象的正面或侧面视图。
该模型图像应具有明确的边界和特征,以便能够在图像中准确匹配。
2. 计算形状模型:接下来,通过find_scaled_shape_model函数,使用模型图像来计算形状模型。
形状模型是一种通过对模型图像进行特征分析和建模而得到的数学描述。
它捕捉了模型的形状和结构信息,以便在后续的匹配过程中进行比较和匹配。
3. 在图像中搜索模型:一旦形状模型计算完成,find_scaled_shape_model函数可以开始在输入图像中搜索模型。
为了提高效率,可以指定一个搜索区域,限制搜索的范围。
在搜索过程中,函数将使用形状模型对图像中的局部区域进行比较,并计算出匹配分数。
匹配分数通常表示了形状模型与图像中各个局部区域的相似度。
4. 匹配处理:当搜索过程完成后,find_scaled_shape_model函数将根据匹配分数,找到与模型最相似的图像局部区域。
halcon 模板匹配结果按列排序算子
在HALCON中,可以使用算子`affine_trans_contour_xld`对模板匹配结果进行按列排序。
该算子的函数原型为`affine_trans_contour_xld(Contours : ContoursAffineTrans : HomMat2D : )`,其中`Contours`为输入的XLD轮廓,`ContoursAffineTrans`为转换后的XLD轮廓,`HomMat2D`为输入的转换矩阵。
仿射变换由`HomMat2D`中给出的齐次变换矩阵来描述,该矩阵可以使用`hom_mat2d_identity`、`hom_mat2d_scale`、`hom_mat2d_rotate`、`hom_mat2d_translate`等运算符创建,也可以是`vector_angle_to_rigid`等运算符的结果。
齐次变换矩阵的组成部分解释如下:图像的行坐标对应于定义变换矩阵的坐标系的x,列坐标对应于定义变换矩阵的坐标系的y。
这对于获得图像的右手坐标系是必要的。
特别是,这样可以确保在正确的方向上执行旋转。
注意,矩阵的(x,y)顺序与图像中坐标的通常(行、列)顺序相对应。
通过使用`affine_trans_contour_xld`算子,可以将任意仿射2D变换(如缩放、旋转、平移和倾斜)应用于轮廓中给定的XLD轮廓,并返回变换后的轮廓。
这样,就可以根据需要对模板匹配结果进行按列排序。
Halcon创建模板并进⾏模板匹配在进⾏图像处理时,很多时候创建模板并通过匹配模板进⾏图像基准点的分析能⼤⼤提⾼ROI的选取准确度和效率。
下⾯通过实例来讲述模板匹配的快速学习应⽤。
⾸先创建模板先读取图像,对读取的图像创建模板并保存,创建模板要挑选的是所有图像都存在的特征或区域以保证在实际处理时程序都能够正常进⾏图像分析处理。
Halcon中以draw开头的算⼦都是需要⼈在图像上⼿动绘制,代码如下:1 *读取图像2 read_image (Image, 'H:/NEW IMAGE/21.tiff')3 *在图像上⼿动绘制ROI,即选择绘制的模板区域4 draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)5 *将绘制的模板区域⽣成矩形6 gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)7 *提取出区域的图像,作为模板图像8 reduce_domain (Image, Rectangle, ImageReduced1)9 *创建模板10 create_shape_model (ImageReduced1, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)11 *将创建的模板存成指定路径的⽂件12 write_shape_model (ModelID, 'E:/modle1.shm')模板创建完后下⾯的处理程序只需要上⾯代码最后保存的那个模板⽂件,代码如下:1 *读取图像2 read_image (Image1, 'H:/NEW IMAGE/13.tiff')3 *读取模板⽂件4 read_shape_model ('E:/modle1.shm', ModelID1)5 *在图像中查找模板,并返回模板的中⼼坐标6 find_shape_model (Image1, ModelID1, -0.39, 0.78, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row1, Column1, Angle1, Score1)7 *匹配到模板8if(|Row1|==1)9 *在图像中显⽰模板10 dev_display_shape_matching_results (ModelID1, 'red', Row1, Column1, Angle1, 1, 1, 0)11 endif以上就是简单的模板创建以及模板匹配,希望对⼤家有所帮助,谢谢。
Halcon获取匹配到的模板区域在使⽤Halcon进⾏模板匹配的时候,我们使⽤find_shape_model、find_scaled_shape_model等算⼦找到模板后返回的是实例,得到的数据是模板中⼼的⾏列坐标、⾓度和缩放⽐例等数据,不是具体的区域,下⾯介绍怎么得到具体区域。
解决思路:⼀:先获取模板的轮廓,此时获取的轮廓位置在(0,0)的位置;⼆:求出模板到匹配实例的旋转矩阵;三:利⽤仿射变换得到匹配实例的轮廓;四:将轮廓转成区域;代码及注释讲解:1//获取初始模板轮廓2 get_shape_model_contours (ModelContours1, ModelID, 1)3//进⾏模板匹配找模板4 find_scaled_shape_model (Image0, ModelID, -3.14, 6.29, 0.95, 1.1, 0.90, 6, 0.5, 'least_squares', 8, 0.9, RowModel3, ColumnModel3, AngleModel3, Scale, Score1) 5if(|RowModel3|>0)//如果找到的模板数量⼤于06//显⽰找到的模板轮廓7 dev_display_shape_matching_results (ModelID, 'red', RowModel3, ColumnModel3, AngleModel3, 1, 1, 0)8//循环遍历每个找到的实例9for I := 0 to |Score1| - 1 by 110//求出初始模板到实例中间的旋转矩阵--注:初始模板的⾏列坐标和⾓度都是011 vector_angle_to_rigid (0, 0, 0, RowModel3[I], ColumnModel3[I], AngleModel3[I], HomMat2DRotate)12//给旋转矩阵添加缩放信息13 hom_mat2d_scale (HomMat2DRotate, Scale[I], Scale[I], RowModel3[I], ColumnModel3[I], HomMat2DScale)14//通过初始模板和旋转矩阵运算得到模板实例的轮廓15 affine_trans_contour_xld (ModelContours1, ModelTrans, HomMat2DScale)16//轮廓转区域17 gen_region_contour_xld (ModelTrans, Region, 'filled')18 endif。
halcon模板匹配中金字塔级别参数的工作原理
Halcon模板匹配中金字塔级别参数的工作原理是通过构建图像金字塔来实现的。
图像金字塔是一种多尺度表示的方法,它通过对原始图像进行多次降采样得到一系列不同分辨率的图像。
在模板匹配中,金字塔级别参数用于指定模板匹配算法在不同金字塔级别上进行匹配的精度。
具体来说,金字塔级别参数决定了模板匹配算法在图像金字塔的哪一层进行匹配。
工作原理如下:
1. 首先,根据金字塔级别参数,构建图像金字塔。
图像金字塔的每一层都是通过对上一层图像进行降采样得到的,即将图像的分辨率降低一定倍数。
2. 然后,将待匹配的模板也进行相同的金字塔降采样操作,得到一系列不同分辨率的模板。
3. 接下来,从金字塔的顶层开始,将模板与金字塔中的每一层图像进行匹配。
匹配过程可以使用相关性或差异性度量来评估模板与图像的相似度。
4. 如果在当前金字塔层级上找到了匹配结果,可以根据需要进行进一步的精确匹配或者返回匹配结果。
5. 如果在当前金字塔层级上没有找到匹配结果,则继续在下一层金
字塔上进行匹配,直到达到金字塔的最底层。
通过使用金字塔级别参数,模板匹配算法可以在不同分辨率的图像上进行匹配,从而提高了匹配的鲁棒性和准确性。
较高的金字塔级别参数可以提供更高的匹配精度,但也会增加计算时间。
因此,在选择金字塔级别参数时需要权衡匹配精度和计算效率。
halcon模板偏位案例
以下是一个Halcon模板偏位的案例:
在这个案例中,我们将使用Halcon软件来定位和检测印刷品上的文字。
假设我们有一个商标图案,商标上有一段文字。
我们希望通过模板匹配来定位和偏位检测商标图案上的文字。
首先,我们需要创建一个模板,用于匹配商标上的文字。
1. 打开Halcon软件,并导入商标图像。
2. 使用矩形选择工具来选择商标上的文字区域。
3. 点击“模板”选项卡,然后点击“创建新模板”按钮。
4. 在打开的对话框中,选择“标定”作为模板类型,并选择合适的标定方法。
5. 调整标定参数,以确保模板能准确地匹配商标上的文字。
6. 点击“创建”按钮,然后选择保存模板文件。
接下来,我们将使用创建的模板来定位商标图案上的文字,并检测其偏位情况。
1. 导入一张包含商标图案的图像。
2. 点击“模板”选项卡,然后点击“查找模板”按钮。
3. 在打开的对话框中,选择之前创建的模板文件。
4. 调整匹配参数,以确保能够准确地找到商标图案上的文字。
5. 点击“查找”按钮,Halcon将会自动定位商标图案上的文字并显示结果。
6. 根据显示的结果,可以判断出文字是否偏位。
如果需要进一步分析偏位情况,可以进行额外的测量和计算。
这个案例展示了如何使用Halcon软件进行模板偏位的检测。
根据具体情况,你可能需要调整参数和方法以获得更好的匹配结果。
halcon缺陷检测常用方法总结Halcon是一种强大的机器视觉软件,广泛应用于工业自动化和视觉检测领域。
缺陷检测是机器视觉中的重要任务之一,其目的是利用图像处理和分析技术,通过检测和分析图像中的缺陷来保证产品质量。
在Halcon中,有多种常用的方法可以用于缺陷检测。
下面将介绍一些常用的方法。
1.边缘检测方法边缘是图像中物体的轮廓,常常用于检测缺陷。
Halcon提供了多种边缘检测方法,如Sobel、Prewitt和Canny等。
这些方法能够提取图像中的边缘信息,并通过分析边缘的强度、方向和连续性来检测缺陷。
2.区域生长方法区域生长是一种基于像素相似性的方法,能够将相似像素合并为连续的区域。
在缺陷检测中,可以利用区域生长方法找到与周围像素相比较异常的区域,从而检测缺陷。
3.学习算法方法Halcon中提供了多种机器学习算法,如支持向量机(SVM)、随机森林(Random Forest)和深度学习等。
这些算法能够通过学习大量的正常样本和缺陷样本来构建模型,并利用模型进行缺陷检测。
4.形状匹配方法形状匹配是一种通过比较图像中物体形状的方法。
Halcon中提供了多种形状匹配算法,如模板匹配和形状基因算法。
这些方法能够通过比较待检测物体的形状与模板或基因的形状差异来检测缺陷。
5.纹理分析方法纹理是图像中的细微结构,常常包含有关物体表面的信息。
Halcon中提供了多种纹理分析方法,如灰度共生矩阵(GLCM)、灰度直方图和小波变换等。
通过分析图像的纹理特征,可以检测并区分不同的缺陷。
6.自适应阈值方法阈值是一种常用的图像分割方法,可以将图像分成不同的区域。
在缺陷检测中,阈值方法常常用于将图像中的缺陷与背景进行分离。
Halcon中提供了多种自适应阈值的方法,如Otsu和基于梯度的阈值等。
7.深度学习方法深度学习是近年来非常热门的机器学习方法,具备强大的特征提取和分类能力。
Halcon中集成了深度学习库Manto,可以利用Manto进行图像分类和目标检测,从而实现缺陷检测。
halcon中create_scaled_shape_model特征提取实现思路在Halcon中使用`create_scaled_shape_model`进行特征提取是一种基于形状的模板匹配方法。
以下是实现思路:
1.数据准备:首先,准备包含目标对象的图像样本。
这些图像样本应该包括目标的不同尺度和姿态变化,以便能够匹配多种情况。
2.创建模板:使用`create_scaled_shape_model`函数,将图像样本转换成形状模板。
此函数会提取目标的形状信息,并根据所提供的参数生成一个模板。
3.模板缩放:可以选择调整模板的尺度,以适应不同尺度的目标对象。
4.模板匹配:将创建的模板与待匹配图像进行匹配。
可以使用
`find_scaled_shape_model`函数,它会返回匹配结果,包括匹配位置和分数。
5.结果处理:根据匹配结果可以执行各种后续操作,比如标记匹配位置、测量目标的姿态等。
6.参数调优:根据具体应用,可能需要调整函数中的参数,以获得更好的匹配性能。
常见参数包括最小和最大缩放因子、匹配分数阈值等。
7.验证和优化:最后,进行验证和优化,确保系统能够准确匹配目标对象,尤其是在不同尺度和姿态下。
`create_scaled_shape_model`基于形状的模板匹配方法可以用于许多应用,如工业自动化、目标检测等,但其性能受到图像质量、目标变化和参数设置的影响,因此需要仔细的调试和测试。
openCV实现halcon的基于形状的匹配OpenCV是一个流行的计算机视觉库,提供了许多功能强大的图像处理和分析工具。
在OpenCV中,可以使用不同的方法实现基于形状的匹配,类似于Halcon库中的功能。
基于形状的匹配是通过比较目标形状和参考形状之间的相似性来寻找匹配项。
在OpenCV中,可以使用轮廓特征和模板匹配等技术来实现形状匹配。
首先,通过使用OpenCV的图像处理函数,可以对输入图像进行预处理,以提取感兴趣的区域或形状。
例如,可以使用二值化、边缘检测或形态学操作来提取目标形状的轮廓。
接下来,可以使用轮廓特征来比较目标形状和参考形状之间的相似性。
通过计算轮廓的形状描述符,如Hu矩、Zernike矩或Fourier描述符,可以量化形状的特征。
然后,可以使用形状描述符之间的距离度量来比较目标形状和参考形状之间的相似性。
在OpenCV中,可以使用函数如matchShapes(来计算轮廓的相似性度量。
该函数返回一个介于0和1之间的值,值越接近0表示形状越相似。
另一种常用的基于形状的匹配方法是模板匹配。
模板匹配是在输入图像中寻找与参考形状最相似的图像区域。
在OpenCV中,可以使用函数如matchTemplate(来执行模板匹配操作。
该函数使用滑动窗口的方式在输入图像上移动,并计算每个位置与参考形状的相似度得分。
最后,可以根据得分对匹配结果进行排序,并选择与参考形状相似度最高的匹配项作为最终的识别结果。
需要注意的是,在实现基于形状的匹配时,可能还需要考虑形变、旋转和缩放等因素。
为了提高匹配的准确性和鲁棒性,可以尝试使用图像归一化技术,如尺度不变特征变换(SIFT)或速度与环境不变特征(SURF)等。
总之,OpenCV提供了多种方法来实现基于形状的匹配,类似于Halcon库中的功能。
通过使用轮廓特征和模板匹配等技术,结合适当的图像处理和分析步骤,可以实现准确的形状匹配并应用于各种计算机视觉应用领域。
Halcon模板匹配使⽤find_scaled_shape_models来做模板匹配,发现⽹上竟然⼀点都找不到关于这个算⼦的⽂章,只有少数的find_scaled_shape_model相关的,但是我想同时做多个模板匹配,不想⼀个个来。
接昨天的那个问题,就是配置可接受的最⼩分数值,这个分数值明明远远低于实际得分,但是就是匹配不上的问题。
后来经过多此测试及重新阅读官⽅⽂档发现,多个模板,如果可接受最低分数都是相同的,那么确实可以只写⼀个值,问题到底在哪⾥呢?今天测试发现阈值调整为0.4之后,有不该被匹配上的部分匹配上了,这是⾮常糟糕的,这部分的得分为4.6左右,⼀般来说,真正能够匹配上的得分通常在0.8以上。
为了解决这个问题,我决定把阈值重新调整为0.5,不出所料,这⼀块确实匹配不上了,另⼏处应该匹配的也匹配不上了,简直是。
问题发现过程:找到了唯⼀⼀个halcon提供的包含该算⼦的例程,发现⾥⾯⽤的分数只有⼀个,没有⽤数组,排除这个原因;Maxoverlap和我设置的不相同,这个参数的涵义是可搜索到的模板实例之间最⼤的重叠,设置为相同值之后,没有效果;使⽤halcon hdevelop中的Matching助⼿,测试相同的图⽚和模板,阈值调整为0.5,能够匹配到,这就很奇怪了,助⼿使⽤的是find_scaled_shape_model,难道是这两个算⼦本⾝其实是不相同的?为了找到问题,插⼊代码,⼀个个参数对⽐。
最终发现是贪⼼算法的那个参数可能不恰当。
这个参数在0-1之间,越⼩搜索的越仔细,耗时越久;越⼤搜索的越不仔细,耗时越短。
之前是配置成了0.9,这是⼀个官⽅推荐值,⽂档上说⼀般来说得分在0.9以上的,配置成0.9的贪⼼算法,基本上都能找出来。
真是个坑,我有个图得分就有0.92,但是就是没有找出来。
⽽且官⽅那个例程上⽤的都是0.8。
后来通过⼀点点调⼩测试,最终确定为0.5,因为对耗时没有那么⾼的要求,暂定先⽤这个值,配上0.5的可接受的最低分数,测试⼀段时间看看效果。
基于halcon—缺陷检测常用方法与示例总结下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!基于Halcon—缺陷检测常用方法与示例总结引言缺陷检测在工业生产中扮演着至关重要的角色,它不仅可以提高产品质量,减少不良品率,还可以降低生产成本,增强企业竞争力。
halcon中find_shape_models在Halcon中,`find_shape_models`是一个用于在图像中查找并匹配形状模板的函数。
该函数可以用于基于模板的目标检测和定位。
以下是`find_shape_models`函数的基本用法:```pythonfind_shape_models (Image, ModelID, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness, ResultHandles)```参数说明:- `Image`:输入图像,用于进行形状模板匹配的图像。
- `ModelID`:形状模板的模型ID,使用`create_shape_model`函数创建的模型ID。
- `MinScore`:最小匹配得分阈值,筛选匹配结果的阈值。
- `NumMatches`:匹配数量,指定返回的匹配结果数量。
- `MaxOverlap`:最大重叠度,用于控制匹配结果的重叠度。
- `SubPixel`:是否使用亚像素精度进行定位。
- `NumLevels`:搜索金字塔层数,用于控制搜索的尺度。
- `Greediness`:贪婪度,用于控制匹配结果的贪婪程度。
- `ResultHandles`:输出的匹配结果句柄。
使用`find_shape_models`函数进行形状模板匹配的基本步骤如下:1. 创建形状模板模型,使用`create_shape_model`函数。
2. 加载待匹配的图像。
3. 调用`find_shape_models`函数,传入对应的参数,进行形状模板匹配。
4. 根据返回的匹配结果句柄,可以使用`get_shape_model_contours`函数获取匹配结果的轮廓,或者使用`get_shape_model_pose`函数获取匹配结果的姿态信息。
需要注意的是,形状模板匹配是一个复杂的任务,具体的参数设置会根据具体的应用场景和需求进行调整。
基于HALCON的模板匹配方法总结
分类:halcon学习2013-06-26 16:02 47人阅读评论(0) 收藏举报
halcon形状匹配算法
德国MVTec公司开发的HALCON机器视觉开发软件,提供了许多的功能,在这里我主要学习和研究了其中的形状匹配的算法和流程。
HDevelop开发环境中提供的匹配的方法主要有三种,即Component-Based、Gray-Value-Based、Shape-Based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配。
这三种匹配的方法各具特点,分别适用于不同的图像特征,但都有创建模板和寻找模板的相同过程。
这三种方法里面,我主要就第三种-基于形状的匹配,做了许多的实验,因此也做了基于形状匹配的物体识别,基于形状匹配的视频对象分割和基于形状匹配的视频对象跟踪这些研究,从中取得较好的效果,简化了用其他工具,比如VC++来开发的过程。
在VC下往往针对不同的图像格式,就会弄的很头疼,更不用说编写图像特征提取、模板建立和搜寻模板的代码呢,我想其中间过程会很复杂,效果也不一定会显著。
下面我就具体地谈谈基于HALCON的形状匹配算法的研究和心得总结。
1. Shape-Based matching的基本流程
HALCON提供的基于形状匹配的算法主要是针对感兴趣的小区域来建立模板,对整个图像建立模板也可以,但这样除非是对象在整个图像中所占比例很大,比如像视频会议中人体上半身这样的图像,我在后面的视频对象跟踪实验中就是针对整个图像的,这往往也是要牺牲匹配速度的,这个后面再讲。
基本流程是这样的,如下所示:
⑴首先确定出ROI的矩形区域,这里只需要确定矩形的左上点和右下点的坐标即可,gen_rectangle1()这个函数就会帮助你生成一个矩形,利用area_center()找到这个矩形的中心;
⑵然后需要从图像中获取这个矩形区域的图像,reduce_domain()会得到这个ROI;这之后就可以对这个矩形建立模板,而在建立模板之前,可以先对这个区域进行一些处理,方便以后的建模,比如阈值分割,数学形态学的一些处理等等;
⑶接下来就可以利用create_shape_model()来创建模板了,这个函数有许多参数,其中金字塔的级数由Numlevels指定,值越大则找到物体的时间越少,AngleStart和AngleExtent决定可能的旋转范围,AngleStep指定角度范围搜索的步长;这里需要提醒的是,在任何情况下,模板应适合主内存,搜索时间会缩短。
对特别大的模板,用Optimization来减少模板点的数量是很有用的;MinConstrast将模板从图像的噪声中分离出来,如果灰度值的波动范围是10,则MinConstrast应当设为10;Metric参数决定模板识别的条件,如果设为’use_polarity’,则图像中的物体和模板必须有相同的对比度;创建好模板后,这时还需要监视模板,用inspect_shape_model()来完成,它检查参数的适用性,还能帮助找到合适的参数;另外,还需要获得这个模板的轮廓,用于后面的匹配,get_shape_model_contours()则会很容易的帮我们找到模板的轮廓;
⑷创建好模板后,就可以打开另一幅图像,来进行模板匹配了。
这个过程也就是在新图像中寻找与模板匹配的图像部分,这部分的工作就由函数find_shape_model()来承担了,它也拥有许多的参数,这些参数都影响着寻找模板的速度和精度。
这个的功能就是在一幅图中找出最佳匹配的模板,返回一个模板实例的长、宽和旋转角度。
其中参数SubPixel决定是否精确到亚像素级,设为’interpolation’,则会精确到,这个模式不会占用太多时间,若需要更精确,则可设为’least_square’,’lease_square_high’,但这样会增加额外的时间,因此,这需要在时间和精度上作个折中,需要和实际联系起来。
比较重要的两个参数是MinSocre和Greediness,前一个用来分析模板的旋转对称和它们之间的相似度,值越大,则越相似,后一个是搜索贪婪度,这个值在很大程度上影响着搜索速度,若为0,则为启发式搜索,很耗时,若为1,则为不安全搜索,但最快。
在大多数情况下,在能够匹配的情况下,尽可能的
增大其值。
⑸找到之后,还需要对其进行转化,使之能够显示,这两个函数vector_angle_to_rigid()和affine_trans_contour_xld()在这里就起这个作用。
前一个是从一个点和角度计算一个刚体仿射变换,这个函数从匹配函数的结果中对构造一个刚体仿射变换很有用,把参考图像变为当前图像。
其详细的流程图和中间参数,如下图所示:(无法上传)
2. 基于形状匹配的参数关系与优化
在HALCON的说明资料里讲到了这些参数的作用以及关系,在上面提到的文章中也作了介绍,这里主要是重复说明一下这些参数的作用,再强调一下它们影响匹配速度的程度;在为了提高速度而设置参数之前,有必要找出那些在所有测试图像中匹配成功的设置,这时需考虑以下情况:
①必须保证物体在图像边缘处截断,也就是保证轮廓的清晰,这些可以通过形态学的一些方法来处理;
②如果Greediness值设的太高,就找不到其中一些可见物体,这时最后将其设为0来执行完全搜索;
③物体是否有封闭区域,如果要求物体在任何状态下都能被识别,则应减小MinScore 值;
④判断在金字塔最高级上的匹配是否失败,可以通过find_shape_model()减小NumLevels 值来测试;
⑤物体是否具有较低的对比度,如果要求物体在任何状态下都能被识别,则应减小MinContrast值;
⑥判断是否全局地或者局部地转化对比度极性,如果需要在任何状态下都能被识别,则应给参数Metric设置一个合适的值;
⑦物体是否与物体的其他实例重叠,如果需要在任何状态下都能识别物体,则应增加MaxOverlap值;
⑧判断是否在相同物体上找到多个匹配值,如果物体几乎是对称的,则需要控制旋转范围;
如何加快搜索匹配,需要在这些参数中进行合理的搭配,有以下方法可以参考:
①只要匹配成功,则尽可能增加参数MinScore的值;
②增加Greediness值直到匹配失败,同时在需要时减小MinScore值;
③如果有可能,在创建模板时使用一个大的NumLevels,即将图像多分几个金字塔级;
④限定允许的旋转范围和大小范围,在调用find_shape_model()时调整相应的参数;
⑤尽量限定搜索ROI的区域;
除上面介绍的以外,在保证能够匹配的情况下,尽可能的增大Greediness的值,因为在后面的实验中,用模板匹配进行视频对象跟踪的过程中,这个值在很大程度上影响到匹配的速度。
当然这些方法都需要跟实际联系起来,不同图像在匹配过程中也会有不同的匹配效果,在具体到某些应用,不同的硬件设施也会对这个匹配算法提出新的要求,所以需要不断地去尝试。
在接下来我会结合自己做的具体的实验来如何利用HALCON来进行实验,主要是在视频对象分割和视频对象的跟踪方面。