前言
???????ROI是Halcon中的一个很重要的概念,为了减少计算量,只关注待检测物体或该物体周围的一片区域即可,ROI就是图像处理所关注的区域。
一、ROI的意义
???????创建ROI主要是出于以下两个方面的原因。 ???????1)、因为将要处理的图像缩减到了ROI区域,需要处理的像素数减少了,对于ROI外的像素可以不处理,因此可以加快图像处理的速度。如果原图是1920像素x1280像素,那么对整幅图像进行处理的计算量是非常大的,而需要关注的区域可能只是图像中的某一部分,因此将这部分区域裁剪出来进行处理,可以减少计算量,提高效率。 ???????2)、由于ROI可以作为形状模板,因此在模板匹配时,ROI即为匹配搜索的参考图像。
二、创建ROI
1.ROI实现
???????在采集到原始图像后,即可选择关注的区域作为ROI。ROI可以是任何形状,常规的有矩形、圆形、椭圆,可以是自定义的或者是通过图像处理得出的特定区域。此时,选择的区域还不能称为ROI,它还只是形状或者说是像素范围。如果要将这部分区域变成独立的图像,还需要将其从原图上裁剪出来。 ???????ROI的范围明确后,在Halcon中可以通过 reduce domain算子将其截取出来成为单独的一幅图片。需要注意的是,通过reduce_domain确实能获得特定区域Region位置的图像。但是,reduce_domain是缩小一个图像的定义域,并不缩小图像的实际尺寸,即新图像ImageReduced尺寸大小并未发生变化。如果使用get_image_size来计算ImageReduced图像的尺寸,其尺寸和原图Image一样。 ???????如果需要对图像尺寸进行裁剪,可以使用crop_domain算子。crop_domain能够对图像的尺寸进行剪裁。而且,其一系列的domain算子均能对图像尺寸进行剪裁。
2.示例
???????代码如下:
dev_close_window()
read_image(Image, 'display')
get_image_size(Image, Width, Height)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
dev_display(Image)
gen_rectangle1(Rectangle, 30, 20, 450, 560)
reduce_domain(Image, Rectangle, ImageReduced)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle1)
dev_display(ImageReduced)
???????效果如图所示:
总结
参考文章: 1.Halcon中 reduce_domain算子和crop_domain算子的使用及配合 2.Halcon机器视觉算法原理与编程实战/杨青编著.北京大学出版社
|