图像基本运算之加法

MATLAB中的图像基本运算
196 篇文章 ¥59.90 ¥99.00
本文详细阐述了MATLAB中图像的加法、减法、乘法和除法操作,包括运算公式和对应的函数imadd、imsubtract、immultiply、imdivide。每个运算都提供了代码示例,说明了如何对具有相同大小和深度的两幅图像进行这些基本运算,并显示结果图像。

图像基本运算之加法

图像的加法是指对两幅图像进行相应位置元素相加,得到一幅新的图像的过程。图像加法的运算公式为:

g(x,y) = f1(x,y) + f2(x,y)

其中g(x,y)表示新图像在(x,y)处的像素值,f1(x,y)和f2(x,y)分别表示两幅原始图像在(x,y)处的像素值。需要注意的是,两幅原始图像必须具有相同的大小和深度。

在MATLAB中,可以使用imadd函数实现图像的加法操作。该函数的语法格式为:

g = imadd(f1,f2)

其中g表示新图像,f1和f2分别表示需要相加的两幅原始图像。代码示例:

% 读取两幅原始图像
img1 = imread(‘image1.jpg’);
img2 = imread(‘image2.jpg’);

% 对两幅原始图像进行相加操作
result = imadd(img1,img2);

% 显示结果图像
imshow(result);
title(‘加法结果’);

图像基本运算之减法

图像的减法是指对两幅图像进行相应位置元素相减,得到一幅新的图像的过程。图像减法的运算公式为:

g(x,y) = f1(x,y) - f2(x,y)

其中g(x,y)表示新图像在(x,y)处的像素值,f1(x,y)和f2(x,y)分别表示两幅原始图像在(x,y)处的像素值。需要注意的是,两幅原始图像必须具有相同的大小和深度。

在MATLAB中,可以使用imsubtract函数实现图像的减法操作。该函数的语法格式为:

g = imsubtract(f1,f

### 图像加法运算的实现方法 在 OpenCV 中,`cv2.add()` 是一种常用的图像加法运算函数。该函数可以将两幅相同尺寸和类型的图像相加,并返回结果图像[^1]。 #### 函数定义 `cv2.add(src1, src2[, dst[, mask]]) → dst` - `src1`: 输入的第一张图像。 - `src2`: 输入的第二张图像。 - `dst`: 输出的结果图像,默认与输入图像具有相同的类型和尺寸。 - `mask`: 可选参数,指定操作区域的掩码。 以下是具体实现的一个例子: ```python import cv2 import numpy as np # 读取两张图像 img1 = cv2.imread('image1.jpg') img2 = cv2.imread('image2.jpg') # 确保两张图像是相同尺寸 if img1.shape == img2.shape: # 使用 cv2.add 进行图像加法运算 result = cv2.add(img1, img2) # 显示结果图像 cv2.imshow('Result', result) cv2.waitKey(0) cv2.destroyAllWindows() else: print("Error: Images must have the same dimensions.") ``` 上述代码展示了如何加载两张图像并执行加法运算。需要注意的是,只有当两张图像具有相同的尺寸和通道数时,才能成功调用 `cv2.add()`。 --- #### 饱和运算 vs 模运算 值得注意的是,OpenCV 的加法运算是基于 **饱和运算** (saturated operation),这意味着像素值不会超过数据类型的上限(例如对于 uint8 类型,最大值为 255)。如果计算结果超出范围,则会截断到边界值。相比之下,Numpy 的加法则采用 **模运算** (modulo operation),即溢出部分会被重新映射回有效范围内[^2]。 以下是对两种方式的对比示例: ```python import cv2 import numpy as np # 创建两个简单的数组 a = np.array([200], dtype=np.uint8) b = np.array([100], dtype=np.uint8) # OpenCV 加法 opencv_add = cv2.add(a, b) # 结果为 [255] # Numpy 加法 numpy_add = a + b # 结果为 [(200+100)%256=44] print(f"OpenCV Add Result: {opencv_add}") print(f"Numpy Add Result: {numpy_add}") ``` 通过运行此代码可以看出两者之间的差异。 --- #### 图像融合(加权加法) 除了基本加法运算外,还可以使用 `cv2.addWeighted()` 来实现图像的线性组合或称为“图像融合”。其公式如下所示: \[ \text{result} = (\alpha \times \text{img1}) + (\beta \times \text{img2}) + \gamma \] 其中: - `\(\alpha\)` 和 `\(\beta\)` 是权重系数; - `\(\gamma\)` 是偏移量。 下面是具体的实现代码: ```python import cv2 import numpy as np # 读取两张图像 img1 = cv2.imread('moon.jpg') img2 = cv2.imread('sspu.png') # 调整图像大小使其一致 resized_img1 = cv2.resize(img1, (img2.shape[1], img2.shape[0])) # 应用加权加法 blended_image = cv2.addWeighted(resized_img1, 0.7, img2, 0.3, 0) # 展示结果 cv2.imshow('Blended Image', blended_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在此代码中,调整了图像大小以匹配维度,并设置了不同的权重来控制每张图像对最终结果的影响程度[^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值