Halcon清晰度检测Demo

此实例通过使用Halcon实现5种清晰度算法函数:
1. 方差算法函数;
2. 拉普拉斯能量函数;
3. 能量梯度函数;
4. Brenner函数;
5. Tenegrad函数;
测试效果如下图片;找到峰值对应的那张图,确实是最清晰的那张;使用直方图显示清晰度结果,如果有更好的方法,那就跟帖回复吧。
此实例有HalconBBS群友提供!
 
 
 
*evaluate_definition的使用例子
*使用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, 'Tenegrad', 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_definition函数代码如下:

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')
    convert_image_type (Image, Image, 'real') 
    sub_image(Image, ImageMean, ImageSub, 1, 0)
    mult_image(ImageSub, ImageSub, ImageResult, 1, 0)
    intensity(ImageResult, ImageResult, Value, Deviation) 
    
elseif(Method = 'laplace')
*拉普拉斯能量函数
    laplace (Image, ImageLaplace4, 'signed', 3, 'n_4')
    laplace (Image, ImageLaplace8, 'signed', 3, 'n_8')
    add_image(ImageLaplace4,ImageLaplace4,ImageResult1, 1, 0)
    add_image(ImageLaplace4,ImageResult1,ImageResult1, 1, 0)
    add_image(ImageLaplace8,ImageResult1,ImageResult1, 1, 0)
    mult_image(ImageResult1, ImageResult1, ImageResult, 1, 0)
    intensity(ImageResult, ImageResult, Value, Deviation)

elseif(Method = 'energy')
*能量梯度函数
    crop_part(Image, ImagePart00, 0, 0, Width-1, Height-1)
    crop_part(Image, ImagePart01, 0, 1, Width-1, Height-1)
    crop_part(Image, ImagePart10, 1, 0, Width-1, Height-1)
    convert_image_type (ImagePart00, ImagePart00, 'real')
    convert_image_type (ImagePart10, ImagePart10, 'real')
    convert_image_type (ImagePart01, ImagePart01, 'real')
    sub_image(ImagePart10, ImagePart00, ImageSub1, 1, 0)
    mult_image(ImageSub1, ImageSub1, ImageResult1, 1, 0)
    sub_image(ImagePart01, ImagePart00, ImageSub2, 1, 0)
    mult_image(ImageSub2, ImageSub2, ImageResult2, 1, 0)
    add_image(ImageResult1, ImageResult2, ImageResult, 1, 0)    
    intensity(ImageResult, ImageResult, Value, Deviation)
elseif(Method = 'Brenner')
*Brenner函数法
    crop_part(Image, ImagePart00, 0, 0, Width, Height-2)
    convert_image_type (ImagePart00, ImagePart00, 'real')
    crop_part(Image, ImagePart20, 2, 0, Width, Height-2)
    convert_image_type (ImagePart20, ImagePart20, 'real')
    sub_image(ImagePart20, ImagePart00, ImageSub, 1, 0)
    mult_image(ImageSub, ImageSub, ImageResult, 1, 0)
    intensity(ImageResult, ImageResult, Value, Deviation)
elseif(Method = 'Tenegrad')
*Tenegrad函数法
    sobel_amp (Image, EdgeAmplitude, 'sum_sqrt', 3)
    min_max_gray(EdgeAmplitude, EdgeAmplitude, 0, Min, Max, Range)
    threshold(EdgeAmplitude, Region1, 11.8, 255)
    region_to_bin(Region1, BinImage, 1, 0, Width, Height)
    mult_image(EdgeAmplitude, BinImage, ImageResult4, 1, 0)
    mult_image(ImageResult4, ImageResult4, ImageResult, 1, 0)
    intensity(ImageResult, ImageResult, Value, Deviation)
   
elseif(Method = '2')

elseif(Method = '3')
    
endif
    
return ()
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Halcon是一款强大的机器视觉软件,它提供了丰富的工具和功能来实现各种视觉检测任务。Halcon支持直线度检测,是指检测指定区域内的直线是否符合一定的直线度标准,以确定直线的质量。 在Halcon中,可以使用直线度检测工具来检测直线度。该工具基于数学算法,在给定的直线上进行采样并计算直线的偏差,以确定直线的质量。用户可以设置检测区域、采样点数、直线度标准等参数,以满足不同的检测需求。 Halcon的直线度检测功能可以用于检测各种工件的直线度,如机械零件、板材、玻璃等。根据检测结果,可以判断工件的质量是否合格,并进行后续处理,如分类、计数、分拣等。 总之,Halcon的直线度检测功能为工业生产提供了一种高效、精确的检测方法,有助于提高生产效率和产品品质。 ### 回答2: Halcon直线度检测是一种基于人工智能技术的图像处理方法,适用于对工业产品的直线度进行检测。该方法通过选择图像中的直线特征并精确测量,可以快速、准确地得出直线度的数值,并自动判断产品是否符合质量标准。 Halcon直线度检测系统主要分为两个部分:图像预处理和直线度测量。首先,将待测产品的图像进行拍摄并预处理,消除影响因素如噪点等,提取出产品中的直线特征。然后,使用图像处理算法计算直线度,并根据预设的标准进行判断,生成检测结果。从而实现对产品直线度的快速、准确测量。 Halcon直线度检测系统具有以下优点:首先,它可以高效地进行工业生产线中的自动化检测,比传统的人工检测更为准确。其次,Halcon直线度检测可以减少生产中的浪费,通过提前检测出存在线度问题的产品,以便在后续生产过程中及时进行调整。最后,它协助厂商从技术层面提升产品质量、提高客户满意度,形成从量到质的转变。 在实际应用中,Halcon直线度检测可以应用于很多领域,例如汽车、电子、医疗设备等制造行业中。它减少了传统的人工检测时间,提高了检测的准确性和效率,并且能够及时发现问题,降低了生产成本,更好地满足现代化工业在自动化检测方面的需求。 ### 回答3: Halcon直线度检测是一种基于数字图像处理技术的在线测量方法,用于评估产品的直线度。该方法基于边缘检测和曲线拟合算法,能够自动检测和量化物体表面的直线度。 在进行Halcon直线度检测时,首先需要将物体的图像获取并进行预处理,包括灰度化、平滑滤波和边缘检测等操作。然后利用Halcon中的曲线拟合方法,对检测到的边缘进行拟合,从而得到物体表面的直线。 通过Halcon直线度检测,可以快速、准确地评估物体表面的直线度,并得到线性偏差、线性误差等量化指标,为产品制造和质控提供了强有力的支持。同时,该技术也具有灵活性和可重复性等特点,能够适用于不同材料和尺寸的物体检测。 总的来说,Halcon直线度检测是一种基于数字图像处理技术的高效、准确的在线测量方法,适用于产品直线度评估和质量控制等领域。随着数字图像处理技术的不断发展和完善,该方法也将得到进一步的应用和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落寞的雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值