SIDD:智能手机相机降噪数据集

泡泡图灵智库,带你精读机器人顶级会议文章
标题:A High-Quality Denoising Dataset for Smartphone Cameras
作者:Abdelrahman Abdelhamed,Stephen Lin,Michael S. Brown
来源:CVPR2018
编译:博主
欢迎个人转发朋友圈;其他机构或自媒体如需转载,后台留言申请授权


摘要

大家好,今天带来的文章是:SIDD:智能手机相机降噪数据集,该文章发表于CVPR2018。
过去十年中,摄影技术已经发生了翻天覆地的变化,从最开始的专业数码单镜反光相机(DSLR),变成了更简单的智能手机上的傻瓜相机。由于光圈和传感器的大小,智能手机会比单反产生更多的噪声。为解决此问题,一些学者开始研究智能手机相机的降噪问题。不过针对该问题,业界内仍旧缺少具有高质量真值(噪声较少)的数据集。
为此,本文提出了一套系统的方法来从原始噪声影像估计无噪声的真值数据。基于此方法,本文提出了一套用于智能手机相机降噪研究的数据集SIDD(Smartphone Image Denoising Dataset)。SIDD使用5种具有代表性的手机拍摄了大概10个场景中共30000张在不同光照条件下的带噪声的影像,还有对应的“无噪声”的真实影像。
本文在SIDD上测试了一些降噪算法,并得到了一些结论。同时,本文也发现利用SIDD数据集训练的基于CNN的降噪模型能够比用低ISO数据集训练的模型具有更好的降噪效果。


主要贡献

1)提出了一套用于建立智能手机相机降噪数据集的算法流程,并在次基础上建立了一个用于智能手机相机降噪算法的数据集SIDD,该数据集包含约30000张影像,为降噪算法的研究提供了基础;
2)分析和验证了本文数据集的可靠性,测试了一些目前常用的降噪算法在本文数据集山上的表现,同时发现使用SIDD训练的CNN降噪模型效果更好。


算法流程

这里写图片描述
图1:图一展示了SIDD建立的全过程。首先需要采集数据,然后去除错误像素和错误影像,接写来对影像进行对齐,最后生成“无噪声”的真实影像。

错误像素改正

错误像素会给真实数据的估计带来较大的影响,因此首先需要对错误像素进行改正。本文的思路是在同一个场景下拍摄500张影像,然后在起平均图片上分析错误像素,最后通过插值的方式对错误像素进行改正。
下图展示了本文错误像素改正的记过,图(d)是改正错误后的结果。
这里写图片描述

外点影像剔除

虽然影像的采集都是在控制外部环境的情况下拍摄的,然而由于场景亮度和相机曝光等等硬件因素的影响下,获取影像的亮度还是会有略微差异。因此本文计算采集影像的平均亮度来剔除掉亮度差异较大的影像,从而保证影像亮度的稳定性。

影像对齐

由于智能手机相机的光学稳像(OIS)功能不可禁止,因此拍摄的序列影像之间并不能完全对齐。本文通过使用基准点的方式来将这些影像进行对齐。下图中,(b)和(c)展示了Apple iPhone 7和Google Pixel的对齐平移量。
这里写图片描述

鲁邦平均图像估计

当图片一经对齐后,就需要通过平均的方式来获取平均图像。比较简单直接的思路是滤除掉过暗和过亮的像素,然后进行平均值的计算。本文在此基础上使用了一种更加鲁邦的均值计算思路,基于WLS算法进行了改进,从而得到了更优的效果。
下图展示了本文算法与DND算法的结果比较,可以发现本文算法在真实数据集上具有更低的噪声结果。
这里写图片描述


主要结果

为平均SIDD数据集的质量,本文做了两个实验。一个实验是利用本文数据集平均一些降噪算法的效果;一个是对比SIDD训练的CNN模型和低ISO数据训练的降噪模型。

算法性能评价

下图展示了一些算法在本文数据集上的表现情况,其中绿色、蓝色和红色分别代表排名第一、第二和第三的算法。算法性能的评价指标主要有 PSNR和SSIM,但是由于所有算法在SSIM上性能差异不大,本文主要使用PSNR作为评价指标。
这里写图片描述

模型性能比较

下图展示了利用本文数据训练的CNN模型在经过几次迭代后的去噪能力。不难发现,本文的算法在真实噪声数据集上取得了最优的效果。
这里写图片描述


结论

本文提出了一个专门针对智能手机降噪的数据集SIDD,给相关研究提供了基础数据,也必定会推动相关研究的进一步发展。

这里写图片描述

<think>好的,我现在需要处理用户关于如何使用SIDD数据集的问题。首先,我得确认自己是否了解SIDD数据集的基本信息。SIDD全称是Smartphone Image Denoising Dataset,主要用于图像去噪任务。用户可能是在进行图像处理或计算机视觉项目时需要这个数据集,所以需要知道如何获取、加载和应用它。 首先,用户可能需要知道如何下载数据集。我应该先检查SIDD的官方网站或者常见的平台如Kaggle、GitHub是否存在。记得之前看到过SIDD在GitHub上有官方页面,可能需要通过申请或者直接下载。另外,数据集的目录结构也很重要,用户需要知道训练集、验证集、测试集的分布,以及图像和噪声版本的存放方式。 接下来是数据加载部分。用户可能需要用Python的库如OpenCV或PIL来读取图像文件。如果是处理大量数据,可能需要使用数据加载工具,比如TensorFlow的Dataset或PyTorch的DataLoader。这里需要给出具体的代码示例,比如如何遍历目录,加载图像对(干净和有噪声的),并将其转换为数组或张量。 然后是预处理步骤。常见的预处理包括归一化、调整大小、数据增强(如旋转、翻转)。需要提到将像素值归一化到0-1或-1到1的范围,这对模型训练效果有帮助。同时,数据增强可以提升模型的泛化能力,但要根据任务需求来选择。 在模型训练方面,用户可能使用卷积神经网络,比如DnCNN、U-Net等。需要给出一个简单的模型构建示例,比如用PyTorch或Keras。还要说明输入输出是噪声和干净图像对,损失函数通常用MSE或SSIM。 评估部分需要介绍常用的指标,如PSNR和SSIM,这些指标如何计算,以及如何用测试集进行评估。可能还需要提到可视化结果,比较去噪前后的图像。 此外,用户可能不知道SIDD的具体应用场景,比如低光去噪、手机摄影增强等。需要举例说明,并引用相关论文或资源,比如官方论文或其他使用该数据集的文献,以增加可信度。 最后,生成相关问题时要考虑用户可能进一步的需求,比如数据集的下载问题、与其他数据集的比较、处理特定噪声的方法,以及实际部署的考虑。这些问题能够帮助用户更深入地应用SIDD数据集。 需要确保回答的结构清晰,分步骤说明,并且代码示例正确。同时,引用官方资源时要正确标注,比如引用官方GitHub和论文。检查是否有遗漏的步骤,比如数据集的划分或者具体的训练细节是否需要更多说明。确保所有技术术语准确,并且建议的方法符合当前的常见做法。</think>以下是如何在图像处理/计算机视觉项目中使用SIDD数据集的详细指南: ### 一、SIDD数据集基础 SIDD(Smartphone Image Denoising Dataset)包含30,000组含噪图像与干净图像对,覆盖5种智能手机拍摄的真实噪声场景。数据集目录结构通常包含: ``` SIDD_Medium/ ├── train/ │ ├── noisy/ # 含噪图像 │ └── clean/ # 对应干净图像 └── val/ # 验证集 ``` ### 二、数据加载实现 使用Python加载图像的示例: ```python import cv2 import os def load_sidd_data(data_path): noisy_dir = os.path.join(data_path, "train/noisy") clean_dir = os.path.join(data_path, "train/clean") image_pairs = [] for img_name in os.listdir(noisy_dir): noisy_img = cv2.imread(os.path.join(noisy_dir, img_name)) clean_img = cv2.imread(os.path.join(clean_dir, img_name)) image_pairs.append((noisy_img, clean_img)) return image_pairs ``` ### 三、数据预处理流程 1. **归一化处理**(关键步骤): ```python def normalize(images): return images / 255.0 # 转换到[0,1]范围 ``` 2. **数据增强**(可选): ```python from albumentations import RandomRotate90, Flip aug = Compose([ RandomRotate90(p=0.5), Flip(p=0.5) ]) ``` ### 四、模型训练架构 基于PyTorch的示例模型: ```python import torch.nn as nn class DenoiseCNN(nn.Module): def __init__(self): super().__init__() self.encoder = nn.Sequential( nn.Conv2d(3, 64, 3, padding=1), nn.ReLU(), nn.Conv2d(64, 128, 3, padding=1) ) self.decoder = nn.Sequential( nn.ConvTranspose2d(128, 64, 3), nn.ReLU(), nn.ConvTranspose2d(64, 3, 3) ) def forward(self, x): x = self.encoder(x) return self.decoder(x) ``` ### 五、评估指标实现 计算PSNR的核心代码: ```python import numpy as np def psnr(clean, denoised): mse = np.mean((clean - denoised) ** 2) return 10 * np.log10(1.0 / mse) ``` [^1]: SIDD官方GitHub仓库包含完整的数据说明文档 [^2]: 《Benchmarking Denoising Algorithms with Real Photographs》论文详述了数据集构建方法
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值