热情软件屋

 

处理比较大的图像这样提高速度


编号: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中的类创建一个二维动态数组"

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio