首页 > 其他分享 >ISP-BNR 模块去噪方法对比

ISP-BNR 模块去噪方法对比

时间:2024-07-28 23:25:54浏览次数:17  
标签:gray plt BNR image ISP 滤波 模块 cv2 noisy

在图像信号处理(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

相关文章

  • 模块3 面向对象编程高级 --- 第十一章:异常处理
    第十一章异常处理主要知识点1、异常产生的原因2、标准异常类3、Java的异常处理机制4、异常的创建5、异常的抛出6、异常语句的编程学习目标熟悉异常产生的原因和标准异常类的用法。能够运用异常处理机制编写Java程序,提高安全性;11.1异常的......
  • 即使安装了模块,虚拟环境中也未检测到 Flask
    我是Flask的新手,我正在关注有关如何使用Flask的YouTube教程。我仔细聆听并按照步骤进行操作(链接:https://www.youtube.com/watch?v=Z1RJmh_OqeA)。我使用pip安装了virtualenv模块创建了一个名为virtualenvFlask激活环境,我的终端显示“(F......
  • 我无法安装 pygame 模块,所以我尝试观看视频,它告诉我这样做。在那个视频中他得到了 pyt
    c:\User\admin>piplistSyntaxError:unexpectedcharacterafterlinecontinuationcharacter我试图获取python模块列表,但出现语法错误出现SyntaxError:unexpectedcharacterafterlinecontinuationcharacter错误是因为你的用户名中包含一个特殊字符......
  • 模块3 面向对象编程高级 --- 第十章:实现多态
    第十章实现多态主要知识点1、多态的定义2、实现多态的条件学习目标理解多态的含义,掌握多态的使用方法,所谓多态:多种状态。在面向对象语言中,接口中定义的抽象方法的多种不同实现方式即多态。10.1创建多态的条件10.1.1多态的定义首先多态的作用是什么呢?......
  • Qt连接GPS模块实现调用高德地图交互显示经纬度信息的功能
    最近需要设计一个qt界面,在里面通过串口接收并解析出gps模块的经纬度信息,再通过调用高德地图的api进行地图的显示,作为入门qt的项目踩了不少坑,特将这个项目开源出来,供初学者参考学习。项目链接放下边啦,欢迎大家star~https://github.com/daviddou2023/qt_screen_gps一.项目简介......
  • AttributeError:模块“flax.traverse_util”没有属性“unfreeze”
    我正在尝试运行用jax编写的模型,https://github.com/lindermanlab/S5但是,我遇到了一些错误,显示Traceback(mostrecentcalllast):File"/Path/run_train.py",line101,in<module>train(parser.parse_args())File"/Path/train.py",line......
  • Singledispatch 并将类型作为输入参数
    我希望能够做到这一点:fromtypingimportTypefromfunctoolsimportsingledispatchclassA:passclassB(A):pass@singledispatchdeffoo(arg):print('default')@foo.registerdef_(arg:Type[A]):print(arg)foo(A)foo(B)但是,我得到......
  • 严格模式 模块化开发
    严格模式当你在脚本或函数的顶部添加"usestrict"语句时,你的代码将在严格模式下执行。这可以帮助你避免某些常见的编程陷阱,例如在不声明变量的情况下就使用它们,或者删除变量、函数或函数参数。在严格模式下,这样的操作都会抛出错误。1、使用严格模式后,变量必须使用var或者l......
  • 键盘模块中的所有按键名称是什么?
    python键盘模块中https://pypi.org/project/keyboard/按键的名称是什么?谁能给我一份清单,因为我找不到。pythonkeyboard模块不提供按键名称列表,因为它使用系统级的按键钩子直接捕捉按键事件。这意味着它使用的键码取决于的操作系统和键盘布局。不过,可以......
  • 大牛直播SDK跨平台RTMP直播推送模块技术设计和功能列表
    整体架构大牛直播SDK跨平台RTMP直播推送模块,始于2015年,支持Windows、Linux(x64_64架构|aarch64)、Android、iOS平台,支持采集推送摄像头、屏幕、麦克风、扬声器、编码前、编码后数据对接,功能强大,性能优异,配合大牛直播SDK的SmartPlayer播放器,轻松实现毫秒级的延迟体验,满足大多数行......