傅里叶变换的Matlab代码:
img=imread('e:/4.jpg'); 
subplot(2,2,1),imshow(img); 
f=rgb2gray(img); 
subplot(2,2,2),imshow(f); 
%二维傅里叶变换 
F=fft2(f); 
FS=fftshift(F); 
%频谱 
S=log(1+abs(FS)); 
subplot(2,2,3);imshow(S,[]); 
%% 二维傅里叶逆变换 
fr=real(ifft2(ifftshift(FS))); 
ret=im2uint8(mat2gray(fr)); 
subplot(2,2,4),imshow(ret); 
img=imread('e:/4.jpg');
subplot(2,2,1),imshow(img);
f=rgb2gray(img);
subplot(2,2,2),imshow(f);
所参考的程序:
[i,lcmp]=imread('f:/tank.bmp');%=======读取图像 显示图像 
imshow(i,lcmp);             
ii=im2double(i);                  %=====将图像矩阵类型转换为double(图像计算很多是不能用整型的) 
i1 = fft2(ii);                        %======傅里叶变换 
i2 =fftshift(i1);                      %======将变换的频率图像四角移动到中心(原来良的部分在四角 现在移动中心,便于后面的处理) 
i3=log(abs(i2));                  %=====显示中心低频部分,加对数是为了更好的显示 
程序一 
figure,imshow(i3,[]);             
colormap(lcmp); 
imwrite(i3,lcmp,'f:/ffttank.bmp');  %===将上面i3输入到ffttank文件中 
i5 = real(ifft2(ifftshift(i2)));            %===频域的图反变换到空域 并取实部 
i6 = im2uint8(mat2gray(i5));        %===取其灰度图 
imwrite(i6,lcmp,'f:/tank2.bmp','bmp');  %===利用灰度图和原来取得颜模板 还原图像 
figure,imshow(i6); 
title('反变换后的图像'); 
程序二 
RGB = imread('autumn.tif');      %===读取图像 
I = rgb2gray(RGB);                  %==将其转为灰度 
imshow(I); 
J = dct2(I);                          %==二维dct变换,即离散余弦变换, 
figure,imshow(log(abs(J)),[])  %==显示出变换后的图像,此时能量集中在左上角 
colormap(jet(64)), colorbar    %====建立颜模板 
figure; 
J(abs(J) < 10) = 0;              %==我理解为:因为dct变换只要保存左上角的低频小块就可以保持原图像信息,故其他部分(高频,其能量较小故值也小)就可以舍去 
K = idct2(J)/255;                        %===这不加255,将下句改成imshow(K,[]);也一样,只是显示的需要 
imshow(K); 
title('反变换后的图像'); 
M=imread('dl011.jpg')        %读取MATLAB中的名为cameraman的图像   
subplot(3,3,1) 
imshow(M)                        %显示原始图像 
title('original') 
P1=imnoise(M,'gaussian',0.02)    %加入高斯躁声 
subplot(3,3,2) 
imshow(P1)                        %加入高斯躁声后显示图像 
title('gaussian noise'); 
P2=imnoise(M,'salt & pepper',0.02) %加入椒盐躁声 
subplot(3,3,3) 
imshow(P2)                        %%加入椒盐躁声后显示图像   
title('salt & pepper noise'); 
g=medfilt2(P1)                      %对高斯躁声中值滤波 
subplot(3,3,5) 
imshow(g) 
title('medfilter gaussia
n') 
h=medfilt2(P2)                      %对椒盐躁声中值滤波 
subplot(3,3,6) 
imshow(h) 
title('medfilter salt & pepper noise') 
l=[1 1 1                              %对高斯躁声算术均值滤波 
1 1 1 
1 1 1]; 
l=l/9;                           
k=conv2(P1,l)                         
subplot(3,3,8) 
imshow(k,[]) 
title('arithmeticfilter gaussian') 
%对椒盐躁声算术均值滤波 
d=conv2(P2,l)                         
subplot(3,3,9) 
imshow(d,[]) 
title('arithmeticfilter salt & pepper noise') 
[i,lcmp]=imread('f:/tank.bmp');%=======读取图像 显示图像
imshow(i,lcmp);           
ii=im2double(i);                  %=====将图像矩阵类型转换为double(图像计算很多是不能用整型的)
i1 = fft2(ii);                        %======傅里叶变换
i2 =fftshift(i1);                      %======将变换的频率图像四角移动到中心(原来良的部分在四角 现在移动中心,便于后面的处理)
i3=log(abs(i2));                  %=====显示中心低频部分,加对数是为了更好的显示
程序一
figure,imshow(i3,[]);           
colormap(lcmp);
imwrite(i3,lcmp,'f:/ffttank.bmp');  %===将上面i3输入到ffttank文件中
i5 = real(ifft2(ifftshift(i2)));            %===频域的图反变换到空域 并取实部
i6 = im2uint8(mat2gray(i5));        %===取其灰度图
imwrite(i6,lcmp,'f:/tank2.bmp','bmp');  %===利用灰度图和原来取得颜模板 还原图像
figure,imshow(i6);
title('反变换后的图像');
程序二
RGB = imread('autumn.tif');      %===读取图像
I = rgb2gray(RGB);                  %==将其转为灰度
imshow(I);
J = dct2(I);                          %==二维dct变换,即离散余弦变换,
figure,imshow(log(abs(J)),[])  %==显示出变换后的图像,此时能量集中在左上角
colormap(jet(64)), colorbar    %====建立颜模板
figure;
J(abs(J) < 10) = 0;              %==我理解为:因为dct变换只要保存左上角的低频小块就可以保持原图像信息,故其他部分(高频,其能量较小故值也小)就可以舍去
K = idct2(J)/255;                        %===这不加255,将下句改成imshow(K,[]);也一样,只是显示的需要
imshow(K);
title('反变换后的图像');
M=imread('dl011.jpg')        %读取MATLAB中的名为cameraman的图像 
subplot(3,3,1)
imshow(M)                        %显示原始图像
title('original')
P1=imnoise(M,'gaussian',0.02)    %加入高斯躁声
subplot(3,3,2)
imshow(P1)                        %加入高斯躁声后显示图像
title('gaussian noise');
P2=imnoise(M,'salt & pepper',0.02) %加入椒盐躁声
subplot(3,3,3)
imshow(P2)                        %%加入椒盐躁声后显示图像 
title('salt & pepper noise');
g=medfilt2(P1)                      %对高斯躁声中值滤波
subplot(3,3,5)
imshow(g)matlab求傅里叶变换
title('medfilter gaussian
')
h=medfilt2(P2)                      %对椒盐躁声中值滤波
subplot(3,3,6)
imshow(h)
title('medfilter salt & pepper noise')
l=[1 1 1                              %对高斯躁声算术均值滤波
1 1 1
1 1 1];
l=l/9;                         
k=conv2(P1,l)                       
subplot(3,3,8)
imshow(k,[])
title('arithmeticfilter gaussian')
%对椒盐躁声算术均值滤波
d=conv2(P2,l)                       
subplot(3,3,9)
imshow(d,[])
title('arithmeticfilter salt & pepper noise')

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。