图像的二维频谱图的理解 20170622

# 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

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值