2014-10-19 2 views
1

이미지 내부의 패턴을 검색하는 소프트웨어를 구현했습니다. cvMatchTemplate을 사용하면 실행 시간이 약 10ms입니다 (120x160 픽셀의 검색 창에서 40x40의 패턴을 사용하기 때문에 이미지는 640x480이므로 이미지 전체를 고려하지는 않습니다).gpu :: matchTemplate 대 cvMatchTemplate

gpu :: MatchTemplate을 사용하여 동일한 알고리즘을 구현했으며 실행 시간이 향상 될 것으로 기대했습니다. 스코어를 계산하는 데 220ms가 걸렸습니다.

무슨 일입니까?

감사합니다.

편집 : 이미지의 로딩 시간을 측정했으며 이미지가 이미 압축되어 있기 때문에 ".upload"기능을 수행하는 데 1ms가 걸렸습니다.

동일한 알고리즘이 아닙니까?

편집 : CUDA와 내 자신의 커널을 사용하여 코드를 작성했습니다. 이미지의 cuda 함수를 사용하여 FFT를 수행하며 알고리즘의 전체 실행은 1024x1024 이미지와 200x200의 패턴으로 2ms 미만입니다. exec를 측정하기 위해 thread_sync를 사용했습니다. 시각.

+0

FFT를 사용하더라도 1024 * 1024 및 200 * 200 템플릿의 경우 2ms 미만은 놀라운 결과입니다. 간단한 fft를 사용 했습니까 (http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#dft에서'convolveDft' 메쏘드 참조)? 난 당신이 이미지의 동일한 크기 (1024 * 1024)에서 200 * 200 템플릿의 FFT를 계산해야 할 것입니다 가정합니다. 또는 타일 기반 상관 관계를 사용하여 더 작은 크기의 템플릿을 활용 했습니까? – Kiran

+0

전체 이미지에서 FFT를 실행하기 위해 cufftExecR2C를 사용 했으므로 귀하의 가정은 옳았습니다. FFT 실행 시간은 매우 작으며 1ms 미만입니다 (물론 그래픽 카드에 따라 다릅니다). 어쨌든 상관 관계 (FFT mul, correlation coeff 계산, 패턴 검색)를 실행하기 위해 자체 커널을 작성했습니다. 나는 단지 이미지를 찍기 위해 opencv를 사용했다. –

답변

0

GPU 처리 능력에 따라 크게 달라집니다. 일부 GPU는 CPU보다 성능이 좋지 않습니다. 이 질문보기 gpuvscpu

+0

실제로 두 개의 서로 다른 GPU 인 GTX 660m과 GT640에서 동일한 코드를 테스트하고 있습니다. 그리고 나는 같은 실행 시간을 가진다 (다소간) –