MATLAB环境下基于深度学习的JPEG图像去块(ImageDeblocking)
之前主要研究现代信号处理,深度学习嘛,一个大号/深层的,现代的,黑箱的,信号/图像处理器,所以,作为一个研究现代信号处理的,顺便搞些深度学习也是顺理成章的。本文程序运行环境为MATLAB R2018A。
面包多代码链接
https://mianbaoduo.com/o/bread/mbd-Y5mYkplp
本文简要讲解如何训练一个经典的降噪卷积神经网络 (DnCNN),并使用DnCNN网络减少JPEG压缩伪影(compresaion artifact)。
关于所谓的压缩伪影compresaion artifact,参考如下blog
http://t.csdn.cn/fcPtO
本文讲解如何从头开始训练一个 DnCNN 网络,建议使用计算能力为 3.0 或更高版本的支持 CUDA 的 NVIDIA GPU,同时需要并行计算工具箱)。
图像压缩可以减少图像内存,JPEG 图像格式采用了一种功能强大的压缩方法,该方法使用所谓的 质量因子quality factor 来指定压缩量。降低quality值会导致更高的压缩比和更小的内存占用,但会牺牲图像的视觉质量。JPEG 压缩是有损的,这意味着压缩过程会导致图像丢失信息。对于 JPEG 图像,信息丢失显示为图像中的所谓的 块效应blocking artifacts 。如下图所示,高压缩比会导致更多的信息丢失和更强的 块效应 。具有高频的纹理区域(如草地和云)看起来模糊不清,而锐利的边缘,如房子的屋顶和灯塔顶部的护栏,表现出所谓的振铃效应(ringing artifacts)。
JPEG图像去块(deblocking )是减弱JPEG 图像中压缩伪影的过程,目前存在几种JPEG图像去块方法,包括深度学习。本例讲解一种基于深度学习的方法,尝试将 JPEG 压缩伪影的影响降至最低。
DnCNN网络
本例使用一种早已提出的 深度前馈卷积神经网络 DnCNN,DnCNN主要是为了消除图像中的噪声而设计的。但是,也可以训练 DnCNN 以消除 JPEG 压缩伪影或提高图像的分辨率。
DnCNN 网络经过训练,可根据彩色图像的亮度检测残差图像。图像的亮度通道 Y 通过红色、绿色和蓝色像素值的线性组合来表示每个像素的亮度。作为对比,图像的两个色度通道Cb和Cr是红色,绿色和蓝色像素值的不同线性组合。DnCNN仅使用亮度通道进行训练,因为人类感知对亮度变化比颜色变化更敏感。
为了描述方便,直接上英文
一旦DnCNN网络学会如何估计残差图像,就可以通过将残差图像加入到压缩后的亮度通道,然后将图像转换回RGB色彩空间以重建压缩JPEG图像的无失真版本。
训练数据
IAPR TC-12 数据集包含 20,000 张自然图像,包括人物,动物,城市等,约1.8 GB,本文为了简便,将使用 IAPR TC-12 数据集的一小部分数据来训练网络,所有图像均为 32 位 JPEG 彩色图像。
训练图像的数量 numel(trainImages.Files)
ans = 251
准备训练数据
读取原始图像,创建文件夹,以正确组织训练数据。
指定用于渲染图像压缩伪影的quality值,quality值在 [0, 100] 范围内。较小的quality值将导致高压缩比和更强的压缩伪影,因此对较小的quality值使用更密集的采样。 JPEGQuality = [5:5:40 50 60 70 80];
写入原始和压缩后的训练图像。 files = dir([originalFileLocation filesep "*.jpg"]); imNumber = 1; for fileIndex = 1:size(files,1) fname = [originalFileLocation filesep files(fileIndex).name]; im = imread(fname); if size(im,3) == 3 im = rgb2gray(im); end for index = 1:length(JPEGQuality) imwrite(im,[uncompressedFileLocation filesep num2str(imNumber) ".jpg"],"JPEG","Quality",100) imwrite(im,[compressedFileLocation filesep num2str(imNumber) ".jpg"],"JPEG","Quality",JPEGQuality(index)) imNumber = imNumber + 1; end end
定义用于训练的Mini-Batch Datastore
mini-batch datastore 用于将训练数据输送到网络,本例自定义一个mini-batch datastore方法,称作JPEGimagePatchDatastore。 JPEGimagePatchDatastore从失真的输入图像中提取图形块,并从原始图像中的相应图形块中计算目标残差。图像块为网络输入,残差为网络输出。每个mini-batch包含 128 个大小为 50 x 50 像素的图形块。在训练期间,只会从每个图像中提取一个mini-batch,并且将从图像中的随机位置提取所有块。 batchSize = 128; patchSize = 50; batchesPerImage = 1; exts = {".jpg"}; imdsUncompressed = imageDatastore(uncompressedFileLocation,"FileExtensions",exts); imdsCompressed = imageDatastore(compressedFileLocation,"FileExtensions",exts); ds = JPEGimagePatchDatastore(imdsUncompressed,imdsCompressed,... "MiniBatchSize",batchSize,... "PatchSize",patchSize,... "BatchesPerImage",batchesPerImage);
执行读取操作 inputBatch = read(ds); summary(inputBatch)
设置DnCNN层
使用 dnCNNLayers 函数创建DnCNN 网络层,默认情况下,网络深度(卷积层数)为 20。 layers = dnCNNLayers()
设置训练参数
使用具有动量 (SGDM) 优化的随机梯度下降训练网络,使用trainingOptions函数指定 SDGM 的超参数。 maxEpochs = 30; initLearningRate = 0.1; l2reg = 0.0001; batchSize = 128; options = trainingOptions("sgdm",... "Momentum",0.9,... "InitialLearnRate",initLearningRate,... "LearnRateSchedule","piecewise",... "GradientThresholdMethod","absolute-value",... "GradientThreshold",0.005,... "L2Regularization",l2reg,... "MiniBatchSize",batchSize,... "MaxEpochs",maxEpochs,... "Plots","training-progress");
训练网络
配置完训练参数后,使用trainNetwork函数训练DnCNN网络
在 NVIDIA Titan X 上进行训练大约需要 40 个小时。 [net, info] = trainNetwork(ds,layers,options);
现在可以使用 DnCNN 网络从新图像中移除JPEG 压缩伪影。
使用 DnCNN 执行 JPEG图像去块的步骤如下:
· 创建具有三种不同quality值的 JPEG 压缩伪影的示例图像。
· 使用 DnCNN 网络去除压缩伪影。
· 直观地比较去块前后的图像。
· 通过量化压缩和去块后图像与未失真参考图像的相似性来评估其质量。
创建具有块效应Blocking Artifacts的示例图像
创建示例图像以评估DnCNN 网络的JPEG 图像去块的结果。测试数据集 testImages 包含21张未失真的图像。 exts = {".jpg",".png"}; fileNames = {"sherlock.jpg","car2.jpg","fabric.png","greens.jpg","hands1.jpg","kobi.png",... "lighthouse.png","micromarket.jpg","office_4.jpg","onion.png","pears.png","yellowlily.jpg",... "indiancorn.jpg","flamingos.jpg","sevilla.jpg","llama.jpg","parkavenue.jpg",... "peacock.jpg","car1.jpg","strawberries.jpg","wagon.jpg"}; filePath = [fullfile(matlabroot,"toolbox","images","imdata") filesep]; filePathNames = strcat(filePath,fileNames); testImages = imageDatastore(filePathNames,"FileExtensions",exts);
显示测试图像 montage(testImages)
选择一张图像用于JPEG图像去块的参考图像 indx = 7; % 图像索引 Ireference = readimage(testImages,indx); imshow(Ireference) title("Uncompressed Reference Image")
创建三个JPEG quality值分别为 10、20 和 50 的压缩测试图像。 imwrite(Ireference,fullfile(tempdir,"testQuality10.jpg"),"Quality",10); imwrite(Ireference,fullfile(tempdir,"testQuality20.jpg"),"Quality",20); imwrite(Ireference,fullfile(tempdir,"testQuality50.jpg"),"Quality",50);
预处理压缩图像
将压缩图像读入工作区。 I10 = imread(fullfile(tempdir,"testQuality10.jpg")); I20 = imread(fullfile(tempdir,"testQuality20.jpg")); I50 = imread(fullfile(tempdir,"testQuality50.jpg"));
展示图像 montage({I50,I20,I10},"Size",[1 3]) title("JPEG-Compressed Images with Quality Factor: 50, 20 and 10 (left to right)")
DnCNN仅使用图像的亮度通道进行训练,因为人类感知对亮度变化比颜色变化更敏感。使用 rgb2ycbcr函数将 JPEG 压缩图像从 RGB 色彩空间转换为 YCbCr 色彩空间。 I10ycbcr = rgb2ycbcr(I10); I20ycbcr = rgb2ycbcr(I20); I50ycbcr = rgb2ycbcr(I50);
应用DnCNN网络
为了执行网络的前向传播,使用 denoiseImage 函数,此函数使用完全相同的训练和测试过程对图像进行去噪。可将 JPEG 压缩伪影去看做一种图像噪声。 I10y_predicted = denoiseImage(I10ycbcr(:,:,1),net); I20y_predicted = denoiseImage(I20ycbcr(:,:,1),net); I50y_predicted = denoiseImage(I50ycbcr(:,:,1),net);
色度通道不需要处理。将deblocked的亮度通道与原始色度通道连接起来,以获得YCbCr色彩空间中的deblocked图像。 I10ycbcr_predicted = cat(3,I10y_predicted,I10ycbcr(:,:,2:3)); I20ycbcr_predicted = cat(3,I20y_predicted,I20ycbcr(:,:,2:3)); I50ycbcr_predicted = cat(3,I50y_predicted,I50ycbcr(:,:,2:3));
利用 Ycbcr2rgb 函数将去块后的 YCbCr 图像转换到RGB 颜色空间。 I10_predicted = ycbcr2rgb(I10ycbcr_predicted); I20_predicted = ycbcr2rgb(I20ycbcr_predicted); I50_predicted = ycbcr2rgb(I50ycbcr_predicted);
展示去块后的图像 montage({I50_predicted,I20_predicted,I10_predicted},"Size",[1 3]) title("Deblocked Images with Quality Factor: 50, 20 and 10 (left to right)")
为了在视觉上更好地理解效果的提升,使用格式为 [ x y width height ]的向量roi来指定感兴趣区域 (ROI), x 和 y 为ROI的坐标, width和height 为ROI的宽度和高度。 roi = [30 440 100 80];
显示结果 i10 = imcrop(I10,roi); i20 = imcrop(I20,roi); i50 = imcrop(I50,roi); montage({i50 i20 i10},"Size",[1 3]) title("Patches from JPEG-Compressed Images with Quality Factor: 50, 20 and 10 (left to right)")
将去块后的图像裁剪到此 ROI,并显示结果 i10predicted = imcrop(I10_predicted,roi); i20predicted = imcrop(I20_predicted,roi); i50predicted = imcrop(I50_predicted,roi); montage({i50predicted,i20predicted,i10predicted},"Size",[1 3]) title("Patches from Deblocked Images with Quality Factor: 50, 20 and 10 (left to right)")
定量比较
通过4个指标量化区块后的图像的质量,可以使用 displayJPEGResults 函数来计算quality值为 10、20 和 50 的压缩图像和去块后的图像指标。
· Structural Similarity Index (SSIM). SSIM assesses the visual impact of three characteristics of an image: luminance, contrast and structure, against a reference image. The closer the SSIM value is to 1, the better the test image agrees with the reference image. Here, the reference image is the undistorted original image, Ireference, before JPEG compression.
· Peak signal-to-noise ratio (PSNR). The larger the PNSR value, the stronger the signal compared to the distortion.
· Naturalness Image Quality Evaluator (NIQE). NIQE measures perceptual image quality using a model trained from natural scenes. Smaller NIQE scores indicate better perceptual quality.
· Blind/Referenceless Image Spatial Quality Evaluator (BRISQUE). BRISQUE measures perceptual image quality using a model trained from natural scenes with image distortion. Smaller BRISQUE scores indicate better perceptual quality.
displayJPEGResults(Ireference,I10,I20,I50,I10_predicted,I20_predicted,I50_predicted)
------------------------------------------
SSIM Comparison
===============
I10: 0.90624 I10_predicted: 0.91286
I20: 0.94904 I20_predicted: 0.95444
I50: 0.97238 I50_predicted: 0.97482
------------------------------------------
PSNR Comparison
===============
I10: 26.6046 I10_predicted: 27.0793
I20: 28.8015 I20_predicted: 29.3378
I50: 31.4512 I50_predicted: 31.8584
------------------------------------------
NIQE Comparison
===============
I10: 7.0989 I10_predicted: 3.9334
I20: 4.5065 I20_predicted: 3.0699
I50: 2.8866 I50_predicted: 2.4109
NOTE: Smaller NIQE score signifies better perceptual quality
------------------------------------------
BRISQUE Comparison
==================
I10: 52.2731 I10_predicted: 38.9688
I20: 45.5237 I20_predicted: 30.9583
I50: 27.7386 I50_predicted: 24.3889
NOTE: Smaller BRISQUE score signifies better perceptual quality
总结
本文演示如何构建和训练 DnCNN 网络,然后使用该网络减少图像中的 JPEG 压缩伪影,步骤如下:
1.准备训练数据。
2.通过以不同压缩比的JPEG文件创建训练图像。
3.定义 JPEGimagePatchDatastore数据存储,以从输入压缩图像中提取图像块,并从原始图像中的相应块中计算目标残差,JPEGimagePatchDatastore数据存储用于将训练数据输入到网络。
4.构建DnCNN 网络层。
5.设置训练参数。
6.使用 trainNetwork训练网络。
在训练 DnCNN 网络或加载预训练的 DnCNN 网络后,本例以3个不同的quality值压缩测试图像,然后使用该网络去除压缩伪影。
参考文献
[1] Zhang, K., W. Zuo, Y. Chen, D. Meng, and L. Zhang, "Beyond a Gaussian Denoiser: Residual Learning of Deep CNN for Image Denoising." IEEE® Transactions on Image Processing. Feb 2017.
[2] Grubinger, M., P. Clough, H. Müller, and T. Deselaers. "The IAPR TC-12 Benchmark: A New Evaluation Resource for Visual Information Systems." Proceedings of the OntoImage 2006 Language Resources For Content-Based Image Retrieval. Genoa, Italy. Vol. 5, May 2006, p. 10.
金浩双11报捷登顶多个榜单!斩获京东茶油单品销量TOP1一年一度的双十一购物狂欢节,终于落下帷幕,金浩茶油的捷报频频传来,不仅登顶多个榜单,还斩获京东茶油单品销量TOP1。京东山茶油战绩京东品牌当日榜京东单品当日榜京东单品累计榜京东品牌
红米k50普通版和至尊版哪个更好?选普通版本吧,双十一最高优惠12256都只要1949元,这个价格性价比真的很高了。当然现在K60估计年初就出来了,可以等等。红米K50相对优势有1天玑8100的性能已经非常够用了。
支持硬科技企业上市应成常态上交所总经理蔡建春近日在第五届虹桥国际经济论坛中国资本市场高质量对外开放分论坛上表示,上交所将持续提升服务科技创新能级,坚守科创板硬科技定位,鼓励和支持更多硬科技企业上市,打造支持
期货黄金本周拉升100多个点行情复盘11。7号11。11号期货黄金行情和操作复盘!本周五天时间,黄金最低1664。53,最高1772。66,拉升了100多个点!本周开始的时候,我就说过,黄金几次试探低点1614没有下
中央财政提前下达多项2023年预算资金用于这些领域中新网11月12日电(中新财经记者李金磊)2115亿元1510。7亿元1485亿元941亿元近日,中央财政提前下达了多项2023年预算资金。农业相关转移支付2115亿元中央财政提前
美团正在经历着有史以来的最大挑战作者顾煜编辑桑明强当被问及美团是否进行着无边界扩展时,王兴曾表示我不认为要给自己设限。只要核心是清晰的我们到底服务什么人?给他们提供什么服务?我们就会不断尝试各种业务。后来事情的发
2022西部百强县出炉,四川数量居首,甘肃仅1个入列,悬殊太大了2022年中国西部百强县(市区)最近出炉,其中四川数量最多,达到28个其他省区依次为云南13个内蒙古与新疆各12个贵州10个陕西9个广西与重庆各6个宁夏2个甘肃与青海各1个。西部百
刚刚,两个消息来了,A股,下周行情预判炒股,行情没有好坏之分,只有自己的节奏是否与行情匹配了。大盘上涨2,依旧有人亏损,大盘下跌,也还有涨停板。周五的行情,三大指数涨幅约2。收盘后,很多朋友跟我说吃面了,并不奇怪,国证
A股双十一不打折!底气何在?主持人欢迎来到这周程大爷论市节目。有什么会比双十一拆快递感觉更爽呢?应该就是在双十一打开证券账户吧!周五双十一的时候,全球股市几乎都是沸腾的状态。A股港股全面逼空,这种不打折的股价
由实而生向实而升京东11。11再创新纪录燕赵都市报纵览新闻记者李春炜截至11月11日晚2359,2022年京东11。11全球热爱季超越行业增速,创造了新的纪录,与此同时,零售购物用户数也再创佳绩。京东以实在的价格商品和服
尹锡悦希望韩中日加强合作应对危机,三国合作机制早日活跃当地时间2022年11月12日,柬埔寨金边,韩国总统尹锡悦抵达参加东盟与中日韩峰会。视觉中国图当地时间11月12日,东盟与中日韩(103)领导人会议在柬埔寨金边举行,韩国总统尹锡悦