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

机器视觉--图像的运算(减法)

一、引言

在机器视觉和图像处理的领域中,Halcon 作为一款功能强大且备受青睐的软件库,为我们提供了丰富多样的图像处理工具。图像的减法运算便是其中一项基础且关键的操作,它在诸多实际应用场景中扮演着不可或缺的角色,如背景去除、运动检测、缺陷检测等。本文将全方位深入剖析 Halcon 中图像减法运算的原理、实现步骤,并通过详细的演示程序帮助读者更好地理解和运用这一操作。

二、图像减法运算的原理

2.1 基本概念

图像减法运算,简单来说,就是对两幅具有相同尺寸的图像对应像素点的灰度值进行相减操作。假设存在图像 A 和图像 B,它们的尺寸均为 M×N,那么经过减法运算后得到的图像 C 的每个像素点 (i, j) 的灰度值 C (i, j) 由以下公式确定:

2.2 灰度值范围处理

由于像素灰度值通常被限制在一定范围内(例如常见的 0 到 255),当相减的结果超出这个范围时,Halcon 会依据不同的处理方式进行截断或溢出处理。如果相减结果小于 0,在某些情况下会被截断为 0;若结果大于 255,则会被截断为 255。

三、Halcon 中图像减法运算的实现步骤

3.1 读取图像

首先,需要使用 read_image 算子读取要进行减法运算的两幅图像。这是整个处理流程的起始点,确保正确读取到所需的图像数据。

3.2 尺寸一致性检查

在进行减法运算之前,必须保证两幅图像的尺寸完全相同。可以借助 get_image_size 算子分别获取两幅图像的宽度和高度,然后进行比较。若尺寸不一致,需要进行相应的处理,如对其中一幅图像进行缩放操作,以确保后续运算的正确性。

3.3 执行减法运算

使用 sub_image 算子对两幅图像进行减法运算,该算子会按照上述原理对对应像素点的灰度值进行相减操作,得到结果图像。

3.4 显示结果

最后,使用 dev_display 算子将减法运算后的结果图像显示出来,方便用户直观地观察运算效果。

四、演示程序

* 读取背景图像
read_image(BackgroundImage, 'path/to/background_image.jpg')
* 读取前景图像
read_image(ForegroundImage, 'path/to/foreground_image.jpg')

* 获取背景图像的尺寸
get_image_size(BackgroundImage, BackgroundWidth, BackgroundHeight)
* 获取前景图像的尺寸
get_image_size(ForegroundImage, ForegroundWidth, ForegroundHeight)

* 检查图像尺寸是否一致
if (BackgroundWidth != ForegroundWidth || BackgroundHeight != ForegroundHeight)
    * 如果不一致,将前景图像调整为与背景图像尺寸相同
    resize_image(ForegroundImage, ResizedForegroundImage, BackgroundWidth, BackgroundHeight)
    ForegroundImage := ResizedForegroundImage
endif

* 执行图像减法运算
sub_image(ForegroundImage, BackgroundImage, SubtractedImage, 1, 0)

* 显示背景图像
dev_display(BackgroundImage)
disp_continue_message (dev_get_window (), 'black', 'true', '请按任意键继续查看前景图像...')
stop ()

* 显示前景图像
dev_display(ForegroundImage)
disp_continue_message (dev_get_window (), 'black', 'true', '请按任意键继续查看减法运算结果...')
stop ()

* 显示减法运算后的图像
dev_display(SubtractedImage)
disp_continue_message (dev_get_window (), 'black', 'true', '按任意键结束程序...')
stop ()

代码解释

  1. 图像读取:通过 read_image 算子分别读取背景图像和前景图像,这里需要将 'path/to/background_image.jpg' 和 'path/to/foreground_image.jpg' 替换为实际的图像文件路径。
  2. 尺寸检查与调整:使用 get_image_size 算子获取两幅图像的尺寸,若尺寸不一致,使用 resize_image 算子将前景图像调整为与背景图像相同的尺寸。
  3. 减法运算:使用 sub_image 算子对前景图像和背景图像进行减法运算,得到结果图像 SubtractedImage
  4. 图像显示:依次使用 dev_display 算子显示背景图像、前景图像和减法运算后的结果图像,并通过 disp_continue_message 和 stop 算子实现按任意键继续的交互功能。

五、应用场景

5.1 背景去除

在许多图像分析任务中,需要将图像中的背景去除,只保留感兴趣的前景对象。通过将包含前景和背景的图像减去仅包含背景的图像,就可以得到去除背景后的前景图像,方便后续对前景对象进行进一步的分析和处理。

5.2 运动检测

在视频监控等应用中,通过对相邻两帧图像进行减法运算,可以检测出图像中的运动目标。如果某一区域的像素值在两帧之间发生了明显变化,那么在减法运算后的图像中该区域会显示出较大的灰度差异,从而可以识别出运动的物体。

5.3 缺陷检测

在工业生产中,常常需要对产品表面进行缺陷检测。可以先获取正常产品的图像作为参考,然后将待检测产品的图像与参考图像进行减法运算。如果产品表面存在缺陷,那么在减法运算后的图像中缺陷区域会呈现出明显的灰度变化,从而实现缺陷的检测。

六、总结

Halcon 中的图像减法运算是一种基础而强大的图像处理操作,通过对其原理的理解和掌握,结合具体的实现步骤和演示程序,我们可以在不同的应用场景中灵活运用这一操作。无论是背景去除、运动检测还是缺陷检测,图像减法运算都能为我们提供有效的解决方案。希望本文能够帮助读者更好地理解和应用 Halcon 中的图像减法运算,在实际项目中取得更好的效果。同时,读者可以进一步探索 Halcon 的其他功能和算子,将图像减法运算与其他操作相结合,实现更加复杂和高效的图像处理任务。

 


http://www.kler.cn/a/554824.html

相关文章:

  • 【Leetcode 热题 100】1287. 有序数组中出现次数超过25%的元素
  • QT-文件模块(ver6.7.2)还没写完
  • 蓝桥杯备赛1-5大写
  • PySpark检查两个DataFrame的数据是否一致
  • 跨语言语义理解与生成:多语言预训练方法及一致性优化策略
  • 蓝桥杯(B组)-每日一题(1093字符逆序)
  • c语言[递归]母牛的故事,有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
  • 【Axure高保真原型】拖动画图——画矩形案例
  • 基于PostGIS在PostgreSQL数据中实现按照百分比或面积将多边形分割为多个
  • 编写测试计划的六大要素是什么
  • 高效管理 React 状态和交互:我的自定义 Hooks 实践
  • Spring AI如何调用Function Calling
  • 在 Android 开发中如何接入 DeepSeek 聊天工具
  • conda简单命令
  • Hadoop-HA(高可用)机制
  • GPT2 模型训练
  • python中的Pillow 库安装后需要重启吗?
  • Linux系统上同时打印到物理打印机并生成PDF副本方法研究
  • 鸿蒙NEXT开发-网络管理
  • 微信小程序地图map全方位解析