在批量遥感数据处理过程中,遇到了图像读取速率过慢的问题。
内存占用问题
一开始怀疑是内存占用的问题,因为程序一次性读取多张影像且所涉及遥感影像占内存较大,如果内存没有被及时回收,可能导致内存泄漏。故用相关命令查看了内存占用。
info = memory; fprintf('已占用内存:%.2f GB\n', info.MemUsedMATLAB / 1024^3);结果发现读图前后内存并没有太大的变化,应该不会是这方面的问题。
imread函数剖析与性能优化
接着进行了很多博文的翻阅来排查问题,比如尝试使用memmapfile函数替换imread函数,但是由于每次读取的影像并非同一张,因此没什么加速读取的效果。
后面看到这篇博文,介绍了imread函数使用和性能优化方面的细节,觉得写得很详细,值得推荐。同时也进行了一番尝试,但是由于我程序的存在未查明的问题,因此上述优化方案并不太奏效。
从fopen到imread:MATLAB文件操作内核机制深度剖析与性能优化-CSDN博客
尝试多线程
然后又考虑利用多线程(parfor)加速读图,但是发现几乎没有速度提升,此时大致开始怀疑是IO瓶颈的原因。最后将待处理的影像换到能够高速读写的硬盘上,果然显著提高了数据读取的速度,耗时大致降低到了原来的1/5。折腾许久,竟然是完全没想到的问题原因。