3.1 加法运算
加法的通用表达式如式 C(x,y)=A(x,y)+B(x,y) 所示,其中,A(x,y)和B(x,y)为输入图像,C(x,y)为输出图像。假设当前存在某个静止场景的多幅图片集合,如果这些图片都被随机噪声干扰,那就可使用加法进行一定程度的去噪。
同时,我们需明白以下代码的意思:
①def GaussianNoise(image, mean, var):
noise = np.random.normal(mean, var ** 0.5, image.shape)
noisy_image = image + noise
noisy_image = np.clip(noisy_image, 0, 1)
return noisy_image
该段代码定义了一个名为GaussianNoise
的函数。该函数接受三个参数:
image
:输入的图像。
mean
:高斯噪声的均值,控制噪声的偏移程度。
var
:高斯噪声的方差,控制噪声的分散程度。
np.random.normal
用于生成符合高斯分布的随机数。其中,image.shape
:指定生成的噪声数组的形状,使其与输入图像的形状相同,以确保后续能正确叠加到图像上。
np.clip
用于将数组中的元素限制在指定的范围内。
②img.flags.writeable=True
img
代表一幅图像。img.flags
用于访问该数组的标志属性。writeable
是 flags
对象中的一个属性,它是一个布尔值。当 writeable
为 True
时,表示该数组是可写的,即你可以修改数组中的元素值;当 writeable
为 False
时,表示该数组是只读的,尝试修改数组元素会引发 ValueError
异常。
③k=np.zeros([img.shape[0],img.shape[1]])
for i in range(100):
j=GaussianNoise(img,0,0.05)
k=k+j
k=k/100
np.zeros([img.shape[0], img.shape[1]])
会创建一个与输入图像 img
具有相同行数和列数的零矩阵 k
。这个矩阵将用于累加每次添加高斯噪声后的图像。
j = GaussianNoise(img, 0, 0.05)
:调用 GaussianNoise
函数,将输入图像 img
加上均值为 0、方差为 0.05 的高斯噪声,得到加噪后的图像 j
。
k = k + j
:将每次加噪后的图像 j
累加到矩阵 k
中。经过 100 次循环后,k
中存储的是 100 张加噪图像的像素值总和。
k=k/100:将累加后的矩阵 k
除以 100,得到 100 张加噪图像的平均值。由于高斯噪声是随机分布的,多次平均后噪声的影响会相互抵消,从而达到一定的去噪效果。
④plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
这两行代码用于设置全局参数,保证中文和负号能够被正确显示。第一句用于保证代码运行结果的中文能正常显示并使用黑体,第二句用于保证负号能正常显示。
代码及运行结果如图2.12所示。


3.2 减法运算
减法表达式如式 C(x,y)=A(x,y)-B(x,y) 所示,又称差分运算。将同一景物不同时间拍摄的图像进行减法运算,,可以实现对该区域的动态监测等操作。
代码及运行结果如图2.13所示。


3.3 乘法运算
乘法运算表达式如式 C(x,y)=A(x,y)×B(x,y) 所示。乘法运算能够实现灰度值的改变,达到修改图像亮度的目的。
同时,我们需明白以下代码的意思:
cv2.multiply函数:它用于对输入的两个数组对应元素进行相乘操作。
代码及运行结果如图2.14所示。


3.4 除法运算
除法运算表达式如式 C(x,y)=A(x,y)÷B(x,y) 所示。除法运算可以改变像素的灰度值,调整图像亮度。也能够用来校正成像设备的非线性影响,常在CT等医学图像中用到。
同时,我们需明白以下代码的意思:
cv2.divide函数:此函数用于对输入的两个数组对应元素进行除法操作。
代码及运行结果如图2.15所示。

