您现在的位置:首页 >> 技术文章 >> MATLAB技术 >> 内容

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

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

  核心提示:MATLAB代做-python代做-FPGA代做-基于噪声的自适应正则化方法的图像重建 ...
%*****************************************%
%* 基于噪声的自适应正则化方法的图像重建  *%
%*****************************************%
clear all;
close all;
J=imread('test1.tif');
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');  %输出结果。

联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:

作者:自适应正则化 来源:自适应正则化
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
  • matlab代做|matlab专业代做|matlab淘宝代做(www.hslogic.com) © 2019 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment