创建ROI主要是出于以下两个方面的原因。
(1)因为将要处理的图像缩减到了ROI区域,需要处理的像素数减少了,对于ROI外的像素可以不处理,因此可以加快图像处理的速度。如果原图是1920像素×1280像素,那么对整幅图像进行处理的计算量是非常大的,而需要关注的区域可能只是图像中的某一部分,因此将这部分区域裁剪出来进行处理,可以减少计算量,提高效率。
(2)由于ROI可以作为形状模板,因此在模板匹配时,ROI即为匹配搜索的参考图像。
在采集到原始图像后,即可选择关注的区域作为ROI。ROI可以是任何形状,常规的有矩形、圆形、椭圆,可以是自定义的或者是通过图像处理得出的特定区域。此时,选择的区域还不能称为ROI,它还只是形状或者说是像素范围。如果要将这部分区域变成独立的图像,还需要将其从原图上裁剪出来。
ROI的范围明确后,在Halcon中可以通过reduce_domain算子将其截取出来成为单独的一幅
图片。
这里介绍ROI的生成过程,如图所示。
这里在原图上使用矩形ROI绘制工具指定了一个矩形的4个顶点。使用gen_rectanglel算子生成矩形ROI_0的形状,然后通过reduce_domain从原图中截取出矩形覆盖的这一部分的图像,即为ROI,命名为ImageReduced。在窗口中显示 ImageReduced的内容,即为所关注的ROI图像。实现代码参考如下:
dev_close_window ()
*读取测试图像
read image (Image _display,'data/display')
*获取图像的尺寸
get_image _size (Image _display, imagewidth, imageHeight)
*新建显示窗口,适应图像尺寸
dev_open_window (0, 0, imagewidth, imageHeight, 'black', WindowHandle)
dev_display (Image_display)
*选择ROI,指定矩形顶点坐标
gen_rectanglel (ROI_0, 52, 46, 456, 574)
*从原图中分割出ROI
reduce_domain (Image _display, ROI_0, reducedtmage)
*在新窗口中显示分割后的ROI图像
dev open window (0, 400, imageWidth, imageHeight, 'black', WindowHandlel)
dev _display (reducedImage)