模板匹配基本流程:
确定ROI区域
生成一个矩形(draw_rectangle2,gen_rectangle2.)
得到ROI区域(reduce_domain)
创建模板(create_shape_model)
Template:输入的图像
Numlevels:金字塔的级数,越大匹配时间就越少,必须保证最高层图像具有足够的信息至少4点。可以通过inspect_shape_model()查看设置结果,最高层太少自动减少层数,最底层信息太少就会报错,auto会自动计算层数
Anglestart:开始的角度
Angleextent:经过的角度
Anglestep:一步经过的角度(小图大一点)
Optimization:‘none’使用全部模板点,’auto’可以用来减少模板点的数量
Metric:决定模板识别的条件’use_polarity(相同对比度:如果模板是背景暗,对象亮,那么匹配的也会是背景暗,对象亮)’,‘ignore_global_polarity’(对比度相反的)。还有用在多通道中的‘ignore_local_polarity’;’ignore_color_polarity’,
Contrast: 对比度是用来测量目标与背景之间和目标不同部分局部的灰度值差异,‘auto_contrast’自动适应设置阈值。‘auto_min_size’
Mincontrast:如果要将遮挡严重的模板也能识别出来,应该设置一个比噪声引起的弧度浮动略大的数。比contrast小 (小图设的小)
ModelID:
EG.
create_shape_model(reduceimage,3,0,rad(360),rad(1),‘none’,‘use_polarity’,[‘auto_contrast’,‘auto_min_size’],20,modelid)
监视模板(inspect_shape_model)检查参数的适用性
获得模板的轮廓(get_shape_model_contours)
在新图像中寻找与模板匹配的图像部分(find_shape_model)
Image
ModelID
Anglestart
Angleextent
Minscore:得到的匹配度的值,如果超过这个值将被认为找到 (若只有一半则该值应该小于0.5)
Munmatches:寻找的个数,0找到所有的,
Maxoverlap:当找到的目标存在重叠时,且重叠大于该值时选择一个好的输出(可能一个点会被多次找到,减小该值可以)
Subpixel:是否使用亚像素‘none’不使用。
Numlevels:金字塔级数
Greediness:确定在搜索时的“贪婪程度”。0慢,1快但是可能会有没有找到的,建议0.9
Row,column
Angle
Score:得到的匹配度的值
EG.
find_shape_model(gray_src,modelid,0,rad(360),0.4,0,0.267,‘least_squares’,3,0.1,row1,col1,ang1,score1)
‘least_squares’:是使用最小二值的插补方法来计算的亚像素值
代码:
模板匹配基本流程:
1.
确定ROI区域
生成一个矩形(draw_rectangle2,gen_rectangle2.)
得到ROI区域(reduce_domain)
2.
创建模板(create_shape_model)
Template:输入的图像
Numlevels:金字塔的级数,越大匹配时间就越少,必须保证最高层图像具有足够的信息至少4点。可以通过inspect_shape_model()查看设置结果,最高层太少自动减少层数,最底层信息太少就会报错,auto会自动计算层数
Anglestart:开始的角度
Angleextent:经过的角度
Anglestep:一步经过的角度(小图大一点)
Optimization:‘none’使用全部模板点,’auto’可以用来减少模板点的数量
Metric:决定模板识别的条件’use_polarity(相同对比度:如果模板是背景暗,对象亮,那么匹配的也会是背景暗,对象亮)’,‘ignore_global_polarity’(对比度相反的)。还有用在多通道中的‘ignore_local_polarity’;’ignore_color_polarity’,
Contrast: 对比度是用来测量目标与背景之间和目标不同部分局部的灰度值差异,‘auto_contrast’自动适应设置阈值。‘auto_min_size’
Mincontrast:如果要将遮挡严重的模板也能识别出来,应该设置一个比噪声引起的弧度浮动略大的数。比contrast小 (小图设的小)
ModelID:
EG.
create_shape_model(reduceimage,3,0,rad(360),rad(1),'none','use_polarity',['auto_contrast','auto_min_size'],20,modelid)
3.
监视模板(inspect_shape_model)检查参数的适用性
4.
获得模板的轮廓(get_shape_model_contours)
5.
在新图像中寻找与模板匹配的图像部分(find_shape_model)
Image
ModelID
Anglestart
Angleextent
Minscore:得到的匹配度的值,如果超过这个值将被认为找到 (若只有一半则该值应该小于0.5)
Munmatches:寻找的个数,0找到所有的,
Maxoverlap:当找到的目标存在重叠时,且重叠大于该值时选择一个好的输出(可能一个点会被多次找到,减小该值可以)
Subpixel:是否使用亚像素‘none’不使用。
Numlevels:金字塔级数
Greediness:确定在搜索时的“贪婪程度”。0慢,1快但是可能会有没有找到的,建议0.9
Row,column
Angle
Score:得到的匹配度的值
EG.
find_shape_model(gray_src,modelid,0,rad(360),0.4,0,0.267,'least_squares',3,0.1,row1,col1,ang1,score1)
'least_squares':是使用最小二值的插补方法来计算的亚像素值
代码:
dev_close_window()
read_image(image,'C:/Users/DELL/Desktop/clip.jpg')
get_image_size(image,width,height)
dev_open_window(0,0,512,512,'black',window)
dev_set_part(0,0,height,width)
dev_display(image)
灰度处理
rgb1_to_gray(image,gray_src)
加强图像的对比度
equ_histo_image(gray_src,equ_src)
*
draw_rectangle2(window,row,col,phi,length1,length2)
row:=876.435
col:=260.772
phi:=2.058
length1:=99.135
length2:=30.102
得到ROI区域
gen_rectangle2(rectangle,row,col,phi,length1,length2)
*gen_rectangle2(rectangle,390,490,0,60,100)
reduce_domain(equ_src,rectangle,reduceimage)
*创建模板,金字塔级数3,从0开始旋转360,每次旋转1,‘none’不减少模板数,‘use_polarity’使用相同对比度,自动化适应对比度和尺寸,最小对比度20
create_shape_model(reduceimage,3,0,rad(360),rad(1),'none','use_polarity',['auto_contrast','auto_min_size'],20,modelid)
*监视模板
inspect_shape_model (reduceimage,
ModelImages, ModelRegions, 3, 20)
*得到模板轮廓
get_shape_model_contours(contours,modelid,1)
*匹配,从0开始旋转360,匹配度大于0.4,0找到所有,0.267重复值,'least_squares',亚像素值的插值方法为最小二值,金字塔级数,贪婪程度
find_shape_model(gray_src,modelid,0,rad(360),0.4,0,0.267,'least_squares',3,0.1,row1,col1,ang1,score1)
dev_display(image)
dev_set_draw('margin')
dev_set_line_width(3)
num:=|row1|
for i:=0 to num-1 by 1
显示信息
disp_message(window,i+1,'image',row1[i],col1[i],'green','true')
画出矩形框
gen_rectangle2(rectangle2,row1[i],col1[i],ang1[i]+phi,length1,length2)
endfor