处理比较大的图像这样提高速度
编号:QA003890
建立日期: 2001年2月19日 最后修改日期:2001年2月19日
所属类别:
sapphire:
操作系统: win
编程工具: vc
问题: 请问,我要做图像处理,可是图像比较大6000*1500,用数组和循环处理是肯定不行的。要做傅立叶变换运算量大。请问如何更好的解决?
水平: 刚入门
回答:
为什么“用数组和循环处理是肯定不行的”?事实上,一般处理这样的数据,如果数据维数比较小,直接声明数组处理。而象你这样的数据比较多的情况,可以分行、分块处理。假如你要对整个图象做二唯FFT,你可以一次读入一行,即6000个点,然后进行傅立叶变换,然后将结果保存在另一个文件中。逐行处理后,在按列读入数据进行处理。当然由于数据比较多,处理的时间比较长,可能需要数小时。要提高速度,一般有以下途径:
1、可以尽量一次处理尽可能多的行(事实上频繁读写硬盘最费时比计算时间长很多)。
2、如果可能采用可以分块处理的算法。特别要避免先读行,在读列(相当于转置)的算法,因为这样的算法往往需要大量读盘。算法的优化很重要,有时速度可以提高几个数量级。
3、如果速度要求高,而无法找到更好的算法,可以采用海量内存或设计专门的硬件。我们以前做过一个SAR图象处理的项目,比你的这个图象还大,如果在128M内存计算机上算,需要几个小时。后来采用1G内存的DSP板,只需要1分钟甚至更短。
相关问题:
QA002548 "如何在VC中声明一个多维数组"
QA002474 "怎样用vc++5.0中的类创建一个二维动态数组"
此问题由李海回答。
| |
|
|
| |
|
|