范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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.

看过周杰伦演唱会的塌房,才明白要红四十年是多么的不易真没想到,周杰伦在收获几次线上演唱会的好评后,竟然能在线下演唱会翻车了。在上周12月17和18日,周杰伦新加坡连续两场的演唱会结束后,热议的不是歌迷们的感动和兴奋,却是各种疯狂吐槽纹眉后的注意事项半永久的操作原理就是将天然半永久色料用专业仪器通过相应的针头导入皮肤表层说到底,也就是皮肤与针头和色料的关系今天我们来讲讲皮肤与针头是什么关系要了解两者之间的关系就必须先知道皮肤的助听器冬季保养注意事项,您都做全了吗?助听器是非常精密的电子产品,平时一定注意清洁保养。到了冬季,天气和环境的特殊性很容易导致助听器出现故障,我们保养助听器要特别注意以下几个方面一防静电冬季静电多,静电可能会导致助听器2022消费产业格局剧变之年十大风口,谁在狂飙?谁在降速?本文来源时代周报作者涂梦莹李馨婷叶曼至即将结束的2022年,那些曾经在年初被视为风口的消费行业,如今过得如何?年初,在经历了2021年的消费投资热潮后,新消费融资进度集体哑火,裁员大家关注的转阴后注意事项来啦最近老是想起我们这老辈人经常说的那句话没事别惹事,有事别怕事。这句话用在新冠病毒来袭,也同样适用。我们尽量做好防护,尽可能的不得新冠,但是得了新冠,我们我也不要怕。增强自己身体素质天龙八部缺少打击感,为何魔域手游2却研发出震动反馈对于MMORPG类型游戏,相信很多玩家都喜欢一个东西,那就是游戏存在的打击感,相信很多玩家在玩游戏的时候都有一种感觉,那就是一款游戏即便有再豪华的特效,如果没有与之配合的打击感,则阳了之后疯狂喝水?警惕水中毒阳了就要多喝水是大家近期常听到的治阳妙招然而,最近一段时间不少人因喝水过量导致水中毒被送到医院进行抢救可见喝水也不能乱喝否则还未转阴先中毒对身体造成更大伤害那么,什么是水中毒?如何120中风自检法或是发病前的最后一次警告,抓住还有得救已有多个权威研究表明合理膳食能缓解多种中风高危因素例如高血压肥胖高脂血症糖尿病等从而降低中风风险大家可以根据自己习惯调整下面的膳食指导1降低钠盐摄入,增加钾盐摄取减少钠摄入有利于降想要血管好,三七少不了?这几类人别吃,否则或等于没病找病!心脑血管疾病是现代人类健康的第一大杀手,其死亡率占所有疾病死亡率的45,且这一数据还在逐年增加,危害之大而基本上大部分类型的心脑血管疾病都有血管硬化血流不畅血液淤堵的情况,所以很多名人名言1。钱没了,可以再赚朋友没了,可以再交爱情没了,可以再找。记住,你什么都不缺,你缺的是一份重新开始的勇气。稻盛和夫2。一个人的价值,不在于他对社会索取了什么,而在于他对社会贡献了什容易成事的人,都要这种性格01hr中国人有句老话说得好,闷声发大财以此来规劝子孙后代,亲朋好友,做人做事要低调,有利可图时不要声张低调,仿佛是成事关键但现实生活中,我们常常不低调,高调地在朋友圈秀恩爱,家中
当美国国债无人购买时,美国会不会破产?美元会不会崩盘?美国世界上最富有的国家,100多年来GDP总值一直位居世界第一位。2019年美国的GDP总量达到了21。37万亿美元,大约占到世界GDP的14。美国的人均GDP达到了6。51万美元条友们,你们的手机里有坐飞机时的机外云图吗?晒几张看看?由重庆直飞美国洛杉矾,穿越中国中,东部地区,横跨太平洋。夜航飞行13个小时,飞机窗外的雲彩变换莫测,漂亮至极,给人一种进入外太空的感觉。望着外面浩瀚世界,拿我的玩具娃娃照了一张。爱现在有多少人买了苹果13promax手机,为什么呢?现代的中国有一小部分崇洋媚外,一小部分两面派,大部分都是爱国人士,笑到最后的人才是赢家。支持国产!买个手机哪有那么多为什么。不就一个手机?问问题的是什么心态?喜欢就买,缺了就买。和你电脑上最引以为豪的软件是什么?最满意的10款PC软件第一款神器是MaxTo。对于高效率办公,土豪的方式很简单砸钱。就像很多大佬都配备双显示器一样,双屏协作,效率可以提高69。而MaxTo就是一款让电脑分屏的软件听力不好的人怎么解决生活中的不方便?1建议他们早点去正规专业的验配中心验配助听器,精准验配的助听器可以很大程度提高他们的生活质量2在跟他们聊天时,尽量让自己的语速慢一些,咬字清晰的跟他们讲话3尽量选择安静环境下,面对如何避免牛仔裤在清洗的过程中褪色?首先,肯定是不要洗太勤。洗多了肯定褪色退的多。其次,第一次下水放些白醋,浸泡半小时,白醋可以保持牛仔裤原有的色泽,不容易褪色。再次,牛仔裤尽量反面洗反面晾。不管是洗还是晒,都容易掉你听过最人神共愤的案件是哪一件?老板向顾客多要一元钱,顾客剁下老板的脑袋,要了老板的一条命。老板想不到,自己磨的锋利的菜刀,会如砍瓜切菜般地剁下他的脑袋。案件发生后,当地警方接到的报警,竟多达50多个!林明是一个陈亚男和朱小伟离婚后,她能分到大衣哥财产吗?你以为大衣哥真傻呀!从星光大道到现在十年过去了,同一时期的草根明星早就已经凉凉了,他还能这么火为什么?就是傻瓜他经历这么多也能悟出点道道了。从上次陈亚男和她妈到大衣哥家受冷遇,就知为什么很多人对老车情有独钟?小马侃车车,汽车知识趣又多。帮助头条朋友们选车,算车,聊车。有汽车问题的朋友们,可以加我好友并邀请我回答。小马肯定知无不言,言无不尽。在现实生活中不免发现很多人对新车不怎么感兴趣,有减肥成功的吗,来分享一下方法和经验可以吗?两个月减肥30斤算不算成功,由于工作原原因。平时不怎么动,然后又胡吃海塞。导致体重一度接近200斤。朋友见面都认不出。然后从去年开始减肥。刚开始的时候,两个月减掉了30斤。我是怎么长春周边有哪些小众的旅行地?金秋时节,秋高气爽很快,城市街头就会上演一幕幕秋风扫落叶满地黄花堆积的浪漫景象了这个时节并不是旅游的旺季但绝对是旅游最佳的季节!不冷不热的天气微微凛冽又透着文艺气息的空气以及不拥挤