机器视觉入门——Halcon软件学习<2>

例程分析笔记

二、方法/边缘提取(像素精度)/autobahn.hdev

* autobahn.hdev: Fast detection of lane markers
* 
*dev_update_window 指定操作员调用返回的所有图标对象是否必须显示在活动图形窗口中
*如果只在图形窗口中显示选定的对象,则应将此选项设置为“关闭”,对象应该由 dev_display 显示
dev_update_window ('off')
*关闭现存的窗口(初始化的过程)
dev_close_window ()
*打开新窗口WindowID,(00)与(768575)角对角线像素坐标值
dev_open_window (0, 0, 768, 575, 'black', WindowID)
*初始化MinSize的值为30
MinSize := 30
*得到关于'init_new_image'的信息,记录到Information
*从而确保在具有相同配置的系统上重复执行程序时,过滤器返回的值是一致的(Information为true)
get_system ('init_new_image', Information)
set_system ('init_new_image', 'false')
*生成网格形式,生成网格的区域512*512
gen_grid_region (Grid, MinSi*ze, MinSize, 'lines', 512, 512)
*把Grid这个区域剪成矩形区域StreetGrid
clip_region (Grid, StreetGrid, 130, 10, 450, 502)
*用于显示线形的宽度为3像素
dev_set_line_width (3)
*设置线形的颜色为green
dev_set_color ('green')
*读入图像ActualImage,存储目录为'autobahn/scene_00'
read_image (ActualImage, 'autobahn/scene_00')
*显示这个图像ActualImage
dev_display (ActualImage)
*婷婷
stop ()
*显示被裁剪的网格区域StreetGrid
dev_display (StreetGrid)
*婷婷again
stop ()
*进入for循环用于边缘检测,一共要检测29for i := 0 to 28 by 1
	*读入原图ActualImage
    read_image (ActualImage, 'autobahn/scene_' + (i$'02'))
	*将给定图像的定义域StreetGrid缩小到指定区域Mask。 新定义域Mask计算为旧定义域与区域的交集
    reduce_domain (ActualImage, StreetGrid, Mask)
    *
    sobel_amp (Mask, Gradient, 'sum_abs', 3)
    *圈选目标区域
    threshold (Gradient, Points, 20, 255)
    dilation_rectangle1 (Points, RegionDilation, MinSize, MinSize)
    reduce_domain (ActualImage, RegionDilation, StripGray)
    threshold (StripGray, Strip, 190, 255)
    fill_up (Strip, RegionFillUp)
    dev_display (ActualImage)
    dev_display (RegionFillUp)
endfor
*线形宽度为1
dev_set_line_width (1)
*更新新窗口
dev_update_window ('on')
*读取图像信息
set_system ('init_new_image', Information)

三、方法/边缘提取(亚像素精度)/edges_sub_pix.hdev

* This example shows how subpixel precise edges can be
* extracted from an image.
* 这个例子展示了亚像素精确边缘如何,从图像中提取
*
*关闭图形窗口
dev_close_window ()
*读入图片Image,目录地址fabrik
read_image (Image, 'fabrik')
*打开适应尺寸的窗口dev_open_window_fit_image(Image : : Row, Column, WidthLimit, HeightLimit : WindowHandle)
*新窗口WindowHandle的位置由参数 Row 和 Column 给出,它们定义了图形窗口左上角的位置。
*WidthLimit 和 HeightLimit 必须包含一个元组,每个元组有两个元素。
*第一个元素定义最小尺寸,第二个元素定义新图形窗口的最大尺寸。
*如果 WidthLimit 为空或负数,则为[500,800];如果 HeightLimit 为空或负数,则为[400,600]*开一个与图片Image尺寸相符的新窗口WindowHandle
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
* The default parameter were adapted to find more
* connected edges in the image.
*
*用canny算法对图像Image的边缘Edges进行提取,后两位为提取的范围min与max
edges_sub_pix (Image, Edges, 'canny', 2, 12, 22)
*dev_set_part 用于设置图像在图形窗口中显示的部分(裁剪窗口与图形的显示比例,不对原图进行影响)
*参数 Row1 和 Column1 指定左上角,(00*Row2 和 Column2 指定要显示的图像部分的右下角。(511511dev_set_part (0, 0, 511, 511)
*将原图Image给显示出来
dev_display (Image)
*设置开发环境的给边缘上色的颜色个数
dev_set_colored (6)
*显示边缘线
dev_display (Edges)
*在WindowID这个窗口,显示有true纯色背景板,字体颜色为Black的“Press Run(F5) to continue”这段话
disp_continue_message (WindowHandle, 'black', 'true')
*又见你,婷婷
stop ()
* Zoom into the image to enable detailed edge inspection
*窗口只显示图形的一部分,是那一部分呢?
*显示部分左上角为图形Image像素坐标(160250*显示部分的右下角为图形Image像素坐标(210300dev_set_part (160, 250, 210, 300)
*显示原图Image
dev_display (Image)
*显示边缘线
dev_display (Edges)

学习要求:
1.给出程序流程图-解题思路(应用的关键算子)
2.对其中关键算子应用方法详细分析说明-算子的应用
3.修改算子参数或替换其他算子,并分析运行结果-改着玩(寻找可替代的算子,并比较其优劣)
*
学习总结:
1.打开适应图片尺寸的窗口dev_open_window_fit_image(图片名称,[x11,x12],[y11,12],[x21,x22],[y21,y22],新窗口名称)
打开默认窗口dev_open_window (x1, y1, x2, y2, ‘背景色’, 新窗口名称);
2.窗口显示图片的位置dev_set_part
(x1,y1,x2,y2)
3.核心算子-边缘提取edges_sub_pix(图片,边缘,算法,参数,min,max)
来改变改变算法,看看有什么差别吧~

致谢
1.哈尔滨工业大学,仪器科学与工程学院,叶东教授;
2.b站,联为机器视觉halocn教程视频;
3.HDevelop18.05,文件,浏览HDevelop实例程序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值