当前位置: 首页 > article >正文

基础篇03-图像的基本运算

本节将简要介绍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)。具体的运算主要包括算术和逻辑运算。

  1. 算术运算:包括加、减、乘、除,以及基于四种基本运算的复合运算。
  2. 逻辑运算:包括与、或、非、同或、异或运算等等。

2. 基本运算

本节将逐一介绍上述各类基本运算的实现过程,重点介绍各类运算对应的Halcon算子。

Halcon提供的图像代数运算算子分为两类,一类是基础算子,包括“加、减、乘、除”,另一类是复合运算算子,比如线性加权运算。

为了讨论方便,本节分别用A(x,y)B(x,y)表示两幅待处理的图像,用C(x,y)表示结果图像。

2.1 加法运算

图像的加法运算可用下式表示:

C(x,y)=A(x,y)+B(x,y)

Halcon使用add_image算子实现图像相加运算,即对应位置的像素点相加。

add_image(Image1, Image2, ResultImage, Mult, Add)

参数说明:

  • Image1:输入图像 1。
  • Image2:输入图像 2。
  • ResultImage:输出图像,存储运算结果。
  • Mult:乘法因子(可选,默认为 1)。
  • Add:加法因子(可选,默认为 0)。

2.2 减法运算

图像的减法运算可用下式表示:

C(x,y)=A(x,y)-B(x,y)

Halcon使用sub_image算子实现图像相加运算,即对应位置的像素点相减。

sub_image(Image1, Image2, ResultImage, Mult, Add)

2.3 乘法运算

图像的乘法运算可用下式表示:

C(x,y)=A(x,y)\times B(x,y)

Halcon使用mult_image算子实现图像点乘运算,即对应位置的像素点相乘。

mult_image(Image1, Image2, ResultImage, Mult, Add)

2.4 除法运算

图像的除法运算可用下式表示:

C(x,y)=A(x,y)\div B(x,y)

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 逻辑与运算

    对两幅图像的像素值进行逐像素的逻辑与操作:

    C(x,y)=A(x,y)\cap B(x,y)

    Halcon使用bit_and算子实现图像相加运算,即对应位置的像素点取逻辑“与”运算。

    bit_and(Image1, Image2, ResultImage)

    参数说明

    • Image1:输入图像 1。
    • Image2:输入图像 2。
    • ResultImage:输出图像,存储逻辑与运算的结果。

    3.2 逻辑或运算

    对两幅图像的像素值进行逐像素的逻辑或操作:

    C(x,y)=A(x,y)\cup B(x,y)

    Halcon使用bit_or算子实现图像或运算,即对应位置的像素点取逻辑“或”运算。

    bit_or(Image1, Image2, ResultImage)

    3.3 逻辑非运算

    对图像的像素值进行逐像素的逻辑非操作(取反):

    C(x,y)=\overline{A(x,y)}

    Halcon使用bit_not算子实现图像非运算,即对应位置的像素点取逻辑“非”运算。

    bit_not(Image, ResultImage)

    3.4 逻辑异或运算

    对两幅图像的像素值进行逐像素的逻辑异或操作:

    C(x,y)=A(x,y)\bigoplus B(x,y)

    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算子用于对图像的像素值进行反转操作。

    对于灰度图像,图像的反转运算如下:

    C(x,y)=I_{max}-A(x,y)=255-A(x,y)

    该算子的声明如下:

    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算子用于对图像的像素值进行灰度缩放操作。

    对于灰度图像,图像的灰度缩放运算如下:

    C(x,y)=M\times A(x,y)+N

    该算子的声明如下:

    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年上半年完成全部内容,欢迎加收藏。但由于到了假期,更新的速度不会很快。

    在专栏全部完成之前,所有内容将一直免费。

    相关文章:

    基础篇03-图像的基本运算

    本节将简要介绍Halcon中有关图像的两类基本运算,分别是代数运算和逻辑运算。除此之外,还介绍几种特殊的代数运算。 目录 1.引言 2. 基本运算 2.1 加法运算 2.2 减法运算 2.3 乘法运算 2.4 除法运算 2.5 综合实例 3. 逻辑运算 3.1 逻辑与运算 …...

    工具的应用——安装copilot

    一、介绍Copilot copilot是一个AI辅助编程的助手,作为需要拥抱AI的程序员可以从此尝试进入,至于好与不好,应当是小马过河,各有各的心得。这里不做评述。重点在安装copilot的过程中遇到了一些问题,然后把它总结下&…...

    面试问题知识

    文章目录 1. Linux 和 CentOS基础指令:VMware 和 CentOS:扩充问题: 2. 前端开发(JS、CSS)JavaScript:CSS:扩充问题: 3. 数据库(MySQL)基础语法:事…...

    Alibaba开发规范_编程规约之命名风格

    文章目录 命名风格的基本原则1. 命名不能以下划线或美元符号开始或结束2. 严禁使用拼音与英文混合或直接使用中文3. 类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等4. 方法名、参数名、成员变量、局部变量使用 low…...

    MATLAB中的IIR滤波器设计

    在数字信号处理中,滤波器是消除噪声、提取特征或调整信号频率的核心工具。其中,无限脉冲响应(IIR)滤波器因其低阶数实现陡峭滚降的特性,被广泛应用于音频处理、通信系统和生物医学工程等领域。借助MATLAB强大的工具箱&…...

    vector容器(详解)

    本文最后是模拟实现全部讲解,文章穿插有彩色字体,是我总结的技巧和关键 1.vector的介绍及使用 1.1 vector的介绍 https://cplusplus.com/reference/vector/vector/(vector的介绍) 了解 1. vector是表示可变大小数组的序列容器。…...

    nginx目录结构和配置文件

    nginx目录结构 [rootlocalhost ~]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp # POST 大文件暂存目录 ├── conf # Nginx所有配置文件的目录 │ ├── fastcgi.conf # fastcgi相关参…...

    deepseek本地部署会遇到哪些坑

    在本地部署DeepSeek(或其他类似AI模型)时,可能会遇到以下常见问题及解决方案: 1. 硬件资源不足 问题表现: GPU不兼容(如型号过旧)、显存不足(OOM错误)或CPU模式性能极低。解决方案: 确认GPU支持CUDA,检查显存需求(如至少16GB显存)。使用nvidia-smi监控显存,通过降…...

    使用 PyTorch 实现逻辑回归并评估模型性能

    1. 逻辑回归简介 逻辑回归是一种用于解决二分类问题的算法。它通过一个逻辑函数(Sigmoid 函数)将线性回归的输出映射到 [0, 1] 区间内,从而将问题转化为概率预测问题。如果预测概率大于 0.5,则将样本分类为正类;否则分…...

    python学opencv|读取图像(五十二)使用cv.matchTemplate()函数实现最佳图像匹配

    【1】引言 前序学习了图像的常规读取和基本按位操作技巧,相关文章包括且不限于: python学opencv|读取图像-CSDN博客 python学opencv|读取图像(四十九)原理探究:使用cv2.bitwise()系列函数实现图像按位运算-CSDN博客…...

    【VUE案例练习】前端vue2+element-ui,后端nodo+express实现‘‘文件上传/删除‘‘功能

    近期在做跟毕业设计相关的数据后台管理系统,其中的列表项展示有图片展示,添加/编辑功能有文件上传。 “文件上传/删除”也是我们平时开发会遇到的一个功能,这里分享个人的实现过程,与大家交流谈论~ 一、准备工作 本次案例使用的…...

    使用真实 Elasticsearch 进行高级集成测试

    作者:来自 Elastic Piotr Przybyl 掌握高级 Elasticsearch 集成测试:更快、更智能、更优化。 在上一篇关于集成测试的文章中,我们介绍了如何通过改变数据初始化策略来缩短依赖于真实 Elasticsearch 的集成测试的执行时间。在本期中&#xff0…...

    【R语言】函数

    一、函数格式 如下所示: hello:函数名;function:定义的R对象是函数而不是其它变量;():函数的输入参数,可以为空,也可以包含参数;{}:函数体,如果…...

    Vue 3 30天精进之旅:Day 12 - 异步操作

    在现代前端开发中,异步操作是一个非常常见的需求,例如从后端API获取数据、进行文件上传等任务。Vue 3 结合组合式API和Vuex可以方便地处理这些异步操作。今天我们将重点学习如何在Vue应用中进行异步操作,包括以下几个主题: 异步操…...

    VSCode插件Live Server

    简介:插件Live Server能够实现当我们在VSCode编辑器里修改 HTML、CSS 或者 JavaScript 文件时,它都能自动实时地刷新浏览器页面,让我们实时看到代码变化的效果。再也不用手动刷新浏览器了,节省了大量的开发过程耗时! 1…...

    50. 正点原子官方系统镜像烧写实验

    一、Windows下使用OTG烧写系统 1、在Windos使用NXP提供的mfgtool来向开发烧写系统。需要用先将开发板的USB_OTG接口连接到电脑上。 Mfgtool工具是向板子先下载一个Linux系统,然后通过这个系统来完成烧写工作。 切记!使用OTG烧写的时候要先把SD卡拔出来&…...

    在C#中,什么是多态如何实现

    在C#中,什么是多态?如何实现? C#中的多态性 多态性是面向对象编程的一个核心概念,他允许对象以多种形式表现.在C#中,多态主要通过虚方法,抽象方法和接口来实现. 多态性的存在使得同一个行为可以有多个不同的表达形式 即同一个接口可以使用不同的实例来执行不同的操作 虚方…...

    搜索引擎友好:设计快速收录的网站架构

    本文来自:百万收录网 原文链接:https://www.baiwanshoulu.com/14.html 为了设计一个搜索引擎友好的网站架构,以实现快速收录,可以从以下几个方面入手: 一、清晰的目录结构与层级 合理划分内容:目录结构应…...

    扩散模型(三)

    相关阅读: 扩散模型(一) 扩散模型(二) Latent Variable Space 潜在扩散模型(LDM;龙巴赫、布拉特曼等人,2022 年)在潜在空间而非像素空间中运行扩散过程,这…...

    it基础使用--5---git远程仓库

    it基础使用–5—git远程仓库 1. 按顺序看 -git基础使用–1–版本控制的基本概念 -git基础使用–2–gti的基本概念 -git基础使用–3—安装和基本使用 -git基础使用–4—git分支和使用 2. 什么是远程仓库 在第一篇文章中,我们已经讲过了远程仓库,每个本…...

    Baklib如何改变内容管理平台的未来推动创新与效率提升

    内容概要 在信息爆炸的时代,内容管理平台成为了企业和个人不可或缺的工具。它通过高效组织、存储和发布内容,帮助用户有效地管理信息流。随着技术的发展,传统的内容管理平台逐渐暴露出灵活性不足、易用性差等局限性,这促使市场需…...

    100.1 AI量化面试题:解释夏普比率(Sharpe Ratio)的计算方法及其在投资组合管理中的应用,并说明其局限性

    目录 0. 承前1. 夏普比率的基本概念1.1 定义与计算方法1.2 实际计算示例 2. 在投资组合管理中的应用2.1 投资组合选择2.2 投资组合优化 3. 夏普比率的局限性3.1 统计假设的限制3.2 实践中的问题 4. 改进方案4.1 替代指标4.2 实践建议 5. 回答话术 0. 承前 如果想更加全面清晰地…...

    Ubuntu 下 nginx-1.24.0 源码分析 ngx_debug_init();

    目录 ngx_debug_init() 函数: NGX_LINUX 的定义: ngx_debug_init() 函数: ngx_debug_init() 函数定义在 src\os\unix 目录下的 ngx_linux_config.h 中 #define ngx_debug_init() 也就是说这个环境下的 main 函数中的 ngx_debug_init() 这…...

    基于人脸识别的课堂考勤系统

    该项目是一个基于人脸识别的课堂考勤系统,使用Python开发,结合了多种技术实现考勤功能。要开发类似的基于人脸识别的考勤系统,可参考以下步骤: 环境搭建:利用Anaconda创建虚拟环境,指定Python版本为3.8&am…...

    开启 AI 学习之旅:从入门到精通

    最近 AI 真的超火,不管是工作还是生活里,到处都能看到它的身影。好多小伙伴都跑来问我,到底该怎么学 AI 呢?今天我就把自己学习 AI 的经验和心得分享出来,希望能帮到想踏入 AI 领域的朋友们! 一、学习内容有哪些 (一)编程语言 Python 绝对是首选!它在 AI 领域的生态…...

    13 尺寸结构模块(size.rs)

    一、size.rs源码 // Copyright 2013 The Servo Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE…...

    16.[前端开发]Day16-HTML+CSS阶段练习(网易云音乐五)

    完整代码 网易云-main-left-rank&#xff08;排行榜&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name&q…...

    ARM嵌入式学习--第十天(UART)

    --UART介绍 UART(Universal Asynchonous Receiver and Transmitter)通用异步接收器&#xff0c;是一种通用串行数据总线&#xff0c;用于异步通信。该总线双向通信&#xff0c;可以实现全双工传输和接收。在嵌入式设计中&#xff0c;UART用来与PC进行通信&#xff0c;包括与监控…...

    MoonBit 编译器(留档学习)

    MoonBit 编译器 MoonBit 是一个用户友好&#xff0c;构建快&#xff0c;产出质量高的编程语言。 MoonBit | Documentation | Tour | Core This is the source code repository for MoonBit, a programming language that is user-friendly, builds fast, and produces high q…...

    【TypeScript】基础:数据类型

    文章目录 TypeScript一、简介二、类型声明三、数据类型anyunknownnervervoidobjecttupleenumType一些特殊情况 TypeScript 是JavaScript的超集&#xff0c;代码量比JavaScript复杂、繁多&#xff1b;但是结构更清晰 一、简介 为什么需要TypeScript&#xff1f; JavaScript的…...