BP图片降噪MATLAB代码

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'

程序结果如下:

BP图片降噪MATLAB代码_第1张图片

BP图片降噪MATLAB代码_第2张图片

BP图片降噪MATLAB代码_第3张图片

你可能感兴趣的:(matlab,开发语言)