本节将简要介绍Halcon中有关图像的两类基本运算,分别是代数运算和逻辑运算。除此之外,还介绍几种特殊的代数运算。
目录
1.引言
2. 基本运算
2.1 加法运算
2.2 减法运算
2.3 乘法运算
2.4 除法运算
2.5 综合实例
3. 逻辑运算
3.1 逻辑与运算
3.2 逻辑或运算
3.3 逻辑非运算
3.4 逻辑异或运算
3.5 综合实例
4. 特殊运算
4.1 图像反转
4.2 图像灰度缩放
1.引言
图像运算指以图像为像素为单位进行的操作(有时称为pixel-level)。具体的运算主要包括算术和逻辑运算。
- 算术运算:包括加、减、乘、除,以及基于四种基本运算的复合运算。
- 逻辑运算:包括与、或、非、同或、异或运算等等。
2. 基本运算
本节将逐一介绍上述各类基本运算的实现过程,重点介绍各类运算对应的Halcon算子。
Halcon提供的图像代数运算算子分为两类,一类是基础算子,包括“加、减、乘、除”,另一类是复合运算算子,比如线性加权运算。
为了讨论方便,本节分别用和表示两幅待处理的图像,用表示结果图像。
2.1 加法运算
图像的加法运算可用下式表示:
Halcon使用add_image算子实现图像相加运算,即对应位置的像素点相加。
add_image(Image1, Image2, ResultImage, Mult, Add)
参数说明:
- Image1:输入图像 1。
- Image2:输入图像 2。
- ResultImage:输出图像,存储运算结果。
- Mult:乘法因子(可选,默认为 1)。
- Add:加法因子(可选,默认为 0)。
2.2 减法运算
图像的减法运算可用下式表示:
Halcon使用sub_image算子实现图像相加运算,即对应位置的像素点相减。
sub_image(Image1, Image2, ResultImage, Mult, Add)
2.3 乘法运算
图像的乘法运算可用下式表示:
Halcon使用mult_image算子实现图像点乘运算,即对应位置的像素点相乘。
mult_image(Image1, Image2, ResultImage, Mult, Add)
2.4 除法运算
图像的除法运算可用下式表示:
Halcon使用div_image算子实现图像除法运算,即对应位置的像素点相除。
div_image(Image1, Image2, ResultImage, Mult, Add
2.5 综合实例
以下是一个完整的示例,展示如何对两幅图像进行加、减、乘、除运算:
* 读取图像
read_image(Image1, 'image1.png')
read_image(Image2, 'image2.png')
* 加法
add_image(Image1, Image2, AddResult, 1, 0)
* 减法
sub_image(Image1, Image2, SubResult, 1, 0)
* 乘法
mult_image(Image1, Image2, MultResult, 1, 0)
* 除法
div_image(Image1, Image2, DivResult, 1, 0)
* 显示结果
dev_display(AddResult)
dev_display(SubResult)
dev_display(MultResult)
dev_display(DivResult)
下面统一说明一些注意事项:
- 图像尺寸:参与运算的两幅图像必须具有相同的尺寸。
- 图像类型:通常要求图像类型一致(如 byte、uint2、real 等)。
- 溢出处理:运算结果可能会超出图像数据类型的范围,Halcon 会自动进行截断或归一化处理。
3. 逻辑运算
在 Halcon 中,图像的逻辑运算是对图像的像素值进行逐像素的逻辑操作(如与、或、非、异或等)。这些操作通常用于二值图像(像素值为 0 或 1),但也可以应用于多通道图像或灰度图像。
3.1 逻辑与运算
对两幅图像的像素值进行逐像素的逻辑与操作:
Halcon使用bit_and算子实现图像相加运算,即对应位置的像素点取逻辑“与”运算。
bit_and(Image1, Image2, ResultImage)
参数说明:
- Image1:输入图像 1。
- Image2:输入图像 2。
- ResultImage:输出图像,存储逻辑与运算的结果。
3.2 逻辑或运算
对两幅图像的像素值进行逐像素的逻辑或操作:
Halcon使用bit_or算子实现图像或运算,即对应位置的像素点取逻辑“或”运算。
bit_or(Image1, Image2, ResultImage)
3.3 逻辑非运算
对图像的像素值进行逐像素的逻辑非操作(取反):
Halcon使用bit_not算子实现图像非运算,即对应位置的像素点取逻辑“非”运算。
bit_not(Image, ResultImage)
3.4 逻辑异或运算
对两幅图像的像素值进行逐像素的逻辑异或操作:
Halcon使用bit_xor算子实现图像异或运算,即对应位置的像素点取逻辑“异或”运算。
bit_xor(Image1, Image2, ResultImage)
3.5 综合实例
以下是一个完整的示例,展示如何对两幅图像进行逻辑与、或、非、异或运算:
* 读取图像
read_image(Image1, 'image1.png')
read_image(Image2, 'image2.png')
* 逻辑与运算
bit_and(Image1, Image2, AndResult)
* 逻辑或运算
bit_or(Image1, Image2, OrResult)
* 逻辑非运算
bit_not(Image1, NotResult)
* 逻辑异或运算
bit_xor(Image1, Image2, XorResult)
* 显示结果
dev_display(AndResult)
dev_display(OrResult)
dev_display(NotResult)
dev_display(XorResult)
最后,说一下注意事项
- 图像类型:逻辑运算通常用于二值图像(像素值为 0 或 1),但也可以应用于灰度图像或多通道图像。
- 图像尺寸:参与运算的两幅图像必须具有相同的尺寸。
- 数据类型:如果图像不是二值图像,Halcon 会将其转换为二值图像后再进行逻辑运算。
4. 特殊运算
再介绍几种Halcon提供的几种特殊运算情况。
4.1 图像反转
Halcon中使用invert_image算子用于对图像的像素值进行反转操作。
对于灰度图像,图像的反转运算如下:
该算子的声明如下:
invert_image(Image, ImageInvert)
参数说明:
- Image:输入图像(可以是灰度图像或多通道图像)。
- ImageInvert:输出图像,存储反转后的结果。
注意事项:
- 图像类型:invert_image 适用于灰度图像和多通道图像。
- 数据类型:反转操作的结果与输入图像的数据类型一致(例如,8 位图像的反转结果仍然是 8 位图像)。
- 二值图像:对于二值图像(像素值为 0 或 1),反转操作会将 0 变为 1,1 变为 0。
以下是一个简单的示例,展示如何使用 invert_image 对图像进行反转操作:
* 读取图像
read_image(Image, 'example_image.png')
* 对图像进行反转操作
invert_image(Image, ImageInvert)
* 显示原图和反转后的图像
dev_display(Image)
dev_display(ImageInvert)
4.2 图像灰度缩放
Halcon中使用scale_image算子用于对图像的像素值进行灰度缩放操作。
对于灰度图像,图像的灰度缩放运算如下:
该算子的声明如下:
scale_image(Image, ImageScaled, Mult, Add)
参数说明:
- Image:输入图像(可以是灰度图像或多通道图像)。
- ImageScaled:输出图像,存储缩放和偏移后的结果。
- Mult:缩放因子(乘法系数)。
- Add:偏移量(加法系数)。
以下是一个简单的示例,展示如何使用 scale_image 对图像进行缩放和偏移操作:
* 读取图像
read_image(Image, 'example_image.png')
* 对图像进行缩放和偏移操作
Mult := 2.0 * 缩放因子
Add := 50 * 偏移量
scale_image(Image, ImageScaled, Mult, Add)
* 显示原图和缩放后的图像
dev_display(Image)
dev_display(ImageScaled)
注意事项:
- 数据类型:scale_image 的输出图像数据类型与输入图像一致。如果缩放后的像素值超出数据类型的范围,Halcon 会自动进行截断。
- 多通道图像:对于多通道图像(如 RGB 图像),scale_image 会对每个通道分别进行缩放和偏移操作。
- 性能:scale_image 是一个高效的算子,适用于实时图像处理。
(未完待续,最新更新2025-02-02)
本专栏将介绍基于Halcon的各种传统经典的数字图像处理技术,所介绍内容基本与Gonzalez的教材保持一致。作为学习和实践DIP技术的入门教程。
感谢大家的支持和浏览,本专栏将持续更新,每篇的篇幅控制在5000字左右,这样大家阅读起来也比较轻松。估计2025年上半年完成全部内容,欢迎加收藏。但由于到了假期,更新的速度不会很快。
在专栏全部完成之前,所有内容将一直免费。