matlab求图像频谱

编程入门 行业动态 更新时间:2024-10-11 13:21:21

matlab求图像<a href=https://www.elefans.com/category/jswz/34/1757588.html style=频谱"/>

matlab求图像频谱

clc;clear;close all;
ori = imread('A.bmp');
% [h, w,ch] = size(ori);
I = im2double(ori);%% 用matlab函数实现求频谱
F = fft2(I(:,:,1)); % 针对R通道做fft变换
F1 = log(abs(F)+1); % abs取绝对值让复数变实数,log压缩数据范围,一定要压缩,不然数据太大了!!
F2 = log(abs(fftshift(F))+1);
figure; imshow(F1,[]);  % 没有经过中心化处理得到的频谱图
figure; imshow(F2,[]);  % 经过中心化处理得到的频谱图%% 根据原理自行实现求频谱过程
function [Wu,Wv] = trans(M,N,flag)
Wu=zeros(M,M);Wv=zeros(N,N);
for u = 0:M-1for x = 0:M-1if flag ==1Wu(u+1,x+1) = exp(-1j*2*pi*u*x/M);%FFTelseWu(u+1,x+1) = exp(1j*2*pi*u*x/M);%IFFTendend
endfor v = 0:N-1for y = 0:N-1if flag ==1Wv(v+1,y+1) = exp(-1j*2*pi*v*y/N);%FFTelseWv(v+1,y+1) = exp(1j*2*pi*v*y/N);%IFFTendend
end%原理部分自行补充
[Wu,Wv] = trans(h,w,1); % 调用trans函数,见前文。当flag==1,做FFT变换,当flag==0,做IFFT变换I_trans=zeros(h,w,1); % 针对一通道做的处理,多通道时将1改成ch,并且下面的循环中要多加一层循环k=1:ch,I_trans(i,j,1)改为I_trans(i,j,k)
for i = 1:hfor j = 1:wI_trans(i,j,1) = I(i,j,1)*(-1)^(i+j); % 使得变换的频谱中心化,如果没有这一步,得到的是没有中心化的频谱end
end
I_trans1 = Wu*I_trans(:,:,1)*Wv;
I_trans2 = log(abs(I_trans1)+1);
figure; imshow(I_trans2,[]); %中心化频谱

两种方法求得的频谱图有细微出入,原因不明,但是都可以使用。

更多推荐

matlab求图像频谱

本文发布于:2024-03-04 00:59:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1707838.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:频谱   图像   matlab

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!