怎么用mathematica 图像注释作图像频谱分析

如何用Mathematica把一组函数和另外一个函数画在一张图中并显示_数学建模吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:90,870贴子:
如何用Mathematica把一组函数和另外一个函数画在一张图中并显示收藏
如图 我用show 任然只是分开显示两个图像 我想让第一组函数图像和第二个函数图像显示在同一坐标轴中 范围都是0到1 然后从图中标出这一组函数和第二函数的交点坐标 请问该怎么做 Plot[Table[(4 N^2 - N \[Theta]^2 +
N - \[Theta]^4 + \[Theta]^2)/(2 (N - \[Theta] +
1) (N + \[Theta]^2)), {N, 0, 1, 0.1}], {\[Theta], 0, 1}]Plot[1/2*(((\[Theta]^2)/((1 - \[Theta])^2 + \[Theta]^2))*(-\[Theta]) \+ ((\[Theta]^2)/((1 - \[Theta])^2 + \[Theta]^2)) + \[Theta] +
1), {\[Theta], 0, 1}]这是代码 希望各位司机带带我~
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或更多公众号:gh_a百纳知识致力于求真、创新的知识精神,立志要做各类知识的分享者。最新文章相关作者文章搜狗:感谢您阅读[分享]Mathematica在图像处理中的简单应用,本文由网友投稿产生,如果侵犯了您的相关权益,请联系管理员。图像傅立叶频谱分析
参考:http://cns-alumni.bu.edu/~slehar/fourier/fourier.html#filtering 很棒
如果输入二维图像数据,则显示的图像是输入的灰度分布,傅立叶频谱是输入的频率分布,频谱图中心对称。
图像频谱即二维频谱图通过对原图像进行水平和竖直两个方向的所有扫描线处一维傅立叶变换的叠加得到
频谱图中以图中心为圆心,圆的相位对应原图中频率分量的相位,半径对应频率高低,低频半径小,高频半径大,中心为直流分量,某点亮度对应该频率能量高低。
从测试案例中更清楚的提现以上几点
以下为几个测试案例:
1.水平方向为sin函数,竖直方向没有变化,对应频谱如图为零相位相对低频的一个亮点,而其他位置基本为黑色,说明没有其他频率分量(水平方向其他小亮点是由于原图不是严格的sin函数而产生的噪声)
2.相对1频率变高,频谱图中亮点位置半径变大
3.sin函数方向改变,频谱图的方向也改变,两种解释。可以理解为水平方向和竖直方向单独扫描都是sin函数,对应频谱叠加所得。也可是理解为原图sin函数方向(相位)改变,频谱图相位变化
4.3图叠加1图
5.频率再次升高,频谱图半径再次增大
6.1图叠加2图,频谱图也叠加
7.原图为一条竖直线,每个行扫描需要若干频率(几乎所有频率)正弦曲线去叠加逼近,所以频谱图包含了所有频率,竖直扫描依然没有变化,频谱图只有一条横线。
8.以下两图对比,第一个图变化不明显,对比度低,频谱图中心亮周围暗,主要为低频分量
第二个图相对对比度高,频谱周围部分比第一张图的频谱要亮的多,第二张图高频分量更多,但原图背景仍然是灰色图,所以频谱图也是中心最亮,低频分量最高。
1.图像的傅里叶频谱的意义
之前的博文其实已经归纳过这方面的内容了。我们常用的图像平滑处理,其实就是一个低通滤波,一定程度上去除高频信号,可以使得图像变得柔和(也就是平滑)。但是,在去除周期性噪声时候,空间域内的滤波(卷积)就不是那么好操作了。所以,这里时候,无论是理解起来方便,还是其他原因,都需要在频域内进行滤波。&
详细的叙述还是在下面的博文里面啦!!!!&
2. 傅里叶频谱的计算
这部分的内容,主要就是使用自带的函数&
void cvDFT( const CvArr* src, CvArr* dst, int flags, int nonzero_rows=0 )&
去求取图像的傅里叶变换。这里,输出结果CvArr* dst由两个通道组成,分别代表了实部与虚部。我们再根据如下算式,就可以得到傅里叶频谱了。&
|F(u,v)|=R2(u,v)+F2(u,v)?????????????????√2&
我自己也参考了很多人的代码,然后实现的代码如下。
&code class=&hljs objectivec has-numbering& style=&display: padding: 0 background-color: color: box-sizing: border- font-family: 'Source Code Pro',font-size: white-space: border-top-left-radius: 0 border-top-right-radius: 0 border-bottom-right-radius: 0 border-bottom-left-radius: 0 word-wrap: background-position: background-repeat:&&IplImage* fft2(IplImage* image_input)
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&int&/span& dftWidth
= getOptimalDFTSize(image_input-&width);
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&int&/span& dftHeight = getOptimalDFTSize(image_input-&height);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//cout&& & Width& &&
image_input-&width && &
&& &\n&;&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//cout&& &Height& && image_input-&height && &
dftHeight && &\n&;&/span&
IplImage* image_padded = cvCreateImage(cvSize(dftWidth,dftHeight),
IPL_DEPTH_8U,
&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&);
cvCopyMakeBorder( image_input, image_padded, cvPoint(&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&), IPL_BORDER_CONSTANT,cvScalarAll(&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&));
IplImage *image_Re =&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span& , *image_Im = &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&, *image_Fourier = &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&;
image_Re = cvCreateImage(cvSize(dftWidth,dftHeight),IPL_DEPTH_64F,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&);
image_Im = cvCreateImage(cvSize(dftWidth,dftHeight),IPL_DEPTH_64F,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&);
image_Fourier = cvCreateImage(cvSize(dftWidth,dftHeight),IPL_DEPTH_64F,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2&/span&);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//image_Re &--- image_padded &/span&
cvConvertScale(image_padded,image_Re);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//image_Im &--- 0&/span&
cvZero(image_Im);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//image_Fourier[0] &--- image_Re&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//image_Fourier[1] &--- image_Im&/span&
cvMerge(image_Re,image_Im,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,image_Fourier);
cvDFT(image_Fourier,image_Fourier,CV_DXT_FORWARD);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//image_Fourier[0] ---& image_Re&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//image_Fourier[1] ---& image_Im&/span&
cvSplit(image_Fourier,image_Re,image_Im,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//Mag = sqrt(Re^2 + Im^2)&/span&
cvPow(image_Re,image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2.0&/span&);
cvPow(image_Im,image_Im,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2.0&/span&);
cvAdd(image_Re,image_Im,image_Re);
cvPow(image_Re,image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0.5&/span&);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// log (1 + Mag)&/span&
cvAddS(image_Re,cvScalar(&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&),image_Re );
cvLog (image_Re,image_Re);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//
|-----|-----|
|-----|-----|
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//
|-----|-----|
|-----|-----|&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//
|-----|-----|
|-----|-----|&/span&
IplImage *Fourier = cvCreateImage(cvSize(dftWidth,dftHeight),IPL_DEPTH_64F,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&);
cvZero(image_Fourier);
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&int&/span& cx = image_Re-&width/&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2&/span&;
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&int&/span& cy = image_Re-&height/&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2&/span&;
cvSetImageROI(image_Re,cvRect( &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&, &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,cx,cy));
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 1 &/span&
cvSetImageROI( Fourier,cvRect(cx,cy,cx,cy));
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 4 &/span&
cvAddWeighted(image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&,Fourier,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,Fourier);
cvSetImageROI(image_Re,cvRect(cx,cy,cx,cy));
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 4 &/span&
cvSetImageROI( Fourier,cvRect( &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&, &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,cx,cy));
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 1 &/span&
cvAddWeighted(image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&,Fourier,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,Fourier);
cvSetImageROI(image_Re,cvRect(cx, &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,cx,cy));
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 3 &/span&
cvSetImageROI( Fourier,cvRect( &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,cy,cx,cy));
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 2 &/span&
cvAddWeighted(image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&,Fourier,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,Fourier);
cvSetImageROI(image_Re,cvRect( &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,cy,cx,cy));
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 2 &/span&
cvSetImageROI( Fourier,cvRect(cx, &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,cx,cy));
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 3 &/span&
cvAddWeighted(image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&,Fourier,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,Fourier);
cvResetImageROI(image_Re);
cvResetImageROI( Fourier);
cvNormalize(Fourier,Fourier,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,CV_C,&span class=&hljs-literal& style=&color: rgb(0, 102, 102); box-sizing: border-&&NULL&/span&);
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span&(Fourier);
}&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&li style=&box-sizing: border- padding: 0px 5&&17&/li&&li style=&box-sizing: border- padding: 0px 5&&18&/li&&li style=&box-sizing: border- padding: 0px 5&&19&/li&&li style=&box-sizing: border- padding: 0px 5&&20&/li&&li style=&box-sizing: border- padding: 0px 5&&21&/li&&li style=&box-sizing: border- padding: 0px 5&&22&/li&&li style=&box-sizing: border- padding: 0px 5&&23&/li&&li style=&box-sizing: border- padding: 0px 5&&24&/li&&li style=&box-sizing: border- padding: 0px 5&&25&/li&&li style=&box-sizing: border- padding: 0px 5&&26&/li&&li style=&box-sizing: border- padding: 0px 5&&27&/li&&li style=&box-sizing: border- padding: 0px 5&&28&/li&&li style=&box-sizing: border- padding: 0px 5&&29&/li&&li style=&box-sizing: border- padding: 0px 5&&30&/li&&li style=&box-sizing: border- padding: 0px 5&&31&/li&&li style=&box-sizing: border- padding: 0px 5&&32&/li&&li style=&box-sizing: border- padding: 0px 5&&33&/li&&li style=&box-sizing: border- padding: 0px 5&&34&/li&&li style=&box-sizing: border- padding: 0px 5&&35&/li&&li style=&box-sizing: border- padding: 0px 5&&36&/li&&li style=&box-sizing: border- padding: 0px 5&&37&/li&&li style=&box-sizing: border- padding: 0px 5&&38&/li&&li style=&box-sizing: border- padding: 0px 5&&39&/li&&li style=&box-sizing: border- padding: 0px 5&&40&/li&&li style=&box-sizing: border- padding: 0px 5&&41&/li&&li style=&box-sizing: border- padding: 0px 5&&42&/li&&li style=&box-sizing: border- padding: 0px 5&&43&/li&&li style=&box-sizing: border- padding: 0px 5&&44&/li&&li style=&box-sizing: border- padding: 0px 5&&45&/li&&li style=&box-sizing: border- padding: 0px 5&&46&/li&&li style=&box-sizing: border- padding: 0px 5&&47&/li&&li style=&box-sizing: border- padding: 0px 5&&48&/li&&li style=&box-sizing: border- padding: 0px 5&&49&/li&&li style=&box-sizing: border- padding: 0px 5&&50&/li&&li style=&box-sizing: border- padding: 0px 5&&51&/li&&li style=&box-sizing: border- padding: 0px 5&&52&/li&&li style=&box-sizing: border- padding: 0px 5&&53&/li&&li style=&box-sizing: border- padding: 0px 5&&54&/li&&li style=&box-sizing: border- padding: 0px 5&&55&/li&&li style=&box-sizing: border- padding: 0px 5&&56&/li&&li style=&box-sizing: border- padding: 0px 5&&57&/li&&li style=&box-sizing: border- padding: 0px 5&&58&/li&&li style=&box-sizing: border- padding: 0px 5&&59&/li&&li style=&box-sizing: border- padding: 0px 5&&60&/li&&li style=&box-sizing: border- padding: 0px 5&&61&/li&&li style=&box-sizing: border- padding: 0px 5&&62&/li&&li style=&box-sizing: border- padding: 0px 5&&63&/li&&li style=&box-sizing: border- padding: 0px 5&&64&/li&&li style=&box-sizing: border- padding: 0px 5&&65&/li&&li style=&box-sizing: border- padding: 0px 5&&66&/li&&li style=&box-sizing: border- padding: 0px 5&&67&/li&&li style=&box-sizing: border- padding: 0px 5&&68&/li&&li style=&box-sizing: border- padding: 0px 5&&69&/li&&li style=&box-sizing: border- padding: 0px 5&&70&/li&&li style=&box-sizing: border- padding: 0px 5&&71&/li&&li style=&box-sizing: border- padding: 0px 5&&72&/li&&li style=&box-sizing: border- padding: 0px 5&&73&/li&&li style=&box-sizing: border- padding: 0px 5&&74&/li&&li style=&box-sizing: border- padding: 0px 5&&75&/li&&li style=&box-sizing: border- padding: 0px 5&&76&/li&&li style=&box-sizing: border- padding: 0px 5&&77&/li&&li style=&box-sizing: border- padding: 0px 5&&78&/li&&/ul&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&li style=&box-sizing: border- padding: 0px 5&&17&/li&&li style=&box-sizing: border- padding: 0px 5&&18&/li&&li style=&box-sizing: border- padding: 0px 5&&19&/li&&li style=&box-sizing: border- padding: 0px 5&&20&/li&&li style=&box-sizing: border- padding: 0px 5&&21&/li&&li style=&box-sizing: border- padding: 0px 5&&22&/li&&li style=&box-sizing: border- padding: 0px 5&&23&/li&&li style=&box-sizing: border- padding: 0px 5&&24&/li&&li style=&box-sizing: border- padding: 0px 5&&25&/li&&li style=&box-sizing: border- padding: 0px 5&&26&/li&&li style=&box-sizing: border- padding: 0px 5&&27&/li&&li style=&box-sizing: border- padding: 0px 5&&28&/li&&li style=&box-sizing: border- padding: 0px 5&&29&/li&&li style=&box-sizing: border- padding: 0px 5&&30&/li&&li style=&box-sizing: border- padding: 0px 5&&31&/li&&li style=&box-sizing: border- padding: 0px 5&&32&/li&&li style=&box-sizing: border- padding: 0px 5&&33&/li&&li style=&box-sizing: border- padding: 0px 5&&34&/li&&li style=&box-sizing: border- padding: 0px 5&&35&/li&&li style=&box-sizing: border- padding: 0px 5&&36&/li&&li style=&box-sizing: border- padding: 0px 5&&37&/li&&li style=&box-sizing: border- padding: 0px 5&&38&/li&&li style=&box-sizing: border- padding: 0px 5&&39&/li&&li style=&box-sizing: border- padding: 0px 5&&40&/li&&li style=&box-sizing: border- padding: 0px 5&&41&/li&&li style=&box-sizing: border- padding: 0px 5&&42&/li&&li style=&box-sizing: border- padding: 0px 5&&43&/li&&li style=&box-sizing: border- padding: 0px 5&&44&/li&&li style=&box-sizing: border- padding: 0px 5&&45&/li&&li style=&box-sizing: border- padding: 0px 5&&46&/li&&li style=&box-sizing: border- padding: 0px 5&&47&/li&&li style=&box-sizing: border- padding: 0px 5&&48&/li&&li style=&box-sizing: border- padding: 0px 5&&49&/li&&li style=&box-sizing: border- padding: 0px 5&&50&/li&&li style=&box-sizing: border- padding: 0px 5&&51&/li&&li style=&box-sizing: border- padding: 0px 5&&52&/li&&li style=&box-sizing: border- padding: 0px 5&&53&/li&&li style=&box-sizing: border- padding: 0px 5&&54&/li&&li style=&box-sizing: border- padding: 0px 5&&55&/li&&li style=&box-sizing: border- padding: 0px 5&&56&/li&&li style=&box-sizing: border- padding: 0px 5&&57&/li&&li style=&box-sizing: border- padding: 0px 5&&58&/li&&li style=&box-sizing: border- padding: 0px 5&&59&/li&&li style=&box-sizing: border- padding: 0px 5&&60&/li&&li style=&box-sizing: border- padding: 0px 5&&61&/li&&li style=&box-sizing: border- padding: 0px 5&&62&/li&&li style=&box-sizing: border- padding: 0px 5&&63&/li&&li style=&box-sizing: border- padding: 0px 5&&64&/li&&li style=&box-sizing: border- padding: 0px 5&&65&/li&&li style=&box-sizing: border- padding: 0px 5&&66&/li&&li style=&box-sizing: border- padding: 0px 5&&67&/li&&li style=&box-sizing: border- padding: 0px 5&&68&/li&&li style=&box-sizing: border- padding: 0px 5&&69&/li&&li style=&box-sizing: border- padding: 0px 5&&70&/li&&li style=&box-sizing: border- padding: 0px 5&&71&/li&&li style=&box-sizing: border- padding: 0px 5&&72&/li&&li style=&box-sizing: border- padding: 0px 5&&73&/li&&li style=&box-sizing: border- padding: 0px 5&&74&/li&&li style=&box-sizing: border- padding: 0px 5&&75&/li&&li style=&box-sizing: border- padding: 0px 5&&76&/li&&li style=&box-sizing: border- padding: 0px 5&&77&/li&&li style=&box-sizing: border- padding: 0px 5&&78&/li&&/ul&
从这里开始,还是简单的分析一下代码吧。
&code class=&hljs cs has-numbering& style=&display: padding: 0 background-color: color: box-sizing: border- font-family: 'Source Code Pro',font-size: white-space: border-top-left-radius: 0 border-top-right-radius: 0 border-bottom-right-radius: 0 border-bottom-left-radius: 0 word-wrap: background-position: background-repeat:&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&int&/span& dftWidth
= getOptimalDFTSize(image_input-&width);
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&int&/span& dftHeight = getOptimalDFTSize(image_input-&height);
IplImage* image_padded = cvCreateImage(cvSize(dftWidth,dftHeight),
IPL_DEPTH_8U,
&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&);
cvCopyMakeBorder( image_input, image_padded, cvPoint(&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&), IPL_BORDER_CONSTANT,cvScalarAll(&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&)); &/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&/ul&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&/ul&
这里参考了文献[2]中的说法,在尺寸数为2,3,5的倍数的场合,计算的速度是最快的。所以使用函数getOptimalDFTSize()来寻找最匹配的尺寸,然后再同伙cvCopyMakeBorder()进行多余部分的填充,这里选的配置是将图放在从点(0,0)开始的位置,其余不足的地方,用0进行填充。
&code class=&hljs haskell has-numbering& style=&display: padding: 0 background-color: color: box-sizing: border- font-family: 'Source Code Pro',font-size: white-space: border-top-left-radius: 0 border-top-right-radius: 0 border-bottom-right-radius: 0 border-bottom-left-radius: 0 word-wrap: background-position: background-repeat:&&&span class=&hljs-type& style=&box-sizing: border- color: rgb(102, 0, 102);&&IplImage&/span& *image_Re =&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span& , *image_Im = &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&, *image_Fourier = &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&;
&span class=&hljs-title& style=&box-sizing: border-&&image_Re&/span& = cvCreateImage(cvSize(dftWidth,dftHeight),&span class=&hljs-type& style=&box-sizing: border- color: rgb(102, 0, 102);&&IPL_DEPTH_64F&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&);
&span class=&hljs-title& style=&box-sizing: border-&&image_Im&/span& = cvCreateImage(cvSize(dftWidth,dftHeight),&span class=&hljs-type& style=&box-sizing: border- color: rgb(102, 0, 102);&&IPL_DEPTH_64F&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&);
&span class=&hljs-title& style=&box-sizing: border-&&image_Fourier&/span& = cvCreateImage(cvSize(dftWidth,dftHeight),&span class=&hljs-type& style=&box-sizing: border- color: rgb(102, 0, 102);&&IPL_DEPTH_64F&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2&/span&);
//image_Re &-&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&-- image_padded &/span&
&span class=&hljs-title& style=&box-sizing: border-&&cvConvertScale&/span&(image_padded,image_Re);
//image_Im &-&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&-- 0&/span&
&span class=&hljs-title& style=&box-sizing: border-&&cvZero&/span&(image_Im);
//image_Fourier[&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&] &-&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&-- image_Re&/span&
//image_Fourier[&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&] &-&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&-- image_Im&/span&
&span class=&hljs-title& style=&box-sizing: border-&&cvMerge&/span&(image_Re,image_Im,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,image_Fourier);
&span class=&hljs-title& style=&box-sizing: border-&&cvDFT&/span&(image_Fourier,image_Fourier,&span class=&hljs-type& style=&box-sizing: border- color: rgb(102, 0, 102);&&CV_DXT_FORWARD&/span&);
//image_Fourier[&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&] &span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&---& image_Re&/span&
//image_Fourier[&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&] &span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&---& image_Im&/span&
&span class=&hljs-title& style=&box-sizing: border-&&cvSplit&/span&(image_Fourier,image_Re,image_Im,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&);&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&li style=&box-sizing: border- padding: 0px 5&&17&/li&&li style=&box-sizing: border- padding: 0px 5&&18&/li&&li style=&box-sizing: border- padding: 0px 5&&19&/li&&/ul&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&li style=&box-sizing: border- padding: 0px 5&&17&/li&&li style=&box-sizing: border- padding: 0px 5&&18&/li&&li style=&box-sizing: border- padding: 0px 5&&19&/li&&/ul&
其实这里的很好理解的,将填充到最适尺寸的图像赋值给image_Re,将image_Im赋值为0。让后将这两层图复制到image_Fourier的两个通道里,然后使用函数cvDFT()进行傅里叶变换。得到结果还是存在于image_Fourier的两个通道里,分别代表实部与虚部,然后通过cvSplit()将其抽出到image_Re与image_Im里。
&code class=&hljs scss has-numbering& style=&display: padding: 0 background-color: color: box-sizing: border- font-family: 'Source Code Pro',font-size: white-space: border-top-left-radius: 0 border-top-right-radius: 0 border-bottom-right-radius: 0 border-bottom-left-radius: 0 word-wrap: background-position: background-repeat:&&&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//Mag = sqrt(Re^2 + Im^2)&/span&
&span class=&hljs-function& style=&box-sizing: border-&&cvPow(image_Re,image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2.0&/span&)&/span&;
&span class=&hljs-function& style=&box-sizing: border-&&cvPow(image_Im,image_Im,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2.0&/span&)&/span&;
&span class=&hljs-function& style=&box-sizing: border-&&cvAdd(image_Re,image_Im,image_Re)&/span&;
&span class=&hljs-function& style=&box-sizing: border-&&cvPow(image_Re,image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0.5&/span&)&/span&;
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// log (1 + Mag)&/span&
&span class=&hljs-function& style=&box-sizing: border-&&cvAddS(image_Re,&span class=&hljs-function& style=&box-sizing: border-&&cvScalar(&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&)&/span&,image_Re )&/span&;
cvLog (image_Re,image_Re); &/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&/ul&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&/ul&
以上代码,实现了以下计算。&
|F(u,v)|=R2(u,v)+F2(u,v)?????????????????√2&
还有就是进行了一个对数变换,这个也没的说,看傅里叶频谱的标配操作。
&code class=&hljs mathematica has-numbering& style=&display: padding: 0 background-color: color: box-sizing: border- font-family: 'Source Code Pro',font-size: white-space: border-top-left-radius: 0 border-top-right-radius: 0 border-bottom-right-radius: 0 border-bottom-left-radius: 0 word-wrap: background-position: background-repeat:&&//
|-----|-----|
|-----|-----|
&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&
&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&3&/span&
&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&4&/span&
&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2&/span&
|-----|-----|
|-----|-----|
&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2&/span&
&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&4&/span&
&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&3&/span&
&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&
|-----|-----|
|-----|-----|
IplImage *&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span& = cvCreateImage(cvSize(dftWidth,dftHeight),IPL_DEPTH_64F,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&);
cvZero(image_Fourier);
int cx = image_Re-&width/&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2&/span&;
int cy = image_Re-&height/&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2&/span&;
cvSetImageROI(image_Re,cvRect( &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&, &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,cx,cy));
// &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&
cvSetImageROI( &span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&,cvRect(cx,cy,cx,cy));
// &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&4&/span&
cvAddWeighted(image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&,&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&);
cvSetImageROI(image_Re,cvRect(cx,cy,cx,cy));
// &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&4&/span&
cvSetImageROI( &span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&,cvRect( &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&, &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,cx,cy));
// &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&
cvAddWeighted(image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&,&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&);
cvSetImageROI(image_Re,cvRect(cx, &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,cx,cy));
// &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&3&/span&
cvSetImageROI( &span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&,cvRect( &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,cy,cx,cy));
// &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2&/span&
cvAddWeighted(image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&,&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&);
cvSetImageROI(image_Re,cvRect( &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,cy,cx,cy));
// &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2&/span&
cvSetImageROI( &span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&,cvRect(cx, &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,cx,cy));
// &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&3&/span&
cvAddWeighted(image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&,&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&);
cvResetImageROI(image_Re);
cvResetImageROI( &span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&);
cvNormalize(&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&,&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,CV_C,NULL);
return(&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&Fourier&/span&);&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&li style=&box-sizing: border- padding: 0px 5&&17&/li&&li style=&box-sizing: border- padding: 0px 5&&18&/li&&li style=&box-sizing: border- padding: 0px 5&&19&/li&&li style=&box-sizing: border- padding: 0px 5&&20&/li&&li style=&box-sizing: border- padding: 0px 5&&21&/li&&li style=&box-sizing: border- padding: 0px 5&&22&/li&&li style=&box-sizing: border- padding: 0px 5&&23&/li&&li style=&box-sizing: border- padding: 0px 5&&24&/li&&li style=&box-sizing: border- padding: 0px 5&&25&/li&&li style=&box-sizing: border- padding: 0px 5&&26&/li&&li style=&box-sizing: border- padding: 0px 5&&27&/li&&li style=&box-sizing: border- padding: 0px 5&&28&/li&&li style=&box-sizing: border- padding: 0px 5&&29&/li&&li style=&box-sizing: border- padding: 0px 5&&30&/li&&li style=&box-sizing: border- padding: 0px 5&&31&/li&&li style=&box-sizing: border- padding: 0px 5&&32&/li&&li style=&box-sizing: border- padding: 0px 5&&33&/li&&li style=&box-sizing: border- padding: 0px 5&&34&/li&&/ul&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&li style=&box-sizing: border- padding: 0px 5&&17&/li&&li style=&box-sizing: border- padding: 0px 5&&18&/li&&li style=&box-sizing: border- padding: 0px 5&&19&/li&&li style=&box-sizing: border- padding: 0px 5&&20&/li&&li style=&box-sizing: border- padding: 0px 5&&21&/li&&li style=&box-sizing: border- padding: 0px 5&&22&/li&&li style=&box-sizing: border- padding: 0px 5&&23&/li&&li style=&box-sizing: border- padding: 0px 5&&24&/li&&li style=&box-sizing: border- padding: 0px 5&&25&/li&&li style=&box-sizing: border- padding: 0px 5&&26&/li&&li style=&box-sizing: border- padding: 0px 5&&27&/li&&li style=&box-sizing: border- padding: 0px 5&&28&/li&&li style=&box-sizing: border- padding: 0px 5&&29&/li&&li style=&box-sizing: border- padding: 0px 5&&30&/li&&li style=&box-sizing: border- padding: 0px 5&&31&/li&&li style=&box-sizing: border- padding: 0px 5&&32&/li&&li style=&box-sizing: border- padding: 0px 5&&33&/li&&li style=&box-sizing: border- padding: 0px 5&&34&/li&&/ul&
其实重头戏在这里,这里需要一个交换操作。至于为何所求得的傅里叶频谱为什么需要交换的原因是,这个代码求得的结果其实是范围[0,2π]内的傅里叶变换。而我们所需要的是[-π,π]内的结果。详细的原因,还是在我以前的博客里有说明。&
这里,我使用了ROI操作与cvAddWeighted()函数进行了实现。其运行的结果如下所示。&
恩,基本可以看出来,直流分量也被我移动到了中心,以上代码实现了傅里叶频谱的计算与显示。
3. 不用交换操作的代码
使用MATLAB去求取尺寸为M×N图像f的傅里叶频谱时候,通常会用fft2(f,2*M,2*N)。使用此函数求得的福利叶变换,其实还是[0,2π]范围内的傅里叶变换。要想使得傅里叶频谱的DC分量位于中心的话,其实还是需要一些别的操作的。冈萨雷斯的《数字图像处理》一书中,对于这个问题,是利用了傅里叶变换的评议特性,即&
f(x,y)=f(x,y)×(-1)x+y&
然后再对函数f(x,y)进行福利叶变换,所得到结果,就是所需要的是[-π,π]内傅里叶变换的结果。具体的原理与推导,还是参看冈萨雷斯的《数字图像处理》英文原本的p258页左右,中文译本的p148左右。当然,嫌麻烦的话,还可以看我的博文,博文中也简明推导了平移特性。&
为此,实现的代码变为了如下形式。
&code class=&hljs cpp has-numbering& style=&display: padding: 0 background-color: color: box-sizing: border- font-family: 'Source Code Pro',font-size: white-space: border-top-left-radius: 0 border-top-right-radius: 0 border-bottom-right-radius: 0 border-bottom-left-radius: 0 word-wrap: background-position: background-repeat:&&IplImage* fft2_New(IplImage* image_input)
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&int&/span& dftWidth
= getOptimalDFTSize(image_input-&width);
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&int&/span& dftHeight = getOptimalDFTSize(image_input-&height);
&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&cout&/span&&& &span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&& Width&&/span& &&
image_input-&width && &span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&
&&/span& &&
&& &span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&\n&&/span&;
&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&cout&/span&&& &span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&Height&&/span& && image_input-&height && &span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&
&&/span& &&
dftHeight && &span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&\n&&/span&;
IplImage* image_padded = cvCreateImage(cvSize(dftWidth,dftHeight),
IPL_DEPTH_8U,
&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&);
cvCopyMakeBorder( image_input, image_padded, cvPoint(&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&), IPL_BORDER_CONSTANT,cvScalarAll(&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&));
IplImage *image_Re =&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span& , *image_Im = &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&, *image_Fourier = &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&;
image_Re = cvCreateImage(cvSize(dftWidth,dftHeight),IPL_DEPTH_64F,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&);
image_Im = cvCreateImage(cvSize(dftWidth,dftHeight),IPL_DEPTH_64F,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&);
image_Fourier = cvCreateImage(cvSize(dftWidth,dftHeight),IPL_DEPTH_64F,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2&/span&);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//image_Re = image_padded .* (-1)^(x+y);
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&double&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&for&/span&(&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&int&/span& y=&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&;y&image_padded-&y++)
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&for&/span&(&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&int&/span& x=&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&;x&image_padded-&x++)
pixel = cvGetReal2D(image_padded,x,y);
pixel = ((x+y)%&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2&/span& == &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&)?(pixel):((-&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&)*pixel);
cvSetReal2D(image_Re,x,y,pixel);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//image_Im &--- 0&/span&
cvZero(image_Im);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//image_Fourier[0] &--- image_Re&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//image_Fourier[1] &--- image_Im&/span&
cvMerge(image_Re,image_Im,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,image_Fourier);
cvDFT(image_Fourier,image_Fourier,CV_DXT_FORWARD);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//image_Fourier[0] ---& image_Re&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//image_Fourier[1] ---& image_Im&/span&
cvSplit(image_Fourier,image_Re,image_Im,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//Mag = sqrt(Re^2 + Im^2)&/span&
cvPow(image_Re,image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2.0&/span&);
cvPow(image_Im,image_Im,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&2.0&/span&);
cvAdd(image_Re,image_Im,image_Re);
cvPow(image_Re,image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0.5&/span&);
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// log (1 + Mag)&/span&
cvAddS(image_Re,cvScalar(&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&),image_Re );
cvLog (image_Re,image_Re);
cvNormalize(image_Re,image_Re,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&,&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&,CV_C,NULL);
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span&(image_Re);
}&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&li style=&box-sizing: border- padding: 0px 5&&17&/li&&li style=&box-sizing: border- padding: 0px 5&&18&/li&&li style=&box-sizing: border- padding: 0px 5&&19&/li&&li style=&box-sizing: border- padding: 0px 5&&20&/li&&li style=&box-sizing: border- padding: 0px 5&&21&/li&&li style=&box-sizing: border- padding: 0px 5&&22&/li&&li style=&box-sizing: border- padding: 0px 5&&23&/li&&li style=&box-sizing: border- padding: 0px 5&&24&/li&&li style=&box-sizing: border- padding: 0px 5&&25&/li&&li style=&box-sizing: border- padding: 0px 5&&26&/li&&li style=&box-sizing: border- padding: 0px 5&&27&/li&&li style=&box-sizing: border- padding: 0px 5&&28&/li&&li style=&box-sizing: border- padding: 0px 5&&29&/li&&li style=&box-sizing: border- padding: 0px 5&&30&/li&&li style=&box-sizing: border- padding: 0px 5&&31&/li&&li style=&box-sizing: border- padding: 0px 5&&32&/li&&li style=&box-sizing: border- padding: 0px 5&&33&/li&&li style=&box-sizing: border- padding: 0px 5&&34&/li&&li style=&box-sizing: border- padding: 0px 5&&35&/li&&li style=&box-sizing: border- padding: 0px 5&&36&/li&&li style=&box-sizing: border- padding: 0px 5&&37&/li&&li style=&box-sizing: border- padding: 0px 5&&38&/li&&li style=&box-sizing: border- padding: 0px 5&&39&/li&&li style=&box-sizing: border- padding: 0px 5&&40&/li&&li style=&box-sizing: border- padding: 0px 5&&41&/li&&li style=&box-sizing: border- padding: 0px 5&&42&/li&&li style=&box-sizing: border- padding: 0px 5&&43&/li&&li style=&box-sizing: border- padding: 0px 5&&44&/li&&li style=&box-sizing: border- padding: 0px 5&&45&/li&&li style=&box-sizing: border- padding: 0px 5&&46&/li&&li style=&box-sizing: border- padding: 0px 5&&47&/li&&li style=&box-sizing: border- padding: 0px 5&&48&/li&&li style=&box-sizing: border- padding: 0px 5&&49&/li&&li style=&box-sizing: border- padding: 0px 5&&50&/li&&li style=&box-sizing: border- padding: 0px 5&&51&/li&&li style=&box-sizing: border- padding: 0px 5&&52&/li&&li style=&box-sizing: border- padding: 0px 5&&53&/li&&li style=&box-sizing: border- padding: 0px 5&&54&/li&&li style=&box-sizing: border- padding: 0px 5&&55&/li&&li style=&box-sizing: border- padding: 0px 5&&56&/li&&li style=&box-sizing: border- padding: 0px 5&&57&/li&&/ul&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&li style=&box-sizing: border- padding: 0px 5&&17&/li&&li style=&box-sizing: border- padding: 0px 5&&18&/li&&li style=&box-sizing: border- padding: 0px 5&&19&/li&&li style=&box-sizing: border- padding: 0px 5&&20&/li&&li style=&box-sizing: border- padding: 0px 5&&21&/li&&li style=&box-sizing: border- padding: 0px 5&&22&/li&&li style=&box-sizing: border- padding: 0px 5&&23&/li&&li style=&box-sizing: border- padding: 0px 5&&24&/li&&li style=&box-sizing: border- padding: 0px 5&&25&/li&&li style=&box-sizing: border- padding: 0px 5&&26&/li&&li style=&box-sizing: border- padding: 0px 5&&27&/li&&li style=&box-sizing: border- padding: 0px 5&&28&/li&&li style=&box-sizing: border- padding: 0px 5&&29&/li&&li style=&box-sizing: border- padding: 0px 5&&30&/li&&li style=&box-sizing: border- padding: 0px 5&&31&/li&&li style=&box-sizing: border- padding: 0px 5&&32&/li&&li style=&box-sizing: border- padding: 0px 5&&33&/li&&li style=&box-sizing: border- padding: 0px 5&&34&/li&&li style=&box-sizing: border- padding: 0px 5&&35&/li&&li style=&box-sizing: border- padding: 0px 5&&36&/li&&li style=&box-sizing: border- padding: 0px 5&&37&/li&&li style=&box-sizing: border- padding: 0px 5&&38&/li&&li style=&box-sizing: border- padding: 0px 5&&39&/li&&li style=&box-sizing: border- padding: 0px 5&&40&/li&&li style=&box-sizing: border- padding: 0px 5&&41&/li&&li style=&box-sizing: border- padding: 0px 5&&42&/li&&li style=&box-sizing: border- padding: 0px 5&&43&/li&&li style=&box-sizing: border- padding: 0px 5&&44&/li&&li style=&box-sizing: border- padding: 0px 5&&45&/li&&li style=&box-sizing: border- padding: 0px 5&&46&/li&&li style=&box-sizing: border- padding: 0px 5&&47&/li&&li style=&box-sizing: border- padding: 0px 5&&48&/li&&li style=&box-sizing: border- padding: 0px 5&&49&/li&&li style=&box-sizing: border- padding: 0px 5&&50&/li&&li style=&box-sizing: border- padding: 0px 5&&51&/li&&li style=&box-sizing: border- padding: 0px 5&&52&/li&&li style=&box-sizing: border- padding: 0px 5&&53&/li&&li style=&box-sizing: border- padding: 0px 5&&54&/li&&li style=&box-sizing: border- padding: 0px 5&&55&/li&&li style=&box-sizing: border- padding: 0px 5&&56&/li&&li style=&box-sizing: border- padding: 0px 5&&57&/li&&/ul&
在这里,由于考虑到计算的原因,我将f(x,y)=f(x,y)×(-1)x+y这个计算,用下面代码去进行了实现。
&code class=&hljs perl has-numbering& style=&display: padding: 0 background-color: color: box-sizing: border- font-family: 'Source Code Pro',font-size: white-space: border-top-left-radius: 0 border-top-right-radius: 0 border-bottom-right-radius: 0 border-bottom-left-radius: 0 word-wrap: background-position: background-repeat:&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&for&/span&(&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&int&/span& &span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&y&/span&=&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&;&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&y&/span&&image_padded-&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&y&/span&++)
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&for&/span&(&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&int&/span& &span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&x&/span&=&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&;&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&x&/span&&image_padded-&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&x&/span&++)
pixel = cvGetReal2D(image_padded,&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&x&/span&,&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&y&/span&);
pixel = ((&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&x&/span&+&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&y&/span&)&span class=&hljs-variable& style=&color: rgb(102, 0, 102); box-sizing: border-&&%2&/span& == &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&0&/span&)?(pixel):((-&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&1&/span&)&span class=&hljs-variable& style=&color: rgb(102, 0, 102); box-sizing: border-&&*pixel&/span&);
cvSetReal2D(image_Re,&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&x&/span&,&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&y&/span&,pixel);
}&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&/ul&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 background-color: rgb(238, 238, 238); top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align:&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&/ul&
其实也就相当于,x+y是偶数的话f(x,y)不变,x+y是奇数的话f(x,y)变为负。用这样一个简单的判断去实现。其运行的结果,如下所示。
原图的傅里叶频谱&
使用11×11高斯滤波器后的傅里叶频谱&
从实验结果看来,可以看出以下两点
对于原图而言两个函数的结果基本一致,两个函数都得到了正确的结果。使用平滑处理后,频谱的高频成分明显变小,对于空间域的图像而言,图像变得模糊了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:120363次
积分:2472
积分:2472
排名:第12218名
原创:128篇
转载:23篇
评论:13条
(5)(7)(14)(19)(6)(10)(5)(6)(15)(3)(5)(2)(2)(3)(6)(5)(2)(1)(4)(9)(1)(2)(3)(2)(7)(8)}

我要回帖

更多关于 图像频谱分析 怎么看 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信