halcon例程 -- 逐字细究(五)

* This example shows an application case from the automobile
* industry. A monitoring system in a car  checks the sidewalk
* for roadsigns to support the driver in case of any inattention.
* To show the imaging process we focus on two road signs,
* the attention and the dead end road sign. First the models
* of both signs are generated and then detected in a street
* sequence.

dev_close_window ()
*关闭当前活动的窗口
* Read in model images.
* While the attention sign is from a synthetic source,
* the model for the dead end sign is from another sequence.
*read_image (ImageAttentionSign, 'road_signs/attention_road_sign')
* Image Acquisition 01: Code generated by Image Acquisition 01
read_image (ImageAttentionSign, 'F:/halcon/road_signs/attention_road_sign.jpg')
*读取图像
*read_image (ImageInit, 'road_signs/street_01')
* Image Acquisition 02: Code generated by Image Acquisition 02
read_image (ImageInit, 'F:/halcon/road_signs/street_01.jpg')
*读取图像
dev_open_window_fit_image (ImageInit, 0, 0, -1, -1, WindowHandle)
**按照指定图像的大小来打开一个窗口
*Image 输入图像名称,窗口的大小按该图像的实际大小来设定
*Row 输入窗口左上角的坐标y值,默认:0
*Column 输入窗口左上角的坐标x值,默认:0
*WidthLimit 输入宽度界限,默认: -1.该图像的最大宽度
*HeightLimit 输入高度界限,默认: -1.该图像的最大高度
*WindowHandle 输出新创建的窗口句柄
dev_update_off ()
*关闭dev_update_pc/dev_update_var/dev_update_window,停止刷新pc/变量/窗口
dev_set_line_width (2)
*设置区域,图形,XLD轮廓的线宽
dev_set_color ('green')
*设置区域,图形,XLD轮廓的颜色,直到下次该函数的调用更改
dev_set_draw ('margin')
*设置填充模式
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
*设置显示字体格式

* Some values for the later matching process are initialized
* The Attention sign has a significant red part, the
* dead end sign a blue one. Hence, we can extract the respective
* channels from the color images.
Channel := [3,1]
* In this example, we have significant scalings of the road signs.
ScaleRMin := [0.5,0.4]
ScaleRMax := [0.8,2.0]
* One could add an anisotropic scaling for the exhaustive search.
* However, this makes the detection slower and is not required here.
ScaleCMin := [1.0,1.0]
ScaleCMax := [1.0,1.0]
* Add names to the signs.
RoadSign := ['Attention','Dead end']
HFac := [47.0,50.0]

* Prepare the attention sign picture for the model
* creation process.
access_channel (ImageAttentionSign, Image, Channel[0])
*设置一个图像获取设备指定参数,通道数由access_channel()函数决定
*MUltiChannelImage 输入多通道图像
*Image 将多输入通道输出一个图像
*Channel 通道数量,默认:1
zoom_image_factor (Image, ImageZoomed, 0.1, 0.1, 'weighted')
**把一个图像缩放到指定比例大小
*Image 输入图像 
*ImageZoomed 输出缩放后的图像
*ScaleWidth 宽度方向的比例 [0.001,10]
*ScaleHeight 高度方向的比例 [0.001,10]
*Interpolation 篡改类型
inspect_shape_model (ImageZoomed, ModelImages, ModelRegions, 3, 20)
**创建一个轮廓模型基于金字塔的影像
*Image 输入图像 
*ModelImages 输出图像基于金字塔的影像
*ModelRegions 输出模型区域
*NumLevels 使用金字塔层数
*Contrast 设置对比度
create_planar_uncalib_deformable_model (ImageZoomed, 3, 0.0, 0.0, 0.1, ScaleRMin[0], ScaleRMax[0], 0.05, 1.0, 1.0, 0.5, 'none', 'use_polarity', 'auto', 'auto', [], [], ModelID)
**创建一个(不带校正透视的)可变形模型
*Template 输入的图像模板名称,用来产生模型的图像
*NumLevels 最大的金字塔(分析法)层数,默认为: 'auto'
*AngleStart 输入匹配时的起始角度
*AngleExtent 输入匹配时的角度范围
*AngleStep 输入匹配旋转角度的步长,默认:'auto'
*ScaleRMin y值方向的最小缩放比例
*ScaleRMax y值方向的最大缩放比例
*ScaleRStep y值方向比例缩放的步长
*ScaleCMin x值方向的最小缩放比例
*ScaleCMax x值方向的最大缩放比例
*ScaleCStep x值方向比例缩放的步长
*Optimization 设置模板优化和模板创建方法,默认:'none'
*Metric 设置匹配方法 默认: 'use_polarity'
*Contrast 设置对比度,默认: 'auto'
*MinContrast 输入图像中匹配物体的最小差别(对比度),默认:5
*ParamName 输入一般参数的名称,默认: '[]'
*ParamValue 输入一般参数值,默认:'[]'
*ModelID 输出模型句柄
Models := ModelID



read_image (ImageDeadEnd, 'road_signs/dead_end_road_sign')
*读取图像
access_channel (ImageDeadEnd, Image, Channel[1])
*设置一个图像获取设备指定参数,通道数由access_channel()函数决定
gray_closing_shape (Image, ImageClosing, 5, 5, 'octagon')
**关闭带选择掩码的灰度值
*Image 输入图像
*ImageClosing 输出关闭矩形掩码灰度后的图像
*MaskHeight 输入矩形掩码(滤波器)的高度 [3,511]
*MaskWidth 输入矩形掩码(滤波器)的宽度 [3,511]
*MaskShape 输入掩码的外形,默认: 'octagon'
zoom_image_factor (ImageClosing, ImageZoomed, 0.4, 0.4, 'weighted')
*把一个图像缩放到指定比例大小
gen_rectangle1 (Rectangle1, 28, 71, 67, 95)
*获取一个指定大小的矩形区域
reduce_domain (ImageZoomed, Rectangle1, ImageReduced)
*只显示指定大小区域部分的图像
create_planar_uncalib_deformable_model (ImageReduced, 3, 0.0, 0.0, 0.1, ScaleRMin[1], ScaleRMax[1], 0.05, ScaleRMin[1], ScaleRMax[1], 0.1, 'none', 'use_polarity', 'auto', 'auto', [], [], ModelID)
*创建一个(不带校正透视的)可变形模型

* The following three lines theoretically show how to
* query specific parameters of a model.
* Practically, the derived information is not needed
* within the program.
get_deformable_model_params (ModelID, 'angle_step', AngleStep)
**提取一个可变形模型的参数
*ModelID  输入可变形模型句柄
*GenParamNames 输入需要提取的参数名称 默认: 'angle_start'
*GenParamValues 输出对应的参数值
get_deformable_model_params (ModelID, 'scale_r_step', ScaleRStep)
*提取一个可变形模型的参数
Models := [Models,ModelID]

* Generate ROI in which the road signs are expected.
* We can discard not significant parts of the image, in which
* no road sign can be located.
gen_rectangle1 (Rectangle, 115, 0, 360, 640)
*获取一个指定大小的矩形区域

* Search in image sequence
for Index := 1 to 16 by 1
    OutputString := []
    TotalTime := 0
    *read_image (Image, 'road_signs/street_' + Index$'.02')
    read_image (Image, 'F:/halcon/road_signs/street_'+Index$'.02'+'.jpg')
    *读取图像
    * We are using color images, hence the ROI of the search image
    * can significantly be reduced based on the color.
    determine_area_of_interest (Image, Rectangle, AreaOfInterest)
    **在图像中输出可能存在目标的所有区域(该函数为不能分类的本地函数,没有帮助文档)
    *Image 输入图像 
    *Rectangle 输入指定大小的矩形region
    *AreaOfInterest 输出可能存在路标的区域
    reduce_domain (Image, AreaOfInterest, ImageReduced)
    *只显示指定大小区域部分的图像
    dev_display (Image)
    *显示图像
    * 
    for Index2 := 0 to |Models| - 1 by 1
        * 
        * Depending on the street sign to be found, we use different color
        * channels of the image and the operator find_planar_uncalib_deformable_model
        * with different parameters because of the varying dimensions of the models.
        access_channel (ImageReduced, ImageChannel, Channel[Index2])
        *设置一个图像获取设备指定参数,通道数由access_channel()函数决定
        count_seconds (Time1)
        **通过的时间,即当前时间
        find_planar_uncalib_deformable_model (ImageChannel, Models[Index2], 0, 0, ScaleRMin[Index2], ScaleRMax[Index2], ScaleCMin[Index2], ScaleCMax[Index2], 0.8, 1, 0, 2, 0.4, [], [], HomMat2D, Score)
        **找出图像中一个不带校正的可变形模型的最佳匹配
        *Image 输入需要匹配的图像
        *ModelID 输入可变性模型的句柄
        **AngleStart 输入匹配时的起始角度
        *AngleExtent 输入匹配时的角度范围
        *AngleStep 输入匹配旋转角度的步长,默认:'auto'
        *ScaleRMin y值方向的最小缩放比例
        *ScaleRMax y值方向的最大缩放比例
        *ScaleRStep y值方向比例缩放的步长
        *ScaleCMin x值方向的最小缩放比例
        *ScaleCMax x值方向的最大缩放比例
        *MinScore 输入最小的匹配值(匹配质量),考虑到模板的一半被遮挡,默认 0.5
        *NumMatches 在图像上找到模板的最大个数
        *MaxOverlap 定义了找到的两个目标区域最多重叠的系数如果MaxOverlap=0,找到的目标区域不能存在重叠,如果MaxOverlap=1,所有找到的目标区域都要返回。
        *NumLevels 搜索时使用的金字塔层数,默认值:0
        *Greediness 搜索时的"贪婪程度"(0:safe but slow 慢而安全,1:fast but matches may be missed 快而可能匹配失败)[0,1]
        *ParamName 输入一般参数的名称,默认: '[]'
        *ParamValue 输入一般参数值,默认:'[]'
        *HomMat2D 输入匹配过程中所需要的变换矩阵,如倾斜、反相、镜像、平移、旋转等
        *Score 输出目标模型的匹配值(匹配的可信度)
        count_seconds (Time2)
        **通过的时间,即当前时间,通常两个相同函数配套使用
        Time := Time2 - Time1
        TotalTime := TotalTime + Time
        * 
        * Display found models.
        if (|HomMat2D|)
            get_deformable_model_contours (ModelContours, Models[Index2], 1)
            **提取一个可变形模型中对应的轮廓
            *ModelContours 输出可变形模型对应的轮廓
            *ModelID 输入可变形模型句柄
            *Level 输入等高线所在金字塔的层数,默认:1
            projective_trans_contour_xld (ModelContours, ContoursProjTrans, HomMat2D)
            **对一个XLD轮廓进行射影变换
            *Contours 输入需要进行射影的等高线轮廓
            *ContoursProjTrans 输出被射影的等高线
            *HomMat2D 输入变换矩阵
            gen_region_contour_xld (ContoursProjTrans, Region, 'filled')
            **从XLD元组中创建一个区域,该函数使用前必须先创建一个XLD(轮廓),gen_contour_polygon_xld
            *Coutour 输入一个XLD
            *Region 输入一个xld转换的区域
            *Mode 模式,默认为 'filled'
            union1 (Region, RegionU)
            **返回输入区域的并集
            *Region 输入区域
            *RegionUnion 输出并集区域
            area_center (RegionU, Area, R, C)
            *计算区域的面积及中心坐标
            get_region_runs (RegionU, Row, ColumnBegin, ColumnEnd)
            **查询一个区域的扫描宽度编码
            *Region 输入区域
            *Row 输出扫描线的y值编号
            *ColumnBegin 输出扫描线的起始x值坐标 ColumnBegin == Row
            *ColumnEnd 输出扫描线的终止x值坐标 ColumnEnd == Row
            H := max(Row) - min(Row)
            Fac := H / HFac[Index2]
            gen_circle (Circle, R, C, 45 * Fac)
            *获取一个指定大小的圆形区域
            dev_display (Circle)
            gen_circle (Circle, R, C, 50 * Fac)
            *获取一个指定大小的圆形区域
            dev_display (Circle)
            dev_display (ContoursProjTrans)
            if (Index2 == 0)
                OutputString := 'Attention sign found in : ' + (Time * 1000)$'.2f' + ' ms \n'
            else
                OutputString := 'Dead end sign found in  : ' + (Time * 1000)$'.2f' + ' ms \n'
            endif
        endif
    endfor
    if (|OutputString| == 0)
        OutputString := 'No sign found in : ' + (Time * 1000)$'.2f' + ' ms \n'
    endif
    OutputString := ['Search for all models in: ' + (TotalTime * 1000)$'.2f' + ' ms',OutputString]
    disp_message (WindowHandle, OutputString, 'window', 10, 10, 'black', 'true')
    *在窗体上显示打印的信息
    disp_continue_message (WindowHandle, 'black', 'true')
    *在窗体上显示按F5继续运行的信息
    stop ()
endfor
dev_display (Image)
disp_message (WindowHandle, 'Program finished.\nPress \'Run\' to clear all deformable models.', 'window', 10, 10, 'black', 'true')
*在窗体上显示打印的信息
stop ()
* Clean the memory of the models.
for Index1 := 0 to 1 by 1
    clear_deformable_model (Models[Index1])
    **清除指定的可变形模型,释放内存空间
    *ModelID 输入要清除的可变形模型句柄
endfor
### 回答1: Halcon 10.0 是一款强大的机器视觉开发软件,支持在Windows系统上运行。halcon10.0-windows.exe 是Halcon 10.0 软件的可执行文件,用于在Windows系统上安装和运行该软件。 通过运行 halcon10.0-windows.exe 文件,用户可以开始安装Halcon 10.0 软件。安装过程中,用户需要按照提供的安装向导进行操作,包括选择安装路径、设置组件和功能、以及输入必要的许可证信息等。完成安装后,用户可以在自己的计算机上打开Halcon 10.0 软件。 Halcon 10.0 软件提供了丰富的功能和工具,用于开发和实现机器视觉应用。它支持图像处理、图像分析、模式匹配、三维视觉、相机校准等多项功能。用户可以通过Halcon 10.0 软件进行图像的预处理、特征提取、目标识别和测量等操作,从而实现各种视觉检测和测量任务。 除了功能强大的视觉算法和工具,Halcon 10.0 软件还提供了友好的用户界面和丰富的编程接口,使得用户可以根据自己的需求进行定制化开发和编程。用户可以通过编写脚本或使用常见的编程语言如C++、C#等来编写自己的机器视觉应用程序。 总而言之,halcon10.0-windows.exe 是Halcon 10.0 软件的安装文件,通过安装和运行该软件,用户可以方便地进行机器视觉应用的开发和实现。 ### 回答2: Halcon 10.0-windows.exe是一种软件程序,它是由MVTec Software GmbH开发的一款专业机器视觉软件。Halcon被广泛应用于各种工业领域,如制造业、物流、医疗等,用于图像处理、检测、识别和测量等方面的任务。 Halcon 10.0-windows.exe是Halcon 10.0版本的Windows操作系统的可执行文件。这意味着它可以在Windows操作系统上运行,并且可以直接从该可执行文件启动Halcon 10.0软件。 Halcon 10.0是Halcon软件最新的一个重要版本,它引入了许多新功能和改进,以提供更好的机器视觉解决方案。该版本具有更高的性能、更强大的图像处理能力和更便捷的用户界面。用户可以使用Halcon 10.0进行图像分析、模式识别、目标检测、形状测量等任务。此外,Halcon 10.0还支持多种编程语言和平台,并提供了丰富的开发工具和函数库,以便用户根据自己的需求进行定制和扩展。 对于使用Halcon进行机器视觉应用的用户来说,Halcon 10.0-windows.exe是一个非常重要的文件,它提供了启动Halcon 10.0软件的能力。用户只需双击该文件,就可以快速启动Halcon 10.0,并开始使用其功能进行图像处理和分析。对于那些希望在Windows操作系统上进行机器视觉开发和应用的用户来说,Halcon 10.0-windows.exe无疑是一个不可或缺的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值