自动对焦算法

*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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值