为了将尺寸较大的产品拍完,可采用分区拍摄再拼图的方式。那么,如何使用Halcon中的算子进行图像拼接呢?本文介绍一种在相机无旋转的情况下使用tile_images_offset
进行图像拼接的方法。该方法计算简单,耗时较短。其大致分为3个步骤:一是计算重叠标记点的中心坐标;二是图像切割;三是图像拼接。
计算重叠标记点的中心坐标
为了对两幅图像进行拼接,一定需要在两幅图像中找到相同的标志物,比如在两幅图像中均存在的同一个标志圆。如果该标志圆在第一幅图像的下半部分,而在第二幅图像的上半部分。利用该标志物,在第一幅图像中取标志物中心以上的部分,而在第二幅图像中取标志物中心以下的部分,把取出来的两部分进行拼接即可。因此,分离出标志物并计算物体中心是前提。在下例中是通过阈值和形状选择的方式来找到标志圆,并计算其中心。代码如下:
read_image (Image1, 'F:/Project/1.bmp')
threshold (Image1, Regions, 247, 255)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['area','width','holes_num','column'], 'and', [34328,206,0,165], [54328,406,3,365])
area_center (SelectedRegions, Area, Row, Column)
图像剪切
在得到标记物的中心的坐标值后,根据需要从原图中截取非重叠区域。
crop_rectangle1 (Image1, ImagePart1,0,0,OriginalRow-Row, OriginalColumn)
图像拼接
最关键的一步是调用图像拼接函数。调用拼接函数之前将需要拼接的图像打入数组。
gen_empty_obj (Images)
concat_obj (Images,ImagePart1, Images)
concat_obj (Images,ImagePart2, Images)
tile_images_offset (Images, TiledImage, [0,ImagePart2Height], [0,0],[-1,-1], [-1,-1], [-1,-1], [-1,-1], ImagePart1Width,ImagePart1Height+ ImagePart2Height)