图像噪声是指图像中不随真实场景变化而变化的随机干扰。噪声会影响图像的质量,因此需要对其进行去噪处理。
目录
- 一、图像噪声
- 1.1 噪声类型
- 1.2 结合峰度和偏度判断噪声
- 1.2.1 峰度和偏度
- 1.2.2 常见噪声的峰度和偏度
- 二、代码
- 三、测试结果
- 四、总结
一、图像噪声
图像的像素值统计是指对图像中所有像素值进行统计分析,包括均值、方差、峰度、偏度等。这些统计量可以反映图像的整体特征,也能够用来判断噪声的类型。
1.1 噪声类型
根据均值和方差的不同组合,可以将噪声分为以下几种类型:
均值为零、方差为常数的噪声,称为高斯噪声。高斯噪声是一种常见的噪声类型,其特征是噪声分布符合高斯分布。
均值为零、方差随空间位置变化的噪声,称为高斯白噪声。高斯白噪声是高斯噪声的一种特殊形式,其特征是噪声在空间上是均匀分布的。
均值不为零、方差为常数的噪声,称为均值偏移高斯噪声。均值偏移高斯噪声的特征是噪声在均值上有一个固定的偏差。
均值不为零、方差随空间位置变化的噪声,称为均值偏移高斯白噪声。均值偏移高斯白噪声是均值偏移高斯噪声的一种特殊形式,其特征是噪声在空间上是均匀分布的。
通过计算图像的均值和方差,可以初步判断噪声的类型。例如,如果图像的均值为零、方差为常数,则该图像可能受到高斯噪声的污染。
1.2 结合峰度和偏度判断噪声
仅仅根据均值和方差还不能完全确定噪声的类型,还需要结合其他特征进行判断。例如,可以通过计算噪声的峰度和偏度来进一步判断噪声的类型。
以下是一些常用的图像噪声类型判断方法:
均值和方差:如果均值为零、方差为常数,则可能是高斯噪声;如果均值为零、方差随空间位置变化,则可能是高斯白噪声;如果均值不为零、方差为常数,则可能是均值偏移高斯噪声;如果均值不为零、方差随空间位置变化,则可能是均值偏移高斯白噪声。
峰度和偏度:如果峰度和偏度均接近于零,则可能是高斯噪声;如果峰度和偏度均不为零,则可能是其他噪声类型。
直方图:如果直方图呈现出高斯分布,则可能是高斯噪声;如果直方图呈现出其他分布,则可能是其他噪声类型。
1.2.1 峰度和偏度
噪声的峰度和偏度是噪声的两个重要特征,可以用来描述噪声的分布形状。
峰度(Kurtosis)是指噪声分布尾部的形状。峰度越大,噪声分布尾部越厚,越容易出现极端值。
偏度(Skewness)是指噪声分布对称性的度量。偏度越大,噪声分布越不对称,越容易出现偏离均值的值。
噪声的峰度和偏度可以通过以下公式计算:
其中xi表示噪声的每个值,μ 表示噪声的均值,σ 表示噪声的标准差。
噪声的峰度和偏度可以通过直方图来直观地观察。如果直方图呈现出高斯分布,则噪声的峰度和偏度均接近于零。如果直方图呈现出其他分布,则噪声的峰度和偏度可能不为零。
1.2.2 常见噪声的峰度和偏度
高斯噪声:峰度接近于 3,偏度接近于 0。
均值偏移高斯噪声:峰度接近于 3,偏度接近于均值偏移量。
拉普拉斯噪声:峰度为 3.69,偏度为 1.58。
指数噪声:峰度为 0,偏度为 0。
二、代码
使用代码,只需要修改导入图片路径即可,具体代码如下:
import numpy as np
import matplotlib.pyplot as plt
import cv2def noise_type(img):"""判断图像的噪声类型Args:img: 图像Returns:噪声类型"""# 计算图像的均值和方差img_mean = np.mean(img)img_var = np.var(img)print("图像均值为:",img_mean)print("图像方差为:",img_var)# 计算图像的峰度和偏度img_kurtosis = np.mean((img - img_mean)**4) / (img_var**2)img_skewness = np.mean((img - img_mean)**3) / (img_var**1.5)print("图像的峰度为",img_kurtosis)print("图像的偏度为", img_skewness)# 判断噪声类型if img_mean == 0 and img_var == img_var.max():return "高斯白噪声"elif img_mean != 0 and img_var == img_var.max():return "均值偏移高斯白噪声"elif img_kurtosis == 3 and img_skewness == 0:return "高斯噪声"elif img_kurtosis == 3.69 and img_skewness == 1.58:return "拉普拉斯噪声"elif img_kurtosis == 0 and img_skewness == 0:return "指数噪声"else:return "其他噪声"def plot_hist(img):"""绘制图像直方图Args:img: 图像"""plt.hist(img, bins=256)plt.show()if __name__ == "__main__":# 读取图像img = cv2.imread("Images/input-resize_480360/1.bmp",0)# 判断噪声类型noise_type = noise_type(img)print("噪声类型:", noise_type)# 绘制直方图plot_hist(img)
三、测试结果
运行上面代码后得到的结果如下,运行代码后需要等待一会。
下面是图像的直方图
四、总结
以上就是使用Python,通过统计图像像素值初步分析图像噪声类型。
注意,博文中的方法只是初步大致估计,并不能准确确定噪声类型,具体噪声类型还要根据实际情况判断。
总结不易,多多支持,谢谢!