2014-10-12 5 views
0

emguCV 호출 속도를 높이는 것에 대해 질문이 있습니다. 현재 저는 1920x1080 @ 30Hz로 카메라를 찍는 캡처 카드를 가지고 있습니다. 샘플 그래버로 directshow를 사용하여 각 프레임을 캡처하여 양식에 표시합니다. 이제 이미지 스태빌라이저를 작성했지만 가장 빨리 실행할 수있는 것은 약 20Hz입니다.emguCV 메소드 속도 향상

내 안정화 장치에서 가장 먼저하는 일은 1920x1080을 640x480으로 축소하여 피쳐 트랙을 훨씬 빠르게 만듭니다.

은 그럼 내가 사용에 대한 12-15ms 소요 goodFeaturesToTrack

previousFrameGray.GoodFeaturesToTrack(sampleSize, sampleQuality, minimumDistance, blockSize)[0]); 

.

내가 할 다음 일은이

OpticalFlow.PyrLK(previousFrameGray, frame_gray, prev_corner.ToArray(), new Size(15, 15), 5, new MCvTermCriteria(5), out temp, out status, out err); 

를 사용하여 광학 흐름을 계산하고 그 약 15-18ms 걸립니다.

내가 전화 방법을 소모 마지막으로이 약 10-12ms 걸리는 warpAffine 기능

Image<Bgr, byte> warped_frame = frame.WarpAffine(T, interpMethod, Emgu.CV.CvEnum.WARP.CV_WARP_DEFAULT, new Bgr(BackgroundColor)); 

입니다.

계산의 나머지 부분은 이미지 크기 조정과 총 약 7-8ms가 걸리지 않습니다.

따라서 프레임 계산을위한 총 시간은 약 48ms 또는 약 21Hz입니다.

어떻게 든 33ms 미만의 총 시간을 가져야합니다. 이제 내 질문에 대해.

첫 번째 : 내가 GPU를 사용하여 goodFeatures 및 opticalFlow로 전환하면 속도가 증가합니다.

두 번째 : 이러한 계산 속도를 높일 수있는 GPU를 사용하는 것 외에 다른 방법이 있습니까?

+0

CPU 사용량은 얼마나됩니까? 두 개의 첫 번째 호출을 병렬로 수행 할 수 있습니다 (내부적으로 병렬이 아닌 경우). 더 나은 CPU/코어가 더 빨라집니다. –

+0

저는 i7-3960X @ 4Ghz를 사용하며 52 %를 사용합니다. 그것은 또한 내 모든 코어를 사용하는 것 같습니다. – Axis

답변

0

글쎄, 마침내 기능을 GPU에 맞춰서 속도를 높였습니다. 나는 48ms에서 22ms로 내려 갔다.