BP(Back Propagation)神经网络是一种常用的深度学习模型,可以用于图像降噪。主要步骤包括:
构建BP神经网络模型。包括输入层、隐藏层和输出层。输入层大小与图像大小相同,输出层大小也与输入图像大小相同。隐藏层根据图像复杂度设定。
准备训练数据。使用干净图像作为输入,加入噪声后的图像作为目标输出。
训练BP网络。使用均方误差作为损失函数,通过误差反向传播算法训练网络的参数。
降噪处理。使用受噪声污染的图像作为BP网络的输入,输出为降噪后的图像。
微调网络参数。使用验证数据集进一步优化网络参数,提高降噪效果。
BP网络通过学习干净图像与受噪声图像之间的映射关系,实现图像降噪的目的。相比传统滤波方法,它可以更好地保持图像细节,取得更好的降噪效果。但需要大量干净和受噪图像进行有效训练。
MATLAB主代码如下:
%% BP神经网络图片降噪和识别主程序
%执行清空环境变量操作
clc;
clear all;
close all;
%% 读入图片
I = imread('sample.bmp');
a01=259;%宽度
b01=196;%高度
I2=imresize(I,[b01,a01]);%读入图像,并改变成130*130(如论文所述)
% figure;
% imshow(I2);
imagemy=double(I2)./256;
blurredIm=imnoise(imagemy,'gaussian',0.05);
PData001=zeros(9,((size(imagemy,1)-2)*(size(imagemy,2)-2)));%输入矩阵
gen002=1; %
Target001=zeros(1,((size(imagemy,1)-2)*(size(imagemy,2)-2)));%输出矩阵
for k001=2:1:(size(imagemy,1)-1)
for k002=2:1:(size(imagemy,2)-1)
PData001(1,gen002)=blurredIm(k001-1,k002-1);
PData001(2,gen002)=blurredIm(k001-1,k002);
PData001(3,gen002)=blurredIm(k001-1,k002+1);
PData001(4,gen002)=blurredIm(k001,k002-1);
PData001(5,gen002)=blurredIm(k001,k002);
PData001(6,gen002)=blurredIm(k001,k002+1);
PData001(7,gen002)=blurredIm(k001+1,k002-1);
PData001(8,gen002)=blurredIm(k001+1,k002);
PData001(9,gen002)=blurredIm(k001+1,k002+1);
Target001(1,gen002)=imagemy(k001,k002);
gen002=gen002+1;
end
end;
%% 建立需要的BP神经网络------------
InputData_train=PData001;%载入需要的输入数据
OutputData_train=Target001;%载入需要的输出数据
%% 对BP神经网络相关参数进行设定
[k11,k12]=size(InputData_train);%计算输入的维数
HNumber=20;%设置隐含神经元的个数
%% ---------训练数据和预测数据结束---------
%开始新建一个BP神经网络
net=newff(InputData_train,OutputData_train,HNumber);
%对新建的BP神经网络训练
[net,per2]=train(net,InputData_train,OutputData_train);
% save net.mat net;%保存,方便以后调用
% load net;
NoiseReductionTest=sim(net,InputData_train);
%% 将BP降噪的矢量进行复原为二维图像
gen002=1;
NoiseReductionImage=zeros((size(imagemy,1)-2),(size(imagemy,2)-2));%复原图像
for k001=1:1:(size(imagemy,1)-2)
for k002=1:1:(size(imagemy,2)-2)
NoiseReductionImage(k001,k002)=NoiseReductionTest(1,gen002);
gen002=gen002+1;
end
end
figure;
imshow(imagemy);%显示结果
title('原图');
figure;
imshow(blurredIm);%显示结果
title('加噪图');
figure;
imshow(NoiseReductionImage);%显示结果
title('BP神经网络去噪结果');
% %% 保存图片
% imwrite(blurredIm,'blurredIm.bmp','bmp')
% imwrite(NoiseReductionImage,'NoiseReductionImage.bmp','bmp')
%
% %% 载入图片
% blurredIm = imread('blurredIm.bmp');
% NoiseReductionImage = imread('NoiseReductionImage.bmp');
blurredIm=double(blurredIm)./256;
NoiseReductionImage=double(NoiseReductionImage)./256;
% %% 图像的神经网络识别
% myI=imagemy;%
% predict1=DigitalIdentification(myI,1);
% disp('对最后一行数字的识别');
% predict1'
程序结果如下: