*evaluate_definition的使用例子
*使用halcon自带的图片
*实现了五种评价函数,
*选择算子的Method值,可以观察不同评价函数的效果。
*read_image (Image, ‘pcb_focus/pcb_focus_telecentric_106’)
read_image (Image, ‘G:/nano截图/nanoimg/14.bmp’)
dev_update_off ()
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, 752, 480, WindowHandle)
set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
dev_set_color (‘lime green’)
dev_set_line_width (3)
Ret:=[]
Trend_Array:=[]
get_image_size(Image, Width, Height)
count_seconds (S1)
for Index := 1 to 31 by 1
read_image (Image, ‘G:/nano截图/nanoimg/’+Index$‘02d’)
**不同的算子不同的效果
**1、Deviation 方差法(效果最差) 2、laplace 拉普拉斯能量函数 3、energy 能量梯度函数
**4、Brenner梯度函数 (效果最佳) 5、Tenegrad梯度函数
evaluate_definition1(Image, ‘Brenner’, Value1)
dev_display (Image)
Ret:=[Ret,Value1]
**使用当前值减去前3的值,计算当前的趋势
**提取数列倒数第3个值,如果没有,则为0;
*tuple_length (Ret, Length)
if (|Ret| < 4)
Ret_last3 := 0
else
Ret_last3 := Ret[|Ret| - 3]
endif
Trend := Value1 - Ret_last3
Trend_Array:=[Trend_Array,Trend]
**显示趋势值,若差值为正,则在往清晰方向调整,若为负,则往模糊方向调整
if (Trend > 0)
disp_message (WindowHandle, '往清晰方向旋转,电机正常方向运转', 'window', 20, 20, 'green', 'false')
else
disp_message (WindowHandle, '往模糊方向旋转,电机需要反向运转', 'window', 20, 20, 'red', 'false')
endif
**延迟时间
wait_seconds (0.02)
endfor
使用直方图显示清晰度结果,如果有更好的方法,那就跟帖回复吧
VMax:=max(Ret)
VMin:=min(Ret)
GRet := 100(Ret-VMin)/(VMax-VMin)
gen_region_histo(Region, Ret, 300, 100, 1)
*找到峰值对应的那张图,确实是最清晰的那张。
qxd:=find(Ret, max(Ret))
read_image (GoodImage, ‘G:/nano截图/nanoimg/’+qxd$‘02d’)
dev_display (GoodImage)
dev_display (Region)
disp_message (WindowHandle, ‘最大值为:’+VMax+’ 最清晰的为第’ + qxd + ‘张图片’, ‘window’, 20, 20, ‘green’, ‘false’)
count_seconds (S2)
S:=S2-S1