CLC;全部清除;
%读取原始图像
格式长
模糊= imread('fig525(B)BMP');
插曲(1,2,1) ; imshow(模糊)标题(原始图像);
%自我功能维纳滤波
K = 00025;
[M,N] =尺寸(模糊);
频谱= 0(M,N);
H =零(M,N);
为u = 1:M
为V = 1:
H(U,V)= exp(-K ((UM / 2)^ 2 +(VN / 2)^ 2)^(5/6));
光谱(U, V)= H(U,V)^ 2;
结束
结束
F =双(模糊);
F1 = fftshift(FFT2(F))
HW = H /(频谱+0001);
restore1 = HW。 F1
恢复=实际(ifft2(ifftshift(restore1)));
插曲(1,2,2),imshow(恢复[]);标题(“自功能的维纳滤波');
%调用matlab的维纳%
数字过滤器功能;
HW1 =实际(ifft2(ifftshift(H)));转化空域起来
RESULT1 = deconvwnr(模糊HW1,0001);
结果2 = ifftshift(RESULT1);%
插曲(1逆转交换,1,3象限,四象限,2,1); imshow(结果2,[]);标题(“呼叫维纳滤波功能');
图像读取:
global I
% dialog for opening files
[imagefile , pathname]= uigetfile('tif');
if imagefile ~= 0
filename=[pathname imagefile];
[X,map]=imread(filename);
I=X;
show_Callback(hObject, eventdata, handles)
set(handlessave,'enable','on')
end;
图像保存:
global I
[imagefile , pathname, filterindex]= uiputfile({'tif','tif';'','All Files'},'Image Save As');
if (imagefile ~= 0 & filterindex==1)
filename=[pathname imagefile 'tif'];
imwrite(I,filename);
else (imagefile ~= 0)
filename=[pathname imagefile];
imwrite(I,filename);
end;
频域增强:
global I
J=imnoise(I,'salt & pepper',002);
%gei tuxiang tianjia yanjiao zaosheng
subplot(121),imshow(J)
title('han you zaosheng de yuan tuxiang')
J=double(J);
f=fft2(J);
g=fftshift(f);
[M,N]=size(f);
n=3;d0=20;
n1=floor(M/2);n2=floor(N/2);
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2);
h=1/(1+0414(d/d0)^(2n));
g(i,j)=hg(i,j);
end
end
g=ifftshift(g);
g=uint8(real(ifft2(g)));
subplot(122),imshow(g)
title('san jie Butterworth lvbo tuxiang')
我和你说说吧,先说基本函数:
fft2是求傅里叶变换;
fftshift是把变换后的图像转置,让非零值转到中心,好观察。
real就是求实部;
imag就是求虚部;
你知道经过傅里叶变换原来的空间域转到频域上了吧?
频域的概念是有实部有虚部的是吧,那你怎么能在平面上表示出来呢?
就用到了复数里的几个概念:
一个是虚部实部的平方和均值(sqrt( RRfdp1^2+IIfdp1^2);)
在一个就是夹角问题(b=angle(fftI);)
这个知识高数都有,我就不用说了吧?
至于a=(a-min(min(a)))/(max(max(a))-min(min(a)))225;
我觉得就是一个圆滑函数,比如235536我想让它变成240
就是乘以圆滑系数,再乘以225。
max(max(a))是求矩阵a里的最大的那个像素值。
希望你掌握好的学习方法,分析程序如果看不懂的话可以一行行的运行,通过workspace找到分步运行的结果,具体分析。
最后感慨一句:百度知道不是赚钱的地方,分多分少不是衡量知识的标准。我助人为乐我快乐,积分又不能换钱,要那么多干嘛。
I=imread('lenabmp');
I=rgb2gray(I);
fftI=fft2(I);%二维离散傅立叶变换
sfftI=fftshift(fftI);%直流分量移到频谱中心
RR=real(sfftI);%取傅立叶变换的实部
II=imag(sfftI); %取傅立叶变换的虚部
A=sqrt(RR^2+II^2); %计算频谱幅值
B=(A-min(min(A)))/(max(max(A))-min(min(A)))225; %归一化
pha=angle(fftI);
figure(1)%设定窗口
subplot(1,4,1),imshow(I);title('原图');
subplot(1,4,2),imshow(B);title('原图像的频谱'); %显示原图像的频谱
subplot(1,4,3),imshow(log(B),[]);title('原图像的频谱'); %显示原图像的频谱
subplot(1,4,4),imshow(pha);title('相位谱')
figure(2)
x=abs(ifft2(fftI));
magif=ifft2(abs(fftI));
phaif=ifft2(exp(1ipha));
subplot(1,3,1),imshow(phaif,[]);title('相位谱重建图像');
subplot(1,3,2),imshow(x,[]);title('频谱重建原图像')
subplot(1,3,3),imshow(magif,[]);title('幅度谱重建图像')
以上就是关于求维纳滤波图像复原的C++或者OpenCV的程序代码!可运行的话,分数不是问题。真心求教!全部的内容,包括:求维纳滤波图像复原的C++或者OpenCV的程序代码!可运行的话,分数不是问题。真心求教!、急求几个MATLAB程序、Matlab数字图像处理,要求详细解释代码,每个函数都要解释.这个是对图像求幅值谱和相位谱,并对其进行重构.等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)