halcon学习拓展系列—修改图片分辨率算子modify_image_size(尺度不缩放)

本文介绍了Halcon的modify_image_size算子,用于修改图像分辨率而不进行尺度缩放。通过实例展示了如何使用该算子,并对比了循环拼接和旋转拼接的效率,强调在特定场景下的适用性。此外,提供了旋转拼接的源码。

前面做过两个涉及图像分表率调整的专题

1)《halcon学习拓展系列—根据分辨率调整点云图像分辨率算子adjust_image_size_base_resolution》(尺度缩放)

2)《halcon拓展系列—图像拼接-硬拼接》(尺度不缩放)

其中第二个,可以通过两种方式将两张图片进行拼接,分别是:旋转拼接和循环拼接,在3D点云拼接和2D小视野图像拼接中可以用得到,源码已上传到csdn,但是由于下载次数较多导致1个积分涨到了18个积分,重复下载还需要重复消费积分,这点希望csdn资源下载能够改进下以更合理的方式服务消费者:

1)系统不擅自修改资源积分;

2)重复下载不消费积分

言归正传,这个专题一方面是讲解修改图片分辨率算子modify_image_size,两外一方面把《halcon拓展系列—图像拼接-硬拼接》中的图像拼接中的循环拼接算子mosaicImage和旋转拼接开源,下面开始

 

一、算子说明

modify_image_size(ImageOrig

<think>我们被要求解释Halcon算子scale_image的使用方法、功能及示例。 根据引用[3]中的示例,我们可以看到scale_image的使用: scale_image (Image, ImageInverted, -1, 256) 这个算子用于对图像进行线性灰度变换,其一般形式为: scale_image(Image : ImageScaled : Mult, Add : ) 其中: Image: 输入图像 ImageScaled: 输出图像 Mult: 乘数因子(乘法系数) Add: 加数(加法偏移量) 功能:对输入图像的每个像素执行线性变换,即: g' = g * Mult + Add 其中g是输入图像的像素值,g'是输出图像的像素值。 注意:如果输入图像是多通道图像,则每个通道独立进行变换。 参数说明: Mult和Add可以是标量(应用于所有通道)或元组(分别对应每个通道,此时通道数必须与元组长度匹配)。 典型应用: 1. 调整图像的对比度和亮度:通过设置同的Mult和Add值。 2. 图像反转:当Mult=-1, Add=255(对于8位图像)时,可实现图像反转(如引用[3]中的例子,Add=256可能是笔误,因为8位图像最大值是255,但Halcon会自动截断到0-255)。 3. 灰度值缩放:放大或缩小灰度值范围。 注意事项: - 输出图像的灰度值会被自动截断到0到255(对于8位图像)或者相应的类型范围。 - 如果输入图像是整型,计算过程中会使用浮点数,然后四舍五入到整型。 示例1:图像反转(8位灰度图像) scale_image(Image, ImageInverted, -1, 255) 原图灰度值g,变换后为:g' = 255 - g 示例2:增加图像对比度(对比度翻倍) scale_image(Image, ImageScaled, 2, 0) 此时,灰度值范围扩大一倍,但要注意可能超出255的部分会被截断为255。 示例3:调整图像亮度(增加50) scale_image(Image, ImageScaled, 1, 50) 示例4:同时调整对比度和亮度(对比度增加1.5倍,亮度增加50) scale_image(Image, ImageScaled, 1.5, 50) 在引用[3]的例子中,使用scale_image(Image, ImageInverted, -1, 256)实现图像反转,但注意256对于8位图像来说,实际上相当于0(因为256 mod 256=0)?但Halcon的处理方式实际上是:计算后截断到0-255,所以256会被当作255处理(因为256>255,所以取255)。因此,该操作等价于: g' = g * (-1) + 256 = 256 - g 由于g的范围是0-255,所以256-g的范围是1-256,然后大于255的置为255,所以当g=0时,256-0=256->255;g=255时,256-255=1。这样并是完全的反转(完全反转应该是255-g)。实际上,反转图像的标准做法是使用Mult=-1, Add=255。 因此,引用[3]中的例子可能会产生一个灰度值偏移1的效果(即最大值255变成1,最小值0变成255,中间值也偏移了)。所以,通常我们使用Add=255。 下面我们给出一个完整的Halcon示例程序,展示scale_image的使用: ```halcon * 读取图像 read_image(Image, 'fabrik') * 反转图像:使用Mult=-1, Add=255 scale_image(Image, ImageInverted, -1, 255) * 增加对比度:乘2,增加偏移 scale_image(Image, HighContrast, 2, 0) * 增加亮度:乘1(对比度变),加50(亮度增加) scale_image(Image, Brightened, 1, 50) * 同时调整对比度和亮度 scale_image(Image, Adjusted, 1.5, 50) * 显示结果 dev_open_window(0, 0, 512, 512, 'black', WindowHandle) dev_display(Image) dev_open_window(0, 512, 512, 512, 'black', WindowHandle1) dev_display(ImageInverted) dev_open_window(512, 0, 512, 512, 'black', WindowHandle2) dev_display(HighContrast) dev_open_window(512, 512, 512, 512, 'black', WindowHandle3) dev_display(Brightened) dev_open_window(1024, 0, 512, 512, 'black', WindowHandle4) dev_display(Adjusted) ``` 注意:在实际显示中,由于窗口管理问题,可能需要调整窗口位置和大小。 另外,如果图像是8位,而是16位或者浮点数,则截断范围会同。但通常我们处理的是8位图像。 总结:scale_image是一个基础的灰度变换算子,用于线性调整图像的灰度值。 §§相关问题§§ 1. 如何用scale_image实现伽马校正? 2. scale_image图像归一化有什么关系? 3. 如何处理scale_image导致的灰度值截断问题? 4. 如何同时调整彩色图像的三个通道? </think> ### Halcon算子`scale_image`详解 `scale_image`是Halcon中用于图像灰度值线性变换的核心算子,通过对每个像素进行$g' = g \times Mult + Add$计算实现图像增强[^3]。 #### 功能特性 | 参数 | 类型 | 说明 | 数学表达 | |------|------|------|----------| | `Image` | 输入对象 | 原始图像(支持多通道) | - | | `ImageScaled` | 输出对象 | 变换后图像 | - | | `Mult` | 控制参数 | 乘法系数 | $g \times Mult$ | | `Add` | 控制参数 | 加法偏移量 | $+ Add$ | 变换公式: $$g' = \text{clip}(g \times Mult + Add)$$ 其中$\text{clip}()$将结果限制在$[0,255]$范围内(8位图像) #### 典型应用场景 1. **图像反转**(负片效果) ```halcon read_image(Image, 'part.jpg') scale_image(Image, InvertedImage, -1, 255) // g' = 255 - g ``` *效果*:亮区变暗,暗区变亮[^3] 2. **对比度增强** ```halcon scale_image(Image, HighContrast, 2, -50) // 增强对比度 ``` *原理*:灰度值分布扩展为$[min \times 2-50, max \times 2-50]$ 3. **亮度校正** ```halcon scale_image(Image, BrighterImage, 1, 30) // 整体亮度+30 ``` #### 彩色图像处理 ```halcon * 分离通道单独处理 decompose3(Image, R, G, B) scale_image(R, R_scaled, 1.2, 0) // 增强红色通道 scale_image(G, G_scaled, 0.9, 10) // 减弱绿色通道 compose3(R_scaled, G_scaled, B, ColorAdjusted) ``` #### 技术要点 1. **值域控制**: - 输出值自动截断到图像类型范围(8位图:$[0,255]$) - 16位图需设置`set_system('int_zooming', 'true')` 2. **精度处理**: ```halcon * 浮点图像处理 convert_image_type(Image, FloatImage, 'real') scale_image(FloatImage, ScaledFloat, 0.5, 100.5) ``` 3. **与幂变换结合**(引用[1]): ```halcon * 非线性变换组合 pow_image(Image, PowImage, 1.5) // 伽马校正[^1] scale_image(PowImage, FinalImage, 1.2, 10) ``` #### 实际应用示例 **工业零件检测中的光照补偿**: ```halcon read_image(Image, 'metal_part.png') * 分析灰度直方图 gray_histogram(Image, AbsoluteHisto, RelativeHisto) * 自动计算增强参数(将主要区间[50,150]映射到[30,220]) Mult := 190/100 // (220-30)/(150-50) Add := 30 - 50*Mult scale_image(Image, Enhanced, Mult, Add) * 后续检测处理 threshold(Enhanced, ResizedRegions, 0, 100) ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

谷棵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值