天天看點

【圖像重建】基于matlab卷積神經網絡的圖像超分辨率重建【含Matlab源碼 1816期】

一、卷積神經網絡的圖像超分辨率重建簡介

圖像超分辨率增強技術在醫療影像、視訊監控、航空、多媒體以及日常生活等領域有着較為廣泛的應用。随着深度學習網絡的發展以及計算機運算能力的不斷提升,圖像超分辨率增強算法也在持續改進,從早期的僅有三個卷積層的SRCNN發展到現在的基于生成式對抗網絡的圖像超分辨率增強算法。如今,圖像超分辨率增強算法大都是基于生成式對抗網絡[1],圖像超分辨率重建及其應用正逐漸走向成熟。在生成式對抗網絡相關算法的基礎上,研究者們還在不斷進行相關的優化,例如采樣方式、特征提取、卷積層數的改變等等,以使圖像超分辨率增強的訓練效果越來越好。本文将在基于生成式對抗網絡的圖像分辨率增強算法基礎上,結合陶瓷産品個性化定制等應用場景,進行進一步的改進和優化,以期望獲得更好的應用效果。本文重點進行了三個方面的改進和優化:一是對圖像的下采樣操作進行改進;使用高斯金字塔的下采樣方式進而獲得低分辨率圖檔LR,相較于高斯濾波,在訓練效果和訓練時間上都有一定程度的優化及提升,在保留圖中對于訓練有利的重要資訊的能力有所提高。二是在算法優化過程中,去掉歸一化操作;在生成式對抗網絡的圖像超分辨率重建的實作過程中,通過對算法中歸一化操作進行測試,發現歸一化操作在實際訓練過程中消耗了大量的計算資源,延長了訓練時長,是以選擇了去掉歸一化操作,提高算法效率,縮短訓練時長。三是對輕量化圖像超分辨率的神經網絡進行了研究和應用;對輕量化的圖像超分辨率增強算法進行了改進,對訓練時長以及重建效果進行了平衡及優化。

​1 卷積神經網絡的簡介​

卷積神經網絡是一類包含卷積計算且具有深度結構的前饋神經網絡,是深度學習的代表算法之一。卷積神經網絡有三個基本概念:局部感覺域(Local Re cpr tive Field) 、特征映射和池化(Pooling) 。

局部感覺域:每一個卷積神經網絡的輸入都是28​28的二維神經元。每一個圖像中的像素點的灰階值都對應着28​28的神經元。在卷積網絡結構中,将每一個灰8度值的像素點用一個很小的區域連接配接到隐藏層,這個區域就是局部感覺域。

特征映射:訓練資料輸入之後經過處理後從輸入層進入隐含層,在輸入層與隐含層之間的關系映射就是特征映射。

池化:池化操作主要目的是提取特征更加明顯,放大一個包含多個神經元的區域最大的值的操作叫最大池化。

​2 圖像品質評價名額​

對于生成的圖像,實驗中需要對圖像的優化的效果進行評測。主觀評價上,感覺圖像的分辨率是否增加,圖像的品質是否提高,對于圖像的感官上會不會存在一些突兀或者不平緩的現象。客觀評價就是通過數學計算給出客觀數值上的評價。常用的圖像品質評價名額一般有平均主觀得分MOS、峰值信噪比PSNR、結構相似性S SIM、均方誤差MSE等等”

峰值信噪比(PSNR) :峰值信噪比同樣是表達不同圖像中像素位置的差異。它

與均方誤差有着相似之處。峰值信噪比可以表達如下:

【圖像重建】基于matlab卷積神經網絡的圖像超分辨率重建【含Matlab源碼 1816期】

峰值信噪比與均方誤差相似之處在于都是表達像素的差異,不同的是峰值信噪比的值越大,表示重建效果越好,反之越差。公式中的n表示像素的位數。與MSE不同, PSNR值越高表示圖像重建品質越好, 反之則表示越差。

二、部分源代碼

% =========================================================================
% Test code for Super-Resolution Convolutional Neural Networks (SRCNN)

% =========================================================================

close all;
clear all;

%% read ground truth image
im  = imread('Set5\butterfly_GT.bmp');
%im  = imread('Set14\zebra.bmp');

%% set parameters
up_scale = 3;
model = 'model\9-5-5(ImageNet)\x3.mat';
% up_scale = 3;
% model = 'model\9-3-5(ImageNet)\x3.mat';
% up_scale = 3;
% model = 'model\9-1-5(91 images)\x3.mat';
% up_scale = 2;
% model = 'model\9-5-5(ImageNet)\x2.mat'; 
% up_scale = 4;
% model = 'model\9-5-5(ImageNet)\x4.mat';

%% work on illuminance only
if size(im,3)>1
    im = rgb2ycbcr(im);
    im = im(:, :, 1);
end
im_gnd = modcrop(im, up_scale);
im_gnd = single(im_gnd)/255;

%% bicubic interpolation
im_l = imresize(im_gnd, 1/up_scale, 'bicubic');
im_b = imresize(im_l, up_scale, 'bicubic');

%% SRCNN
im_h = SRCNN(model, im_b);

%% remove border
im_h = shave(uint8(im_h * 255), [up_scale, up_scale]);
im_gnd = shave(uint8(im_gnd * 255), [up_scale, up_scale]);
im_b = shave(uint8(im_b * 255), [up_scale, up_scale]);

%% compute PSNR
psnr_bic = compute_psnr(im_gnd,im_b);
psnr_srcnn = compute_psnr(im_gnd,im_h);

%% show results
fprintf('PSNR for Bicubic Interpolation: %f dB\n', psnr_bic);
fprintf('PSNR for SRCNN Reconstruction: %f dB\n', psnr_srcnn);

figure, imshow(im_b); title('雙三次插值');
figure, imshow(im_h); title('SRCNN重建');

%imwrite(im_b, ['Bicubic Interpolation' '.bmp']);
%imwrite(im_h, ['SRCNN Reconstruction' '.bmp']);      

三、運作結果

【圖像重建】基于matlab卷積神經網絡的圖像超分辨率重建【含Matlab源碼 1816期】
【圖像重建】基于matlab卷積神經網絡的圖像超分辨率重建【含Matlab源碼 1816期】
【圖像重建】基于matlab卷積神經網絡的圖像超分辨率重建【含Matlab源碼 1816期】

四、matlab版本及參考文獻

​1 matlab版本​

2014a

​2 參考文獻​

[1] 蔡利梅.MATLAB圖像處理——理論、算法與執行個體分析[M].清華大學出版社,2020.

[2]楊丹,趙海濱,龍哲.MATLAB圖像處理執行個體詳解[M].清華大學出版社,2013.

[3]周品.MATLAB圖像處理與圖形使用者界面設計[M].清華大學出版社,2013.

[4]劉成龍.精通MATLAB圖像處理[M].清華大學出版社,2015.

繼續閱讀