图像匹配方法:
- 基于灰度值相关方法:直接对原图像和模板图像进行操作,通过区域属性的比较来反映它们之间的相似性。时间复杂度高,对图像尺寸敏感。
- 特征提取方法:涉及大量的几何与图像形态学计算,计算量大,需要针对不同应用场合选择各自合适的特征
基于像素的匹配
最基本的匹配方法;直接利用整幅图像的灰度信息建立两幅图像之间的相似性度量,然后采用某种搜寻方法寻找使相似性度量值最大或最小的变换模型的参数值。
1.归一化积相关(NCC)灰度匹配
基于灰度相关的算法,具有不受比例因子误差影响和抗白噪声干扰能力强等优点;通过比较参考图像和输入图像在各个位置的相关系数,相关值最大的点就是最佳匹配位置。
2.序贯相似性检测算法(SSDA)匹配
在待匹配图像的每个位置上以随机不重复的顺序选择像元,并累计模板和待匹配图像在该像元的灰度差,若累计值大于某一指定阈值,这说明该位置为非匹配区域位置,停止本次计算,进行下一个位置的测试,直到找到最佳匹配位置。
灰度匹配算子:
使用图像创建NCC匹配模板:
create_ncc_model(template模板图像::numlevels最高金字塔层数,anglestart开始角度,angleextent角度范围,anglestep旋转角度步长,metric物体极性选择:modelID生成模板ID)
搜索NCC最佳匹配:
find_ncc_model(image要搜索的图像::modelID模板ID,anglestart与创建模板时相同或相近,angleend与创建模板时相同或相近,minscore最小分值,nummatches匹配目标个数,maxoverlap最大重叠比值,subpixel是否亚像素级别,numlevel金字塔层数:row,column,angle匹配得到的坐标角度,score匹配得到的分值)
基于像素灰度的模板匹配:
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_update_window ('off')
*获得圆形region
gen_circle (Circle, 200, 200, 100.5)
*得到区域的中心坐标
area_center (Circle, Area, Row, Column)
*缩小图像的域
reduce_domain (Image, Circle, ImageReduced)
*创建NCC模板
create_ncc_model (ImageReduced, 'auto', -0.39, 0.79, 'auto', 'use_polarity', ModelID)
dev_set_draw ('margin')
dev_display (Image)
dev_display (Circle)
stop()
read_image (Image, 'printer_chip/printer_chip_02')
*在图像中寻找模板
find_ncc_model (Image, ModelID, -0.39, 0.79, 0.8, 1, 0.5, 'true', 0, Row1, Column1, Angle, Score)
*对匹配到中心的模板求取映射关系
vector_angle_to_rigid (Row, Column,0, Row1, Column1, 0, HomMat2D)
*根据映射关系求出对应图像范围
affine_trans_region (Circle, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
dev_display (Image)
dev_display (RegionAffineTrans)
stop()
基于特征的匹配
是指建立两幅图像中特征点直接对应关系的过程。大大减少了匹配过程的计算量。
1.不变矩匹配法
在图像处理中,矩是一种统计特性,可以使用不同阶次的矩计算模板的位置方向和尺寸变换参数,由于高阶矩对噪声和变形非常敏感,因此在实际应用中通常选用低阶矩来实现图像匹配。
2.距离变换匹配法
是一种常见的二值图像处理算法,用来计算图像中任意位置到最近边缘点的距离
3.最小均方误差匹配法
最小均方误差匹配方法是利用图像中的对应特征点,通过解特征点的变换方程来计算图像间的变换参数。
特征匹配算子:
使用图像创建形状匹配模型:
create_shape_model(template模板图像::numlevels最高金字塔层数,anglestart开始角度,angleextent角度范围,anglestep旋转角度步长,optimization优化选项,是否减少模板点数,metric匹配度量极性选择,contrast阈值或滞后阈值来表示对比度,mincontrast最小对比度:modelID生成模板ID)
获取形状模板的轮廓:
get_shape_contours(:modelcontours得到的轮廓XLD:modelID输入模板ID,level对应金字塔层数;)
寻找单个形状模板最佳匹配:
find_shape_model(image要搜索的图像::modelID模板ID,anglestart开始角度,angleextent角度范围,minscore最低分值,nummatches匹配实例个数,maxpverlap最大重叠,subpixel是否亚像素精度,numlevels金字塔层数,greediness搜索贪婪度,为0时安全但是速度慢;当为1时速度快但不稳定:row,column,angle,score获得的坐标角度缩放和匹配分值)
基于形状特征的模板匹配例子:
dev_update_off ()
dev_close_window ()
read_image (Image, 'printer_chip/printer_chip_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)
stop()
*获得一个矩形region
gen_rectangle1 (Rectangle, 355, 845, 760, 1020)
*缩小图像的域
reduce_domain (Image, Rectangle, ImageReduced)
*创建形状模板
create_shape_model (ImageReduced, 'auto', 0, 360, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
*得到形状模板的轮廓
get_shape_model_contours (ModelContours, ModelID, 1)
read_image (Image, 'printer_chip/printer_chip_03')
*在图像中寻找模板
find_shape_model (Image, ModelID, 0, 360, 0.3, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
*对得到的结果进行十字标记
gen_cross_contour_xld (Cross, Row, Column, 6, rad(45))
dev_display (Image)
*显示匹配结果
dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0)
*设置颜色
dev_set_color ('green')
dev_display (Cross)
*清楚模板内容
clear_shape_model (ModelID)
图像金字塔
是一种以多分辨率来解释图像的有效但概念简单的结构,广泛应用于图像分割,机器视觉和图像压缩。
一副图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合,其通过梯次向下采样获得,直到达到某个终止条件才停止采样。金字塔底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。层级越高,图像越小,分辨率越低。
常见的金字塔:
1.高斯金字塔
高斯金字塔是通过高斯平滑和亚采样获得向下采样图像,也就是说第I层金字塔通过平滑,亚采样就可获得I+1层高斯图像。高斯金字塔包含一系列的低通滤波器,其截止至频率从上一层到下一层以因子2逐渐增加,所以高斯金字塔可以跨越很大的频率范围。
2.拉普拉斯金字塔
用高斯金字塔的每一层图像减去其上一层图像上采样并高斯卷积之后的预测图像,得到 一系列的差值图像,即为拉普拉斯金字塔分解图像。
图像金字塔算子:
根据金字塔层数和对比度检查要生成的模板是否合适:
inspect_shape_model(image输入的图像:modelimages获得金字塔图像,modelregions模板区域:numlevels金字塔层数,contrast对比度)
使用图像创建形状匹配模型:
create_shape_model(template模板图像::numlevels最高金字塔层数,anglestart开始角度,angleextent角度范围,anglestep旋转角度步长,optimization优化选项,是否减少模板点数,metric匹配度量极性选择,contrast阈值或滞后阈值来表示对比度,mincontrast最小对比度:modelID生成模板ID)
获取形状模板的轮廓:
get_shape_contours(:modelcontours得到的轮廓XLD:modelID输入模板ID,level对应金字塔层数)