在图像信号处理(ISP)中,Bayer噪声去除(BNR)是关键的一步。本文将介绍几种常用的去噪方法,包括中值滤波、均值滤波、双边滤波、高斯滤波和非局部均值滤波,并通过示例代码进行对比分析。
1. 图像去噪方法简介
中值滤波 (Median Filtering)
中值滤波是一种非线性滤波方法,通过取窗口内所有像素值的中值来替代中心像素值。它对椒盐噪声有很好的去除效果。
均值滤波 (Mean Filtering)
均值滤波是一种线性滤波方法,通过取窗口内所有像素值的平均值来替代中心像素值。它可以平滑图像,但会使边缘变得模糊。
双边滤波 (Bilateral Filtering)
双边滤波结合了空间邻近和像素值相似度的双重加权,能够在平滑图像的同时保留边缘细节。
高斯滤波 (Gaussian Filtering)
高斯滤波使用高斯核对图像进行卷积,能够平滑图像,同时保留部分边缘信息。
非局部均值滤波 (Non-Local Means Denoising)
非局部均值滤波根据像素与其邻域的相似性来平滑图像,能够在保留更多细节的同时有效去除噪声。
2. 代码实现
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像并转换为灰度图像
image_path = 'images/kodak_fence.tif'
image = cv2.imread(image_path, cv2.IMREAD_COLOR)
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 添加噪声到图像
def add_noise(img):
noise = np.random.randn(*img.shape) * 25
noisy_img = img + noise
noisy_img = np.clip(noisy_img, 0, 255).astype(np.uint8)
return noisy_img
noisy_image = add_noise(gray_image)
# 中值滤波
median_filtered = cv2.medianBlur(noisy_image, 5)
# 均值滤波
mean_filtered = cv2.blur(noisy_image, (5, 5))
# 双边滤波
bilateral_filtered = cv2.bilateralFilter(noisy_image, 9, 75, 75)
# 高斯滤波
gaussian_filtered = cv2.GaussianBlur(noisy_image, (5, 5), 0)
# 非局部均值滤波
nlm_filtered = cv2.fastNlMeansDenoising(noisy_image, None, 30, 7, 21)
# 可视化结果
plt.figure(figsize=(20, 10))
plt.subplot(2, 4, 1)
plt.imshow(gray_image, cmap='gray')
plt.title('Original Image')
plt.axis('off')
plt.subplot(2, 4, 2)
plt.imshow(noisy_image, cmap='gray')
plt.title('Noisy Image')
plt.axis('off')
plt.subplot(2, 4, 3)
plt.imshow(median_filtered, cmap='gray')
plt.title('Median Filtered')
plt.axis('off')
plt.subplot(2, 4, 4)
plt.imshow(mean_filtered, cmap='gray')
plt.title('Mean Filtered')
plt.axis('off')
plt.subplot(2, 4, 5)
plt.imshow(bilateral_filtered, cmap='gray')
plt.title('Bilateral Filtered')
plt.axis('off')
plt.subplot(2, 4, 6)
plt.imshow(gaussian_filtered, cmap='gray')
plt.title('Gaussian Filtered')
plt.axis('off')
plt.subplot(2, 4, 7)
plt.imshow(nlm_filtered, cmap='gray')
plt.title('Non-Local Means Filtered')
plt.axis('off')
plt.show()
3. 去噪方法的对比分析
通过以上方法的对比,可以看出:
- 中值滤波在去除椒盐噪声方面效果显著,但对细节保留较差。
- 均值滤波能够平滑图像,但会使图像变得模糊。
- 双边滤波在平滑图像的同时,能够很好地保留边缘细节。
- 高斯滤波在平滑图像的同时也能保留一定的边缘信息。
- 非局部均值滤波能够在保留更多细节的同时有效去除噪声,效果最好。
标签:gray,plt,BNR,image,ISP,滤波,模块,cv2,noisy From: https://blog.csdn.net/2401_83885036/article/details/140758484