[已解决] 如何替代imread提高读取图片效率

[复制链接]
牧羊人的挽歌 发表于 2021-9-27 15:58:31
matlab新人,工作上要求编写程序批量处理图像,程序已经完善但是发现运行效率不高,使用火焰图发现%95的时间都用在了imread函数上,因为我这边的数据源非常庞大,16000+的图片每张图片像素差不多在3000*3000,所以想问问坛内大佬有没有效率更高的读取tiff图像的方法,顺带一提,我个人尝试过Tiff函数生成标签用再read读取的方式,但是效率变的更慢了,不知道大佬们还有没有其他读取图片的方法呢。
PS 程序没有问题,也测试过另写程序只批量读取图像不做其他处理,用的时间也差不多,因为是图像处理,所以需要结合其它数据源来综合处理图像,其他数据源的格式决定了暂时只能使用matlab处理,因此也不能换一种编程语言,只能使用matlab处理。

最佳答案


myisland 发表于 2021-9-28 09:18:17
I/O慢很正常,所有语言都有这个问题,所以一般追求效率的程序都会尽量避免I/O。 经常听到的“MATLAB很慢”之类的论调,其实指的是MATLAB中的循环,其它比如矩阵分解、最优化问题求解等等数值计算,其它非专业化语言只能望其项背(这里不包括Julia和Fortran等专业化语言)。
除了Excel文件之外,MATLAB中文件读写已经很快(Excel慢是因为走了一遍COM接口,转了一遍数据)。建议从其它角度出发,比如并行处理,开N个线程“同时”读N个文件……

7 条回复


lyqmath 发表于 2021-9-27 16:34:06
文件缩放对功能程序有影响吗

如果缩放可以接受,可以考虑用工具先批处理将图像统一缩放

myisland 发表于 2021-9-28 09:18:17
I/O慢很正常,所有语言都有这个问题,所以一般追求效率的程序都会尽量避免I/O。 经常听到的“MATLAB很慢”之类的论调,其实指的是MATLAB中的循环,其它比如矩阵分解、最优化问题求解等等数值计算,其它非专业化语言只能望其项背(这里不包括Julia和Fortran等专业化语言)。
除了Excel文件之外,MATLAB中文件读写已经很快(Excel慢是因为走了一遍COM接口,转了一遍数据)。建议从其它角度出发,比如并行处理,开N个线程“同时”读N个文件……
回复此楼

牧羊人的挽歌 发表于 2021-9-28 09:27:20
myisland 发表于 2021-9-28 09:18
I/O慢很正常,所有语言都有这个问题,所以一般追求效率的程序都会尽量避免I/O。 经常听到的“MATLAB很慢” ...

感谢回复,这边已经是使用并行处理读取图片了,就是希望能从函数上再进一步做些优化。
实在不行就只能从硬件层面进行优化了_(:з」∠)_

myisland 发表于 2021-9-28 09:32:12
牧羊人的挽歌 发表于 2021-9-28 09:27
感谢回复,这边已经是使用并行处理读取图片了,就是希望能从函数上再进一步做些优化。
实在不行就只能从 ...

还可以结合你的用途,读进来之后干啥,那么多图同时加载到内存,干啥都慢~

牧羊人的挽歌 发表于 2021-9-28 09:36:56
这边也提出几个解决方案吧,其中最简单的方法就是提升硬件,固态硬盘的读取速度肯定会更快,如果是在公司里或者研究室里建议申请使用公司专门用作处理数据的大型计算机,会优化读取速度。
其次还有个方法,但我并没有实验,根据前辈们说可以考虑将多张图片拼成一张图片,虽然我感觉因为多了合并图片的步骤,效率应该会下降,但是据前辈们说速度其实会有小的提升,因为处理图片时相当于一次性处理十几张甚至几十张,而matlab对于矩阵运算效率又很高,因此能节省下处理每张图片的时间。
再就是想三楼大佬说的一样,可以通过并行处理来提高读取,不过这个并行处理的效率根据你硬件设施的不同也会有很大的不同,理论上4核处理的时间是8核的一倍(但我实际测试下来没有这么夸张,可能是我使用的方式不对,但也有很大的提升),详情可以搜索parfor的matlab的使用文档或者博客等。

myisland 发表于 2021-9-29 09:10:21
牧羊人的挽歌 发表于 2021-9-28 09:36
这边也提出几个解决方案吧,其中最简单的方法就是提升硬件,固态硬盘的读取速度肯定会更快,如果是在公司里 ...

其实可以从源头出发,图片从哪里来的?是不是可以从源头就合并……
多线程的时间并不严格成比例,要看主机的负载情况。
另外,做产品的话不能用MATLAB的思维来考虑,有的问题是MATLAB的问题,但这些问题换到别的工程化语言之上根本就不是问题。
工具决定思维,尽量用MATLAB做原型开发,做产品的时候要根据选择的工具和平台重新规划:lol

newcxy 发表于 2021-10-9 17:25:21
主要io 问题一般都只能从硬件着手想办法。换SSD硬盘加大内存才是最简单的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表