Halcon感兴趣区域(ROI)reduce_domain

Halcon感兴趣区域(ROI)


ROI是Halcon中的一个很重要的概念,为了减少计算量,只关注待检测物体或该物体周围的
一片区域即可,ROI就是图像处理所关注的区域。

1. ROI的意义

创建ROI主要是出于以下两个方面的原因。
(1)因为将要处理的图像缩减到了ROI区域,需要处理的像素数减少了,对于ROI外的像素可以不处理,因此可以加快图像处理的速度。如果原图是1920像素×1280像素,那么对整幅图像进行处理的计算量是非常大的,而需要关注的区域可能只是图像中的某一部分,因此将这部分区域裁剪出来进行处理,可以减少计算量,提高效率。
(2)由于ROI可以作为形状模板,因此在模板匹配时,ROI即为匹配搜索的参考图像。

2. 创建ROl

在采集到原始图像后,即可选择关注的区域作为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)
  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
是的,Halcon中的`affine_trans_image`算子可以处理部分图像。您可以使用`reduce_domain`函数来指定要处理的图像区域以下是一个示例: ```cpp // 创建体并显示图像 HWindow window; window.Create(0, 0, 800, 600); HImage image("path/to/your/image.jpg"); window.DispImage(image); // 获取窗体尺寸 HTuple windowWidth, windowHeight; window.GetWindowExtents(&windowWidth, &windowHeight); // 获取图像尺寸 HTuple imageWidth, imageHeight; image.GetImageSize(&imageWidth, &imageHeight); // 定义部分图像的区域 HTuple row1 = imageHeight / 4; // 部分图像的起始行 HTuple col1 = imageWidth / 4; // 部分图像的起始列 HTuple row2 = imageHeight * 3 / 4; // 部分图像的结束行 HTuple col2 = imageWidth * 3 / 4; // 部分图像的结束列 // 缩小图像区域 HRegion region; region.GenRectangle1(row1, col1, row2, col2); HImage reducedImage = image.ReduceDomain(region); // 定义仿射变换参数 HTuple angle = 30; // 旋转角度 HTuple scale = 1.5; // 缩放比例 // 执行仿射变换 HImage transformedImage; affine_trans_image(reducedImage, &transformedImage, "s", "bilinear", angle, scale, 0, 0); // 在窗体中显示变换后的图像 window.DispImage(transformedImage); ``` 上述示例代码中,我们首先使用`reduce_domain`函数定义了一个部分图像的区域,然后使用`affine_trans_image`对这个部分图像进行了仿射变换,并将变换后的图像显示在窗体中。请注意,您可以根据需求调整部分图像的区域和仿射变换的参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

electrical1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值