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-1
    for x = 0:M-1
        if flag ==1
            Wu(u+1,x+1) = exp(-1j*2*pi*u*x/M);%FFT
        else
            Wu(u+1,x+1) = exp(1j*2*pi*u*x/M);%IFFT
        end
    end
endfor v = 0:N-1
    for y = 0:N-1
        if flag ==1
            Wv(v+1,y+1) = exp(-1j*2*pi*v*y/N);%FFT
        else
            Wv(v+1,y+1) = exp(1j*2*pi*v*y/N);%IFFT
        end
    end
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:h
	for j = 1:w
		I_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,[]); %中心化频谱

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

  • 1
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中,图像频谱中心化是一种常见的操作,它可以将图像频谱的原点移动到频谱的中心位置。这个操作通常在进行频域滤波或频域分析时使用,可以提高处理效果。 要实现图像频谱中心化,可以按照以下步骤进行操作: 1. 将原始图像进行傅里叶变换,得到频谱图像。 2. 使用函数fftshift对频谱图像进行中心化操作。该函数会将频谱的原点移动到图像的中心位置。 3. 对中心化后的频谱图像进行进一步处理,如滤波、分析等。 4. 如果需要,可以使用函数ifftshift将中心化后的频谱图像还原到原始位置。 下面是一个示例代码,展示了如何在MATLAB中进行图像频谱中心化的操作: ```matlab % 读取原始图像 image = imread('image.jpg'); % 将图像转换为灰度图像 grayImage = rgb2gray(image); % 进行傅里叶变换 fftImage = fft2(double(grayImage)); % 对频谱进行中心化操作 centeredFFT = fftshift(fftImage); % 进行进一步处理,如滤波、分析等... % 如果需要,可以将中心化后的频谱还原到原始位置 restoredFFT = ifftshift(centeredFFT); % 进行逆傅里叶变换,得到还原后的图像 restoredImage = uint8(ifft2(restoredFFT)); % 显示结果 subplot(1, 2, 1); imshow(grayImage); title('原始图像'); subplot(1, 2, 2); imshow(restoredImage); title('还原后的图像'); % 相关问题: % 1. 什么是傅里叶变换? % 2. 如何在MATLAB中进行傅里叶变换? % 3. 为什么需要对图像频谱进行中心化操作? % 4. 图像频谱中心化对图像处理有什么作用? ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值