Matlab数字图像处理,要求详细解释代码,每个函数都要解释.这个是对图像求幅值谱和相位谱,并对其进行重构.

>> I=imread('辣椒bmp.bmp');
>> figure(1)
>> imshow(real(I));
>> I=I(:,:,3);
??? Index exceeds matrix dimensions.

>> fftI=fft2(I);
>> sfftI=fftshift(fftI);
>> RRfdp1=real(sfftI);
>> IIfdp1=imag(sfftI);
>> a=sqrt( RRfdp1.^2+IIfdp1.^2);
>> a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;
>> figure(2)
>> imshow(real(a));
>> b=angle(fftI);
>> figure(3)
>> imshow(real(b));%
>> theta=30;
>> RR1=a*cos(theta);
>> II1=a*sin(theta);
>> fftI1=RR1+i.*II1;
>> C=ifft2(fftI1)*255;
>> figure(4)
>> imshow(real(C));
>> MM=150;
>> RR2=MM*cos(angle(fftI));
>> II2=MM*sin(angle(fftI));
>> fftI2=RR2+i.*II2;
>> D=ifft2(fftI2);
>> figure(5)
>> imshow(real(D));

我和你说说吧,先说基本函数:
fft2是求傅里叶变换;
fftshift是把变换后的图像转置,让非零值转到中心,好观察。
real就是求实部;
imag就是求虚部;

你知道经过傅里叶变换原来的空间域转到频域上了吧?
频域的概念是有实部有虚部的是吧,那你怎么能在平面上表示出来呢?
就用到了复数里的几个概念:
一个是虚部实部的平方和均值(sqrt( RRfdp1.^2+IIfdp1.^2);)
在一个就是夹角问题(b=angle(fftI);)
这个知识高数都有,我就不用说了吧?

至于a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;
我觉得就是一个圆滑函数,比如235.536我想让它变成240.
就是乘以圆滑系数,再乘以225。
max(max(a))是求矩阵a里的最大的那个像素值。

希望你掌握好的学习方法,分析程序如果看不懂的话可以一行行的运行,通过workspace找到分步运行的结果,具体分析。

最后感慨一句:百度知道不是赚钱的地方,分多分少不是衡量知识的标准。我助人为乐我快乐,积分又不能换钱,要那么多干嘛。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-05-19
>> I=imread('辣椒bmp.bmp'); % 从当前目录读取图像
>> figure(1) % 创建一个视图,取名1
>> imshow(real(I)); % 将图像I只取实部(如果是虚数的话),并显示在视图1中
>> I=I(:,:,3); % 取图像I的蓝色分量,1为红色,2为绿色,3为蓝色。
??? Index exceeds matrix dimensions.

>> fftI=fft2(I); % 获取2维离散傅里叶变化后的图像,保存到fftI
>> sfftI=fftshift(fftI); % 将傅里叶变化的中心移到图像中心,保存到sfftI
>> RRfdp1=real(sfftI); % 取实部
>> IIfdp1=imag(sfftI); % 取虚部
>> a=sqrt( RRfdp1.^2+IIfdp1.^2); % 取模,即实部于虚部的平方和再开方
>> a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225; % 灰度拉升,将变换后的图像拉升到0~255区间
>> figure(2) % 创建一个视图,取名2
>> imshow(real(a)); % 将图像a只取实部(如果是虚数的话),并显示在视图2中
>> b=angle(fftI); % 取虚数fftI的弧度
>> figure(3) % 创建一个视图,取名3
>> imshow(real(b)); % 将图像b只取实部(如果是虚数的话),并显示在视图3中
>> theta=30; % 角度常量
>> RR1=a*cos(theta); % RR1 = a*cos(30),注意,这里可能有错误,30度角没有转到弧度,本意可能是cos(theta/180*pi);
>> II1=a*sin(theta); % II1 = a*sin(30),注意,这里可能有错误,30度角没有转到弧度,本意可能是sin(theta/180*pi);
>> fftI1=RR1+i.*II1; % 得到的实部RR1和虚部II1组合成虚数fftI1
>> C=ifft2(fftI1)*255; % 2维傅里叶反变化后*255保存到C
>> figure(4) % 创建一个视图,取名4
>> imshow(real(C)); % 将图像C只取实部(如果是虚数的话),并显示在视图4中
>> MM=150; % 常量
>> RR2=MM*cos(angle(fftI)); % 常量*cos(虚数fftI的弧度)
>> II2=MM*sin(angle(fftI)); % 常量*sin(虚数fftI的弧度)
>> fftI2=RR2+i.*II2; % 得到新的虚数fftI2
>> D=ifft2(fftI2); % 2维傅里叶反变化
>> figure(5) % 创建一个视图,取名5
>> imshow(real(D)); % 将图像D只取实部(如果是虚数的话),并显示在视图5中本回答被提问者采纳
第2个回答  2011-09-25
Image=imread('原图像');
subplot(2,2,1)
imshow(Image);
title('原图');
Spectrum=fft2(Image);
subplot(2,2,2)
imshow(Spectrum);
title('FFT 变换结果');
subplot(2,2,3)
Spectrum=fftshift(Spectrum);
imshow(Spectrum);
title('零点平移');
subplot(2,2,4)
imshow(log(abs(Spectrum)),[]);
title('系数分布图');
%低通滤波
figure; %建立一张空白图纸
subplot(2,2,1)
imshow(log(abs(Spectrum)),[]);
title('系数分布图');
Filter=zeros(180,240); %滤波数组赋初值,全零;自己根据图像的分辨率来确定,如180*240
r=50; %滤波窗口半径,从中心到半径窗口内滤波数组赋值1
for i=(180/2-r+1):(180/2+r);
for j=(240/2-r+1):(240/2+r);
Filter(i,j)=1;
end;
end;
subplot(2,2,2)
imshow(Filter,[]);
title('滤波窗口');
SpectrumN=Filter.*Spectrum; %频谱与滤波模板卷积
subplot(2,2,3)
imshow(log(abs(SpectrumN)),[]);
title('滤波后频谱');
SpectrumN=ifftshift(SpectrumN);
I2=ifft2(SpectrumN);
subplot(2,2,4)
imshow(abs(I2),[]);
title('反变换图像');

这是我们以前做实验时用的程序,用的傅里叶变换,你稍微改动下应该就行了~
第3个回答  2011-09-25

图像的时域分布具有随机性,而频域分布具有集中性,傅里叶变换后,图像的主要能量集中在直流和低频部分。大概就是这么个理。
第4个回答  2011-09-24
每个函数都要讲清楚?
只有10分?追问

如果满意,我可以再掏20分。其实我有的函数不太懂,譬如real(),fftI,sfft,fftI=fft2(I);
>> sfftI=fftshift(fftI);
>> RRfdp1=real(sfftI);
>> IIfdp1=imag(sfftI);
>> a=sqrt( RRfdp1.^2+IIfdp1.^2);
>> a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;
也都不太懂,这个算法也看不懂,晕死了都快。所以才想要一份相当详细的解答。

Matlab数字图像处理,要求详细解释代码,每个函数都要解释.这个是对图像...
一个是虚部实部的平方和均值(sqrt( RRfdp1.^2+IIfdp1.^2);)在一个就是夹角问题(b=angle(fftI);)这个知识高数都有,我就不用说了吧?至于a=(a-min(min(a)))\/(max(max(a))-min(min(a)))*225;我觉得就是一个圆滑函数,比如235.536我想让它变成240.就是乘以圆滑系数,再乘以225。

求Matlab编程的代码。对lena.bmp图片,同时对其幅值谱和相位谱恢复图片...
imshow(log(FG+1),[])%显示频谱幅度 title('图像频谱幅度');subplot(2,2,2);imshow(angle(fftshift(G)),[])title('图像相位');--- subplot(2,2,3);imshow(log(1+abs(IFG)),[]);title('图像频谱幅度的逆变换');subplot(2,2,4);imshow(IPG,[]);title('图像相位的逆变换');--...

求matlab周期三角波信号频谱分析的代码,能画出三角波信号、幅度谱和相位...
产生峰值为1的三角波,分析其0~63次谐波的幅值谱和相位谱 clf;Fs =128;%采样频率 T = 1\/Fs;% 采样周期 N = 128;% 采样点数 t = (0:N-1)*T;% 时间,单位:S x=zeros(N);for n=0:N-1 b=fix((n)\/(N\/4));Y=fft(y,512);F =10*f*[0:256]\/512;fp=2*sqrt(Y.*c...

信号处理—频域分析(幅值谱、相位谱)
代码部分,我们提供了主函数main.m和幅值谱相位谱计算函数frequ_am_phase.m,详细解释了函数的输入和输出,以及如何处理信号长度和相位阈值。通过设置不同的阈值,可以改进相位谱的精度,过滤掉噪声影响。同时,代码中还包含了MATLAB官方文档和宋知用编著的书籍作为理论支持。总结来说,频域分析是信号处理中...

MATLAB对一张图像做傅里叶变换FFT的意义,已经图像功率谱绘制
冈萨雷斯版<图像处理>里面的解释非常形象:一个恰当的比喻是将傅里叶变换比作一个玻璃棱镜。棱镜是可以将光分解为不同颜色的物理仪器,每个成分的颜色由波长(或频率)来决定。傅里叶变换可以看作是数学上的棱镜,将函数基于频率分解为不同的成分。当我们考虑光时,讨论它的光谱或频率谱。同样, 傅立叶...

在MATLAB中的一段代码解释
加窗带来的副作用是信号幅度受到影响,为了使加窗后的信号的功率谱或幅值谱保持不变, 加窗以后必须乘一个恢复系数.当然这个恢复系数是窗函数特性决定的.常见的窗函数的恢复系数如下:

Matlab中短时傅里叶变换中一些函数变换步骤不明,求解释!
(1)matlab是按列储存的,当然可以使1*256的了,不过需要自己设。傅里叶变化是对称变化,一般都要求数据个数是2的幂次。(2)tfr对谁做fft变换,fft就和谁是同样大小的矩阵。(3)上面说了,fft变换后的波谱是对称的,如果tfr是256的话,只需取256\/2=128个就行。(4)随机数组或原数据体中数据...

从时域和频域来解析傅里叶变换(含代码和性质)
b.接下来再讲解两个概念 :频谱和相位谱 对比展示:频谱只代表了一个正弦函数的幅值,而要准确描述一个正弦函数,我们不仅需要幅值,还需要相位,不同相位决定了波的位置,所以对于频域分析,仅仅有频谱(振幅谱)是不够的,我们还需要一个相位谱。 频谱的重点是侧面看,相位谱的重点则是从下面看。

相似回答