# MATLAB代做-python代做-FPGA代做-基于噪声的自适应正则化方法的图像重建

### 时间：2019-4-11 3:08:37 点击：

核心提示：MATLAB代做-python代做-FPGA代做-基于噪声的自适应正则化方法的图像重建 ...
%*****************************************%
%* 基于噪声的自适应正则化方法的图像重建  *%
%*****************************************%
clear all;
close all;
I=rgb2gray(J);
figure(1);subplot(2,2,1);
imshow(I); title('原始图像');

%高斯模糊
siz   = (size(I)-1)/2;
std   = 2;
[x,y] = meshgrid(-siz(2):siz(2),-siz(1):siz(1));
arg = -((x.*x + y.*y)/(std*std)).^1.5;
H = (exp(arg));
H(H<eps*max(H(:))) = 0;
sumh = sum(H(:));
if sumh ~= 0,
H = H/sumh;
end;

%H=fspecial('gaussian',10,2);%产生高斯模糊降析函数

Gaussian = imfilter(I,H,'replicate');

figure(1);subplot(2,2,2);
imshow(Gaussian);title('高斯模糊图像');

%噪声
Gaussian_G=imnoise(Gaussian,'gaussian',0,0.005);%高斯
%Gaussian_G=imnoise(Gaussian,'salt & pepper',0.005);%椒盐

figure(1);subplot(2,2,3);
imshow(Gaussian_G);title('加入噪声图像');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

blurimage=Gaussian_G;

[row,col,raw]=size(blurimage);

%figure;
%imshow(blurimage,[0,255]);
%title('blur image');

%中心化算子
N1=row;
N2=col;
N3=raw;
T=zeros(N1,N2);
x0=N1/2;y0=N2/2;
for re=1:N1
for im=1:N2
ta=cos(  2*pi*( (re-1)*x0+(im-1)*y0  )/N1 );
tb=-sin(2*pi*( (re-1)*x0+(im-1)*y0 )/N2 );
T(re,im)=complex(ta,tb);
end
end

%逆滤波
p=[0 -1 0;-1 4 -1;0 -1 0];%拉普拉斯算子，实现二阶微分
FFT_p=fft2(p,row,col);

FFT_blurimage=fft2(blurimage,row,col);
%FFT_G=fft2(Gaussian_G,row,col);
FFT_H=fft2(H,row,col);
FFT_H=FFT_H.*T;

CONJ_FFT_H=conj(FFT_H);
det_FFT_H=abs(FFT_H);
det_FFT_p=abs(FFT_p);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X1=Gaussian_G; %X1获取高分辨率图像
d=0.000001;%迭代中止条件
m=0.01;
c=0.00001;
Y=Gaussian_G;%Y获取低分辨率图像
Q=[0,-1,0;-1,4,-1;0,-1,0];
mark=0;

for k=1:30
% 求正则化参数 alfa
A =H;
%B =imfilter(X1,Q,'replicate')

N =imfilter(X1,A,'replicate');
a1=norm((double(Y)-double(N)),2).^2;

a2=norm(double(Y),2).^2;
%a3=norm(double(X1),2).^2;

%alfa=log(m*a1/(a2)+1);
%alfa=log(m*a1/(a2+c)+1);
alfa=(15*a1)/a2;

%*****************%
%*   参数自适应  *%
%*****************%
c=cov(double(X1));
c=abs(c);
maxcc=max(max(c/a1));
for i=1:row
for j=1:col
cc(i,j)=c(i,j)/a1;
alfanew(i,j)=alfa*(1-(cc(i,j)/maxcc));%权系数矩阵
end
end

FFT_X1=fft2(X1,row,col);
FFT_X1_t=CONJ_FFT_H.*FFT_X1;%迭代初始值
FFT_object=FFT_X1_t+CONJ_FFT_H.*FFT_blurimage-FFT_X1_t.*(det_FFT_H.^2+alfanew.*det_FFT_p.^2);
%FFT_object=(CONJ_FFT_H.*FFT_blurimage)./(det_FFT_H.^2+alfa*det_FFT_p.^2);

object=abs(ifft2(FFT_object));

%标定
object_max=max(max(object));
object_min=min(min(object));
object=(object-object_min)*255/(object_max-object_min);

object = uint8(object);

X2=object;
t=X1;
X1=X2;

if (mark==0)
if (((norm(double(X2)-double(t),2).^2)/(norm(double(t),2).^2))<=d)
mark=k;
resultim=object;
break;%停止迭代
end

end

end
if (mark==0)
mark=50;
resultim=object;
end

%计算信噪比
[L1,L2]=size(I)
dx=norm((double(resultim)-double(I)),2).^2
PSNR=10*log((255*255*L1*L2)/dx)

%显示结果
subplot(2,2,4);
figure(1);imshow(resultim,[0,255]);
promp=['重建图像',10,'迭代次数为' num2str(mark),10,'PSNR=' num2str(PSNR)];
title(promp);

imwrite(resultim,'result02.tif','tif');  %输出结果。

QQ ：1224848052

• 百度搜索
• 查阅资料过程中
• 论坛发现
• 百度贴吧发现
• 朋友介绍
• 没有相关文章
• 大名：
• 内容：