MATLAB 實現 SRCNN 圖像超分辨率重建
MATLAB代碼實現,用于基于三層卷積神經網絡的圖像超分辨率重建。代碼參考了多個來源,結合了SRCNN的典型實現步驟。
1. MATLAB代碼實現
% 超分辨率卷積神經網絡(SRCNN)的測試代碼
% 參考文獻:Chao Dong, Chen Change Loy, Kaiming He, Xiaoou Tang.
% 學習深度卷積網絡的圖像超分辨率,歐洲計算機視覺會議記錄,2014年% 清理環境
close all;
clear all;% 讀取真實圖像
im = imread('Set5\butterfly_GT.bmp'); % 替換為你的圖像路徑
% im = imread('Set14\zebra.bmp');% 設定參數
up_scale = 3; % 放大倍數
model = 'model\x3.mat'; % 替換為你的模型路徑% 僅在照度方面工作
if size(im, 3) > 1im = rgb2ycbcr(im);im = im(:, :, 1);
end
im_gnd = modcrop(im, up_scale); % 裁剪圖像以匹配放大倍數
im_gnd = double(im_gnd) / 255; % 歸一化到[0, 1]% 雙三次插值
im_l = imresize(im_gnd, 1 / up_scale, 'bicubic'); % 縮小
im_b = imresize(im_l, up_scale, 'bicubic'); % 再放大% SRCNN重建
im_h = SRCNN(model, im_b);% 刪除邊框
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]);% 計算PSNR
psnr_bic = compute_psnr(im_gnd, im_b);
psnr_srcnn = compute_psnr(im_gnd, im_h);% 顯示結果
fprintf('雙三次插值的峰值信噪比: %f dB\n', psnr_bic);
fprintf('SRCNN重建的峰值信噪比: %f dB\n', psnr_srcnn);figure, imshow(im_b); title('雙三次插值');
figure, imshow(im_h); title('SRCNN重建');% 保存結果
imwrite(im_b, ['雙三次插值' '.bmp']);
imwrite(im_h, ['SRCNN重建' '.bmp']);
2. SRCNN函數實現
function im_h = SRCNN(model, im_b)% 加載預訓練模型load(model);% 提取特征F1 = conv2(im_b, W1, 'same') + B1;F1 = max(0, F1); % ReLU激活函數% 非線性映射F2 = conv2(F1, W2, 'same') + B2;F2 = max(0, F2); % ReLU激活函數% 重建im_h = conv2(F2, W3, 'same') + B3;
end
3. 輔助函數
function im = modcrop(im, scale)% 裁剪圖像以匹配放大倍數[h, w] = size(im);h = h - mod(h, scale);w = w - mod(w, scale);im = im(1:h, 1:w);
endfunction im = shave(im, border)% 刪除邊框im = im(border(1)+1:end-border(1), border(2)+1:end-border(2));
endfunction psnr = compute_psnr(im1, im2)% 計算PSNRmse = mean((im1(:) - im2(:)).^2);psnr = 10 * log10(255^2 / mse);
end
參考代碼 MATLAB 實現 SRCNN 圖像超分辨率重建 youwenfan.com/contentcsb/50734.html
代碼可以在MATLAB中實現基于SRCNN的圖像超分辨率重建。該代碼包括圖像預處理、雙三次插值、SRCNN重建以及結果評估等步驟。