热心肠的红烧肉 · Tree-sitter|Using Parsers· 2 月前 · |
坏坏的丝瓜 · 佛系病美人是修真界白月光(苍远道) - ...· 6 月前 · |
坚韧的南瓜 · python多任务—协程(一)_python ...· 11 月前 · |
曾经爱过的电影票 · 无法中止进程无法访问操作拒绝访问_结束运行提 ...· 1 年前 · |
我正在寻求将工作流从MATLAB迁移到Python。我将做大量的大图像过滤,并立即遇到一个性能障碍。在MATLAB R2022a中,用10西格玛高斯滤波器对11587乘13744进行滤波需要少于2秒的时间:
tic, imgf=imgaussfilt(im,10); toc
Elapsed time is 1.792801 seconds.
我在
scipy
1.8.0和
skimage
0.19.1中尝试了同样的方法,两者都要慢得多:
%timeit scipy.ndimage.gaussian_filter(im, 10, truncate=2)
4.89 s ± 15.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
慢2.7倍。
%timeit skimage.filters.gaussian(im, sigma=10, preserve_range=True, truncate=2)
5.99 s ± 14.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
慢3.4倍。
请注意,
truncate
设置为2,据我所知,这与MATLAB所做的工作相匹配。我已经验证了输出图像看起来是一样的,所以没有什么基本的错误。
在Python中是否有专门的加速此操作(和类似的图像处理任务)的解决方案?有些库被认为比其他库更快吗?例如,上面我已经看到
scipy
更快了。
编辑
dip.Gauss(img,10,truncation=2)
在一秒钟内执行。
发布于 2022-05-20 05:37:53
根据数据的维数,MATLAB的
imgaussfilt
选择了空间域处理还是傅立叶域处理。
在某些情况下,它的选择可能会创建优化计算,从而解释您所看到的收益。
如果您想要使用高斯滤波器进行最快的空间滤波,那么您可能应该使用Intel IPP。
发布于 2022-05-11 09:53:07
总之:我为用例找到的最佳解决方案是将16位转换为8位并使用opencv。如果我不想移动到16位的话,DIPlib会更快。一些Python包性能较慢的主要原因似乎是与MATLAB的函数相比,它们不是多线程的。
https://stackoverflow.com/questions/72184717
复制相似问题
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
热心肠的红烧肉 · Tree-sitter|Using Parsers 2 月前 |