Halcon 《机器视觉算法及应用》十例(其四)


* 本示例演示了使用单个参考图像进行打印检查的过程。

* 读取参考图像并初始化程序。

read_image (Image, 'relay/relay_01')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, 600, 500, WindowHandle1)
set_display_font (WindowHandle1, 16, 'mono', 'true', 'false')
dev_update_off ()
dev_display (Image)
get_image_size (Image, Width, Height)
Pi := rad(180)

* 读取已人为预定义的兴趣区域。
read_region (ROI, 'relay/relay_inspection_roi.reg')
reduce_domain (Image, ROI, ImageReduced)

*显示参考图像。
dev_clear_window ()
dev_display (ImageReduced)
dev_disp_text ('Reference image', 'window', 12, 12, 'black', [], [])
dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
stop ()

* 在此应用中,通过使用边缘幅度作为标准偏差的近似值,从单个参考图像创建变化模型。
Sigma := 0.5
edges_image (ImageReduced, ImaAmp, ImaDir, 'canny', Sigma, 'none', 20, 40) //使用Deriche,Lanser,Shen或Canny过滤器提取边缘。
gray_dilation_rect (ImaAmp, VariationImage, 3, 3) //确定矩形内的最大灰度值,灰度膨胀使得被检测图像与参考图像间的允许误差增加。参考图像ImageReduced生成--->偏差模型VariationImage,

* 显示变化图像。
dev_clear_window ()
dev_display (VariationImage)
dev_disp_text ('Variation image', 'window', 12, 12, 'black', [], [])
dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
stop ()

* 创建偏差模型。
AbsThreshold := 15
VarThreshold := 1
create_variation_model (Width, Height, 'byte', 'direct', VarModelID) //创建用于图像比较的变化模型。
prepare_direct_variation_model (ImageReduced, VariationImage, VarModelID, AbsThreshold, VarThreshold) //准备一个变化模型以与图像进行比较。ImageReduce参考图像,VariationImage偏差图像

*创建形状模型以对齐测试图像。 为了加快匹配速度,仅将打印件的一部分用作模板。为了被测图像与参考图像进行比较,两个图像必须很好的对齐,使用鲁棒的模板匹配来确定这两幅图像间的偏差量
read_region (MatchingROI, 'relay/relay_matching_roi') //读取图像ROI区域
reduce_domain (Image, MatchingROI, Template) //缩小图像的域。
create_shape_model (Template, 5, -rad(5), rad(10), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ShapeModelID) //准备一个形状模型以进行匹配。
area_center (MatchingROI, ModelArea, ModelRow, ModelColumn) //区域中心点

*仅出于可视化目的提取亚像素精确边缘。
edges_sub_pix (ImageReduced, Edges, 'sobel_fast', 0.5, 10, 20) //使用Deriche,Lanser,Shen或Canny滤镜提取亚像素精确边缘。

* 检查多个继电器上的印记。
for Index := 2 to 6 by 1
    * 
    * 读取测试图片
    read_image (Image, 'relay/relay_' + Index$'02d')
    * 
    * 确定打印在测试图像中的确切位置。
    find_shape_model (Image, ShapeModelID, -rad(5), rad(10), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
    * 
    * 检查压印是否可以找到。
    if (|Score| == 1)
        * 
        * 将图像与参考图像对齐。
        vector_angle_to_rigid (Row, Column, Angle, ModelRow, ModelColumn, 0, HomMat2D) //从点和角度计算刚性仿射变换。
        affine_trans_image (Image, ImageAligned, HomMat2D, 'constant', 'false') //将任意仿射2D变换应用于图像。
        * 
        * 将当前测试图像与参考图像进行比较。
        reduce_domain (ImageAligned, ROI, ImageAlignedReduced)
        compare_variation_model (ImageAlignedReduced, RegionDiff, VarModelID) //将图像与变化模型进行比较。
        * 
        * 选择打印印记中错误的区域。
        MinComponentSize := 5 
        dilation_circle (RegionDiff, RegionDilation, 3.5) //使用圆形结构元素扩展区域。
        connection (RegionDilation, ConnectedRegions) 
        intersection (ConnectedRegions, RegionDiff, RegionIntersection) //计算两个区域的交点。
        select_shape (RegionIntersection, SelectedRegions, 'area', 'and', MinComponentSize, ModelArea) //借助形状特征选择区域。
        * 
        * 显示结果。
        dev_display (ImageAligned)
        count_obj (SelectedRegions, NumberDefects) //计算元组中的对象数。
        if (NumberDefects > 0)
            dev_disp_text ('Image ' + Index + ': ' + NumberDefects + ' Errors found', 'window', 12, 12, 'black', [], [])
            dev_set_color ('green')
            dev_set_line_width (1)
            dev_display (Edges)
            dev_set_color ('red')
            dev_set_line_width (3)
            area_center (SelectedRegions, Area, Row, Column)
            elliptic_axis (SelectedRegions, Ra, Rb, Phi) //计算等效椭圆的参数。
            gen_ellipse_contour_xld (ErrorMarker, Row, Column, Phi, Ra + 5, Rb + 5, gen_tuple_const(|Row|,0), gen_tuple_const(|Row|,6.28318), gen_tuple_const(|Row|,'positive'), 1.5) //创建对应于椭圆弧的XLD轮廓。


                                 gen_tuple_const(|Row|,0) //用于生成特定长度的元组并且初始化其元素,创建一个具有|Row|个元素的、每个元 素都为 0 的数据


            dev_display (ErrorMarker)
        else //显示:"OK"
            dev_disp_text ('Image ' + Index + ': OK', 'window', 12, 12, 'black', [], [])
            dev_set_color ('green')
            dev_set_line_width (1)
            dev_display (Edges)
        endif
    else
        if (|Score| == 0) //如果Score分数为0,显示:找不到要测试的图案
            dev_disp_text ('Image ' + Index + ': Pattern to be tested could not be found', 'window', 12, 12, 'black', [], [])
        else //显示:发现要测试的图案不明确
            dev_disp_text ('Image ' + Index + ': Pattern to be tested was found ambiguously', 'window', 12, 12, 'black', [], [])
        endif
    endif
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
endfor

* Clean up
clear_shape_model (ShapeModelID)
clear_variation_model (VarModelID)
dev_disp_text ('      End of program      ', 'window', 'bottom', 'right', 'black', [], [])

注意:

1.通过参考图像边缘振幅来估计允许误差:为了使相邻边缘对振幅计算影响较小,使用一个3*3的Canny边缘滤波算子(edges_image),并使用灰度膨胀(gray_dilation_rect )使得被检测图像与参考图像间的允许误差增加;

2.参考图像和偏差图像生成  偏差模型 : create_variation_model  、prepare_direct_variation_model

3.理一遍思路:

### 回答1: 《halcon机器视觉算法原理与编程实战.pdf》是一本介绍Halcon机器视觉算法原理和编程实践的书籍。Halcon是一种功能强大的机器视觉软件库,广泛应用于工业自动化、医疗影像、质量检测等领域。 该书首先介绍了机器视觉算法的基本原理,包括图像预处理、特征提取、模式匹配等常用技术。然后扩展到更高级的视觉算法,如3D视觉建模、图像分割、深度学习等。书中不仅介绍了算法的原理,还提供了大量的代码实例和详细的算法流程,帮助读者理解和掌握Halcon编程。 此外,该书还重点介绍了Halcon软件的特点和应用案例。Halcon具有丰富的图像处理函数和工具,支持多种编程语言和平台,使得开发者可以根据实际需求进行开发和集成。书中通过实例演示了工业自动化、医疗影像等领域的应用案例,指导读者如何使用Halcon实现实际的项目。 总之,《halcon机器视觉算法原理与编程实战.pdf》通过结合理论和实践,详细介绍了Halcon机器视觉算法的原理和编程技巧。读者可以通过学习该书,了解Halcon的功能和应用场景,掌握机器视觉算法的基本原理和实现方法,从而应用于实际项目中。 ### 回答2: 《halcon机器视觉算法原理与编程实战.pdf》是一本介绍Halcon机器视觉算法原理以及编程实践的书籍。Halcon是一款功能强大的机器视觉开发工具,可用于图像处理、模式识别、测量等领域。 该书首先介绍了Halcon机器视觉的基本原理,包括图像采集与处理、特征提取与匹配、几何变换等内容。通过理解这些基本原理,读者可以建立起对Halcon机器视觉工具的理论框架。 其次,该书还深入探讨了Halcon机器视觉的编程实践。通过具体的案例分析,读者可以学习如何使用Halcon的编程接口进行图像处理与分析。书中的案例包括图像的预处理、目标的检测与定位、物体的测量与识别等,涵盖了Halcon机器视觉算法的各个方面。 此外,该书还介绍了Halcon机器视觉应用的一些相关技术和工具,如图像采集与处理设备、视觉传感器、光源控制等。这些内容有助于读者更好地理解和应用Halcon机器视觉算法。 总体而言,《halcon机器视觉算法原理与编程实战.pdf》是一本适合机器视觉从业者和学习者的实用参考书籍。通过学习该书,读者可以深入了解Halcon机器视觉算法的原理,并学会如何使用Halcon进行编程实践,从而提高机器视觉算法在实际应用中的能力和效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值