# 1 图像二维频谱长什么样子(左图是原图,右图是对应的频谱图)
(图片来源:第一组是来自matlab自带的图片 “cameraman.tif”;第二组是用 excel 画的,然后截图)
# 2 怎么获得(matlab和C++调用)
- matlaba代码,保存为 spectrum2D.m
function [Result] = spectrum2D(I) % I is a gray image % 'Input Image should be gray!' A = rgb2gray(I); A = I; % A 要是一个灰度图像 F = fftshift(fft2(A)); % fft2() 是快速傅里叶变换函数 % fftshift() 目的是为了将图像横纵划分成四块,对角线互换。 % 经过变换以后的图像 F 中心是低频,往外频率增大。 % 以下的操作是为获得可以显示的图像。 % 如果直接显示 F ,得到的很可能是一个全白的图。 % 原因是,F内像素的值一般都很大,远大于255. % 而matlab的imshow函数黑白对应0-255,所以不做归一化处理的图像,显示都是白色的。 B = abs(real(F)); % F 有可能是负值,而且数据是中心对称的,中心为最亮点(可以参考C++例程中的说明) [m, n] = size(B); % 获得行数、列数 R = reshape(B, 1, m*n); % 将B映射成1行m*n列的矩阵 Temp = mapminmax(R, 0, 255); % 将R的像素值归一化到0-255之间 Result = reshape(Temp, m, n); % imshow(Result); % 建议调用的时候使用:imshow(spectrum2D(灰度图像矩阵)) % imshow(spectrum2D( rgb2gray(RGB图像矩阵))) end