f=im2double(f) % 转化为double型数据
[r c]=size(f)%设置矩阵的行列数,图的大小
h=fspecial('gaussian',[r c],0.5) % 模糊核
g=imfilter(f,h,'circular') % 图像模糊
a=0.1
b=0.000000000001
n=a+b*randn(r,c) % 噪声,均值为0.1,方差为b^2
g=g+n % 模糊图像加噪声
F=fft2(f) % 清晰图像频谱
G=fft2(g) % 加噪图像频谱
H=psf2otf(h) % PSF->OTF
N=fft2(n) % 噪声频谱
H2=conj(H).*H
N2=conj(N).*N
F2=conj(F).*F
NF=N2./F2 % 噪信比
huv=H2./(H2+NF)
tuv=(1./(H+eps)).*huv % 频域滤波器
RA=tuv.*G
ra=real(ifft2(RA)) % 降贺银噪图像
MN=sum(sum(N2))
MF=sum(sum(F2))
sr=MN/MF
huv=H2./(H2+sr)
tuv=(1./(H+eps)).*huv 禅橡宴 % 另一个频域滤波器
RC=tuv.*Grc=real(ifft2(RC)) % 另一幅降噪图像
figure,imshow(f)title('原始图像')
先写这么多,待会儿再补充,吃饭去了,回来接着写。。function [uf,vf] = sfn(u,v)%此函数为自定义的sfn函数,u,v为输入变量
uf、vf为输出变量
global e b k%定义全局变量 e b k;
ny = size(u,1)%求出矩阵u的行逗铅瞎的数目,赋给ny
nx = size(u,2)%求出矩阵u的列的数目,赋给nx;
uer = [u(:,1),u,u(:,nx)]
%构造一个矩阵uer,u(:,1)为矩阵u的第一列; u(:,nx) 为矩阵第最后一列,u就不解释了。
uec = [u(1,:)uu(ny,:)]
%构造一个矩阵uec,u(1,:)为矩阵u的第一行;u(ny,:)为u最后一行
ul = uec(3:ny+2,:)+uec(1:ny,:)+uer(:,1:nx)+uer(:,3:nx+2)-4*u
%用矩阵uec的第三行到第(ny+2)行+uec的第一行到第ny行+uer的第一列到第nx列+uer的第三行到(nx+2)列-4*u
u3 = u.*u.*u%把u的三次方赋给u3
uf = (u-u3/3-v)/e + k^2*ul%这行不用激罩解释吧,简单的矩阵运算。
vf = e*(u+b-0.5*v)%同上。。山空
程序2:
clc %清屏
global k b e %定义全局变量k b e
nsteps = 2000%将2000赋给nsteps
nxy = 100%100赋给nxy
u = 5*ones(nxy,1)*([1:nxy]-0.4*nxy)/nxy
%ones(nxy,1)是创建一个nxy*1的矩阵,[1:nxy]是行向量[1 2 3 4 .. nxy]
v = 5*(([1:nxy]-0.4*nxy)')*ones(1,nxy)/nxy%同上
h = 0.04
e = 0.1
b = 0.67
colormap hsv% 创建一个hsv颜色映射表
set(0,'DefaultSurfaceEdgecolor','none')%设置为缺省边缘颜色为none。
k=1
for i=1:nsteps
[uf,vf] = sfn(u,v)%调用上面写的sfn函数
u = u+h*uf%矩阵运算
v = v+h*vf
if mod(i,3) == 1 %如果i对3求余数等于1
pcolor(u)drawnow%按u中元素着色,画图。。
end
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)