- 经验
- 15
- 分贝
- 0
- 家园分
- 68
- 在线时间:
- 45 小时
- 最后登录:
- 2014-4-23
- 帖子:
- 14
- 精华:
- 0
- 注册时间:
- 2014-1-14
- UID:
- 982666
注册:2014-1-14
|
《MATLAB 7.0从入门到精通》(求是科技 编著)是一本MATLAB学习的入门书籍,全篇通俗易懂。最近学习到222-223页,关于使用fft2()函数处理图像。其中的示例如下:
%fft2_example.m
%分析图像的频谱
img = imread(’coins.png’); %读图像文件
f_img = fft2(double(img)); %二维fft变换
f_img = fftshift(f_img); %把直流成分移动频谱的中间
imshow(img); %显示图像
figure;
f_img_abs = abs(f_img); %得到频谱幅度
f_img_abs = (f_img_abs-min(min(f_img_abs)))./ .. . %把频谱幅度变换到[0,255]范围内
(max(max(f_img_abs))-min(min(f_img_abs)))*255;
imshow(f_img_abs); %显示频谱幅度
title(’图像的幅频分布’);
在运行到
f_img_abs = (f_img_abs-min(min(f_img_abs)))./ (max(max(f_img_abs))-min(min(f_img_abs)))*255;
出现如下错误:
Array dimensions must match for binary array op
发现是f_img_abs-min(min(f_img_abs))中维度的匹配问题。于是,对代码做出如下修改:%fft2_example.m %分析图像的频谱img = imread('C:\Users\ljj\Desktop\coin.jpg'); %读图像文件f_img = fft2(double(img)); %二维fft变换f_img = fftshift(f_img); %把直流成分移动频谱的中间imshow(img); %显示图像figure; f_img_abs = abs(f_img); %得到频谱幅度f_min=min(min(f_img_abs));f_max=max(max(f_img_abs));for i=1:3%把频谱幅度变换到[0,255]范围内 f_img_abs(:,:,i) = (f_img_abs(:,:,i)-f_min(i))./(f_max(i)-f_min(i))*255;end;imshow(f_img_abs); %显示频谱幅度title('图像的幅频分布'); 运行之后正常,如下是运行结果:
图一 原始图片
图二 图片的幅频分布
|
|