作者:营帐水狂_836 | 来源:互联网 | 2023-05-31 05:05
各位哥哥姐姐,完任务遇到一个问题,卡住了,很急,望各位帮忙!我在实现从matlab转到c,自己手写,发现遇到二维傅里叶变换时,matlab是对任何大小都可以,比如290*290,fft2后还是29
各位哥哥姐姐,完任务遇到一个问题,卡住了,很急,望各位帮忙!
我在实现从matlab转到c,自己手写,发现遇到二维傅里叶变换时,matlab是对任何大小都可以,比如290*290,fft2后还是290*290,但是vc里(网上和书上的代码几乎都是)只是对2^n即二的整数次幂进行变换。怎么办呢?想必vc也不会只能处理二的整数次幂图像吧?
谢谢了!
5 个解决方案
matlab 里源码是这样的,一个256*256的矩阵,扩充成了296*296的,又扩成了328*328的,那么如果296或是328在c里都会按照256作变换,那么补0就是至少要补到512了,几乎扩了一倍,会不会大大降低效率?
还有补0之后变换,再反变换,之后再截成自己想要的原来的大小,数据会不会乱?
还有更好的方法吗?
谢谢楼上!
谢谢大家!
空域图像不够2的幂的位置补0,傅立叶变换后频域宽度为补零扩展后的宽度,如果需要频域取模只取与空域图像宽高相同的部分即可,反变换以后原来补0的位置会再次变回与0很接近的小数
至于效率是肯定会大大降低的,这个我一直很头痛,优化很多次以后处理512*512以上的图像还是呈假死机状,最让人受不了的是处理513*513的图像 他会当作1024*1024的图像去做,平白无故多了千八百万次的运算量。。。