Halcon算子应用和技巧1

提示:若没有查找的算子,可以评论区留言,会尽快更新


前言

提示:可以使用搜索小工具搜索对应算子名称:

本篇博文主要用于记录学习Halcon中算子的应用场景,及其使用代码和图像展示。只讲通俗易懂使用方法,不讲原理,不讲原理,不讲原理,重要的事情说三遍。


提示:以下是本篇文章正文内容,下面案例可供参考,注意参数坐标的使用,能帮助你理解算子

一、Halcon应用?

Halcon 是一个强大的图像处理工具,该工具是为了解决机器视觉项目任务而创建的。

二、算子汇总

每一博文仅展示10个算子,点击此链接进行查询所有算子,并点击对应算子跳转相应博文。'
跳转链接

三、应用算子

1. tile_images_offset()

先上代码:

read_image (Image, 'claudia')
crop_rectangle1 (Image, ImageParts, [10, 230], [60, 120], [219, 339], [299, 219])
concat_obj (Image, ImageParts, Images)
tile_images_offset (Images, TiledImage, [0, 290, 390], [0, 340, 210], [-1, -1, -1], [-1, -1, -1], [-1, -1, -1], [-1, -1, -1], 500, 500)

解析1:
该方法用于拼接图像,将扣出的图像偏移一定的位置拼接得到新的图像。
拼接
解析2:
算子亦可用来当相机无法将目标图像拍摄完整时,采用拼图的方式将目标图像完整拼出。参考下图可以看出,在相机拍摄大小一样的情况下,相机固定不动,移动目标图像,从1变成2,计算目标四角星的列移动距离,即是相机相对物体的移动距离,至此将两张图按照偏移量即可将图像拼接,拼接结果如上图中最上方结果所示。
偏移距离


2. crop_part()

先上代码:

read_image(Image, 'printer_chip/printer_chip_01')
dev_close_window()
get_image_size(Image, Width, Height)
dev_open_window(0, 0, Width/3, Height/3, 'black', WindowHandle)
dev_display(Image)
*裁剪
crop_part(Image, ImagePart, 424, 253, 400, 400)
dev_display(ImagePart)

解析:
用于裁剪图像区域
在这里插入图片描述


3. hom_mat2d_identity()

先上代码:

dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
* draw_rectangle1(WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1(Rectangle, 103, 205, 167, 303)
*创建旋转矩阵
hom_mat2d_identity(HomMat2DIdentity)
*平移
hom_mat2d_translate(HomMat2DIdentity, 30, 30, HomMat2DTranslate)
affine_trans_region(Rectangle, RegionAffineTrans, HomMat2DTranslate, 'nearest_neighbor')

*旋转
hom_mat2d_rotate(HomMat2DIdentity, rad(90), 167, 303, HomMat2DRotate)
affine_trans_region(Rectangle, RegionAffineTrans1, HomMat2DRotate, 'nearest_neighbor')

*缩放
hom_mat2d_scale(HomMat2DIdentity, 2, 2, 167,303, HomMat2DScale)
affine_trans_region(Rectangle, RegionAffineTrans2, HomMat2DScale, 'nearest_neighbor')

解析:
该方法实现 平移、旋转、缩放矩阵构建,围绕旋转(缩放)中心变化,就是一种图像变换的过程。affine_trans_region()针对区域而言,affine_trans_image()针对图像而言,affine_trans_contour_xld()针对XLD轮廓而言。

在这里插入图片描述


4. hom_vector_to_proj_hom_mat2d()

先上代码:

*关闭当前显示窗口,清空屏幕
dev_close_window ()
*读取测试图像
read_image (Image_display, 'data/display.jpg')
*将图像转化为灰度图像
rgb1_to_gray (Image_display, GrayImage)
*获取图像的尺寸
get_image_size(Image_display,imageWidth, imageHeight)
*新建显示窗口,适应图像尺寸
dev_open_window (0, 0, imageWidth, imageHeight, 'black', WindowHandle1)
dev_display (GrayImage)
XCoordCorners := [70,74,418,337]
YCoordCorners := [61,540,533,93]
hom_vector_to_proj_hom_mat2d (XCoordCorners, YCoordCorners, [1,1,1,1], [75,75,405,405], [100,540,540,100], [1,1,1,1], 'normalized_dlt', HomMat2D)
*投影变换
projective_trans_image (Image_display, Image_rectified, HomMat2D, 'bilinear', 'false', 'false')
* 显示校正结果
dev_display (Image_rectified)

解析:
该方法将原始坐标点映射到新的坐标点,并计算仿射矩阵。就是一种图像校正的过程。
在这里插入图片描述
在这里插入图片描述


5. shape_trans()

先上代码:

*区域形态学
read_image(Image, 'D:/HALCON_learn/code/tu_1.jpg')
get_image_size(Image, Width, Height)
dev_close_window()
dev_open_window(0, 0, Width/1.5, Height/1.5, 'black', WindowHandle)
gen_circle(Circle, 200, 200, 100.5)
gen_circle(Circle1, 200, 200, 150.5)
*相减
difference(Circle1, Circle, RegionDifference1)
*区域形状转换
shape_trans(RegionDifference1, RegionTrans, 'inner_rectangle1')

解析
该算子主要是将区域转变为另一种形状的区域。红色圆环区域转变为长方形矩形区域。
区域转换


6. skeleton()

先上代码:

*区域形态学
read_image(Image, 'D:/HALCON_learn/code/tu_1.jpg')
get_image_size(Image, Width, Height)
dev_close_window()
dev_open_window(0, 0, Width/1.5, Height/1.5, 'black', WindowHandle)
dev_display(Image)
rgb1_to_gray(Image, GrayImage)
threshold(GrayImage, Region, 67, 132)
mean_image(GrayImage, ImageMean, 17, 17)
dyn_threshold(GrayImage, ImageMean, RegionDynThresh, 5, 'light')
connection(RegionDynThresh, ConnectedRegions)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 3000, 99999)
select_shape(ConnectedRegions, SelectedRegions1, 'area', 'and', 3000, 5000)

*得到像素骨架,是一个像素,只有一个像素宽
skeleton(SelectedRegions1, Skeleton)
dev_display(Region1)

解析
该算子一般用于求区域的的骨架。左图为区域,右图箭头指示为骨架,区域部分为了展示我使用margin展示。
在这里插入图片描述


7. boundary()

先上代码:

*区域形态学
read_image(Image, 'D:/HALCON_learn/code/tu_1.jpg')
get_image_size(Image, Width, Height)
dev_close_window()
dev_open_window(0, 0, Width/1.5, Height/1.5, 'black', WindowHandle)
dev_display(Image)

rgb1_to_gray(Image, GrayImage)
threshold(GrayImage, Region, 67, 132)

mean_image(GrayImage, ImageMean, 17, 17)
dyn_threshold(GrayImage, ImageMean, RegionDynThresh, 5, 'light')

connection(RegionDynThresh, ConnectedRegions)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 3000, 99999)
select_shape(ConnectedRegions, SelectedRegions1, 'area', 'and', 3000, 5000)

*获取边缘区域  和骨架那个区分
boundary(SelectedRegions1, RegionBorder, 'inner')

解析:
顾名思义,获得区域的边界。图示仅截取部分图展示,详细图参考算子6中的左图左上角。
边界


8. reduce_domain()

先上代码:

*关闭当前显示窗口,清空屏幕
dev_close_window ()
*读取测试图像
read_image (Image_display, 'data/display.jpg')
*获取图像的尺寸
get_image_size(Image_display,imageWidth, imageHeight)
*新建显示窗口,适应图像尺寸
dev_open_window (0, 0, imageWidth, imageHeight, 'black', WindowHandle)
dev_display (Image_display)
gen_rectangle1 (ROI_0, 52, 46, 400, 148)
*裁剪屏幕区域
reduce_domain (Image_display, ROI_0, reducedImage)
dev_open_window (0, 400, imageWidth, imageHeight, 'black', WindowHandle1)
* 显示校正结果
dev_display (reducedImage)

解析
作用:减少计算量,只关注需要的区域;
PS:图中虽然展示结果很像裁剪图像的结果,实际并非如此,该算子作用结束,图像尺寸仍是原尺寸大小,只是其非关注区域不再参与计算,将其像素值(RGB指示区)在halcon中变成 -;注意和裁剪算子区分。
在这里插入图片描述


9. 坐标系的轴x y 参数如何定

这里参考两个算子

gen_rectangle1 (ROI_0, 52, 46, 400, 148)
hom_mat2d_rotate(HomMat2DIdentity, rad(90), 167, 303, HomMat2DRotate)

解析
针对不同的区域和图像算子,理解算子参数的需求,何时Colum是X轴,何时Colum是Y轴参数,看下图,
这主要原因在于,一个是二维坐标系,一个是三维坐标系。

在这里插入图片描述


10. equ_histo_image()

先上代码:

read_image (board, 'data/boardEqu')
rgb1_to_gray (board, GrayImage)
equ_histo_image (GrayImage, ImageEquHisto)
*生成直方图
gray_histo (board, board, AbsoluteHisto1, RelativeHisto1)
gray_histo (ImageEquHisto, ImageEquHisto, AbsoluteHisto2, RelativeHisto2)
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_set_color ('red')
*显示
gen_region_histo (Histo1, AbsoluteHisto1, 255, 5, 1)
dev_set_color ('green')
gen_region_histo (Histo2, AbsoluteHisto2, 255, 450, 1)

解析:
作用:将灰度值分布打散不集中,让其均匀分布,实现图像增强效果
左图是原图;右图增强后结果
PS:主要用于灰度值比较集中的情况

在这里插入图片描述


以上内容陆续更新。。。

内容如有错误之处,望不吝指出,谢谢

以上内容陆续更新。。。


  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Halcon算子中文手册CHM是Halcon系统提供的一种在线帮助文档格式。CHM是“Compiled HTML Help”的缩写,即编译的HTML帮助文档。 Halcon算子中文手册CHM是为了方便中文用户学习和使用Halcon算子而特别准备的。它包含了Halcon算子的详细说明、用法示例以及相关函数的参数说明。通过查阅CHM手册,用户可以了解各种算子的作用、输入输出参数的含义,以及如何在Halcon使用它们。这对于Halcon初学者来说是一个很好的学习工具。 CHM手册的使用非常简单方便,用户只需要在Halcon界面中点击相关算子的帮助按钮,就可以快速打开相应的CHM手册页面。在CHM手册页面中,用户可以通过目录、索引、搜索等方式浏览和查找需要的信息。CHM手册的页面包含了算子的详细解释和代码示例,帮助用户更好地理解和应用算子Halcon算子中文手册CHM的提供,为中文用户提供了一种方便、快捷的学习和查阅资源。它不仅节省了用户在网上搜索资料的时间,还提供了更专业、系统、全面的算子说明,从而帮助用户更加高效地使用Halcon进行图像处理和分析。无论是新手还是有一定经验的用户,都能通过CHM手册快速查找所需的信息,提升开发和应用的效率。 ### 回答2: Halcon算子中文手册CHM是一个用于参考和学习Halcon算子的详细文件。CHM是Halcon提供的一种帮助文档格式,可以在Windows操作系统上浏览和搜索。 这个中文手册提供了Halcon算子的描述、参数、使用方法以及示例代码等内容。用户可以通过搜索或按照算子分类来查找所需的算子。同时,手册还提供了算子的示例图像,帮助用户理解算子的作用和效果。 使用这个手册,用户可以更加方便地了解和学习Halcon算子。无论是初学者还是有一定经验的用户,都可以通过手册来查找所需的算子,并且了解该算子的具体用法。手册的详细信息和示例代码有助于用户更好地理解算子的功能和使用场景。 总之,Halcon算子中文手册CHM是一个非常有价值的工具,为用户提供了方便快捷的查阅方式,帮助用户学习和运用Halcon算子,提升图像处理的能力。 ### 回答3: Halcon算子中文手册CHM是Halcon软件的一个辅助文档,用于帮助用户快速查询和理解Halcon算子使用方法和功能。CHM是一种经典的Windows帮助文档格式,可以在Windows系统上直接打开和阅读。 Halcon算子中文手册CHM包含了Halcon软件中各种不同类型的算子的详细说明和示例代码,涵盖了图像处理、机器视觉、测量、工业自动化等众多领域。用户可以根据自己的需求,通过关键字搜索或者按照分类浏览的方式找到所需的算子,并了解其参数设置和使用方法。 使用Halcon算子中文手册CHM可以帮助用户更方便地学习和掌握Halcon算子使用技巧,从而更高效地完成图像处理和分析任务。用户可以通过手册中的示例代码了解算子的实际应用场景,并根据自己的需求进行修改和优化。 总之,Halcon算子中文手册CHM是一本非常实用的参考资料,对于使用Halcon进行图像处理的用户来说,是不可或缺的帮助工具。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值