【发布时间】:2014-12-14 19:38:07
【问题描述】:
我已经实现了一个用于在图像中搜索图案的软件。使用 cvMatchTemplate 的执行时间约为 10 毫秒(因为我在 120x160 像素的搜索窗口中采用 40x40 的模式。图像是 640x480,所以我不考虑整个图像)。
我已经使用 gpu::MatchTemplate 实现了相同的算法,并且我期待执行时间得到改进。计算分数需要 220 毫秒。
发生了什么?
谢谢。
编辑:我测量了图像的加载时间,执行“.upload”功能需要 1 毫秒,因为图像已经解压缩。
算法不一样吗?
编辑:我使用 CUDA 和我自己的内核编写了代码:它使用图像上的 cuda 函数执行 FFT,算法的整个执行时间不到 2 毫秒,图像为 1024x1024,模式为 200x200。 我使用 thread_sync 来测量 exec。时间。
【问题讨论】:
-
即使使用 FFT,对于 1024*1024 和 200*200 模板而言,不到 2ms 的结果令人惊讶。您是否使用了简单的 fft(参见 docs.opencv.org/modules/core/doc/operations_on_arrays.html#dft 的
convolveDft方法)?我假设您必须以相同大小的图像( 1024*1024 )计算 200*200 模板的 fft。或者您是否选择了基于图块的关联以利用较小的模板? -
我使用 cufftExecR2C 对整个图像执行 FFT,所以您的假设是正确的。 FFT执行时间非常非常小,不到1毫秒(当然取决于使用的显卡)。无论如何,我编写了自己的内核来执行相关性(FFT mul,相关系数计算,搜索模式)。我使用 opencv 只是为了拍摄图像。
标签: opencv gpu cpu matchtemplate