Halcon图像处理入门篇(三)

常用的Halcon操作无外乎是图像、Region、XLD三者之间的转换,也是基于这样的定于,Halcon才有别于其他的图像处理工具。在了解了图像、Region、XLD三者的基本操作外我们需要进一步的了解三者间的转换。

一、开篇

笔者在前述入门篇中忽略了图像数据的操作,这里的主要原因是因为相关图像操作和Opencv实在是太多重合的地方了,所以没有多加赘述。但是,Halcon也有许多Opencv所不具备的图像操作,使得相关算法及功能变得更加简洁而易于操作,以下为相关补充:
1、图像的拼接:

tile_images_offset(Images : TiledImage : OffsetRow, OffsetCol, Row1, Col1, Row2, Col2, Width, Height : )

一般在拼接前会新建一张空白的图片,如下:

gen_image_const (Image_Output, 'byte', ImgR, ImgC)
scale_image (Image_Output, Image_Output, 0, 255)
copy_image (Image_Output, ImageR)
copy_image (Image_Output, ImageG)
copy_image (Image_Output, ImageB)

当然,一般tile_images_offset()这个函数一般会结合点的仿射变化一起用,以便实现两张具有区域重合的图像的凭借

2、图像的重叠:
本操作实际有点像world设置背景的透明度相关操作,只不过对象变成了图像

add_image(Image1, Image2 : ImageResult : Mult, Add : )

3、滤波操作:
滤波实际上和openCV有点类似,比如高斯滤波

gauss_filter(Image : ImageGauss : Size : )

中值滤波:

median_image(Image : ImageMedian : MaskType, Radius, Margin : )

4、图像间的转换:
这里指的是不同格式、不同通道数、大小间的图像间的转换
rgb转灰度图:

rgb1_to_gray (Image, grayImage)

图像缩放:
实际上halcon中缩放并不是那么的重要,应为窗口本省就具有缩放功能,这里一般如果需要输出目标图像的话可能会用到缩放

zoom_image_factor(Image : ImageZoomed : ScaleWidth, ScaleHeight, Interpolation : )

图像裁剪:
halcon裁剪可以通过reduce_domain()来实现,但是它得到的只是图像的数据类型需要通write_image()来实现保存。同时,值得注意的是,通过相关方式保存的的图像大小实际上和原图大小一样,所以可以采用paint_region()的方式保存。虽然保存上可能有点出入,但是实际价值上reduce_domain()可能会更大,毕竟与原图相比,其位置并未发生改变,所以可以作为单独的ROI,也通常用在特征识别上。

reduce_domain(Image, Region : ImageReduced : : )

像素取反:

invert_image(Image : ImageInvert : : )

当然,在halcon中最基本的操作还是图像数据转Region以及XLD

二、图像、Region、XLD三者间的转换

首先需要申明以下,在Halcon的描述中,本质上三者间本来就不错在转换关系,应为三者代表的东西及含义均不同,这里的转换不是指的直接在数值上的转换,而是通过一种东西得到另一种东西的操作。这里为了方便描述,简述上述关系为转换,且并无其它依据,仅代表个人习惯。

1、图像转Region
图像转Region一般采用阈值操作,这里不多加赘述
例子:

binary_threshold(ImageIn,ImageInRegion,'smooth_histo', 'dark', UsedThreshold)

2、图像转XLD
同获取Region一样,获取XLD可以通过阈值的方式

threshold_sub_pix(Image : Border : Threshold : )

当然也可以通过滤波的形式获取

edges_color_sub_pix(Image : Edges : Filter, Alpha, Low, High : )

3、Region转图像
最简单的方式是直接将Region画成图

paint_region(Region, Image : ImageResult : Grayval, Type : )

也有其他的方式如:

region_to_bin()
region_to_label()
region_to_mean()

4、Region转XLD
这里指的是获取Region的轮廓,也可以通过获取一个小的ROI实现

gen_contour_region_xld (SelectedRegions, Contours, 'border')

5、XLD转图像

paint_xld(XLD, Image : ImageResult : Grayval : )

6、XLD转Region
这里指的是闭合的XLD转为Region,如果不是闭合的XLD的话从原理上是无法转换成Region的,即使可以也是通过获闭合XLD的方式实现。

gen_region_contour_xld (SelectedXLD, RegionXLD, 'filled')

三、补充

Region的交并补
交集:intersection (区域1, 区域2, 交集图)
并集:union2(区域1,区域2,并集图)
补集:difference(大区域,小区域,补集图)

你可能感兴趣的:(Halcon,图像处理,图像处理,计算机视觉)