自动对焦要求相机根据拍摄环境和场景的变化,通过相机内部的微型驱动马达,自动调节相机镜头和 CCD 之间的距离,
保证像平面正好投影到 CCD 的成像表面上。这时候物体的成像比较清晰,图像细节信息丰富。相机自动对焦的过程,
其实就是对成像清晰度评价的过程。对焦不准确会造成图像模糊,在高精度视觉测量和视觉定位等应用中会带来误差。
工业相机上用的变焦镜头需要人为去调节到最清晰一个状态,以下分别提供方差法、拉普拉斯能量函数法、能量梯度
函数法、Brenner 函数法的评判来找到最清晰的图像。
主函数
*使用 halcon 自带的图片
*实现了五种评价函数,
*选择算子的 Method 值,可以观察不同评价函数的效果。
read_image (Image, 'pcb_focus/pcb_focus_telecentric_106')
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:=[]
get_image_size(Image, Width, Height)
for Index := 1 to 121 by 1
read_image (Image, 'pcb_focus/pcb_focus_telecentric_'+Index$'03d')
****自定义的评判函数,返回一个数值来表示这个图像的清晰度,越高表示越清晰
evaluate_definition (Image, 'Brenner', Value)
dev_display (Image)
Ret:=[Ret,Value]
endfor
*使用直方图显示清晰度结果
VMax:=max(Ret)
VMin:=min(Ret)
GRet := 100*(Ret-VMin)/(VMax-VMin)
gen_region_histo(Region, Ret, 255, 255, 1)
*找到峰值对应的那张图,确实是最清晰的那张。
qxd:=find(Ret, max(Ret))
read_image (GoodImage, 'pcb_focus/pcb_focus_telecentric_'+qxd$'03d')
dev_display (GoodImage)
dev_display (Region)
自定义的评判函数
evaluate_denion(Image : : Method : Value)
scale_image_max(Image, Image)
get_image_size(Image, Width, Height)
if(Method = 'Deviation')
*方差法
region_to_mean (Image, Image, ImageMean)
convert_image_type (ImageMean, ImageMean, 'real')
评论6