|
|
|
@ -46,91 +46,10 @@ using namespace std; |
|
|
|
|
using namespace testing; |
|
|
|
|
using namespace perf; |
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
|
|
|
// InterpolateFrames
|
|
|
|
|
|
|
|
|
|
typedef pair<string, string> pair_string; |
|
|
|
|
|
|
|
|
|
DEF_PARAM_TEST_1(ImagePair, pair_string); |
|
|
|
|
|
|
|
|
|
PERF_TEST_P(ImagePair, InterpolateFrames, |
|
|
|
|
Values<pair_string>(make_pair("gpu/opticalflow/frame0.png", "gpu/opticalflow/frame1.png"))) |
|
|
|
|
{ |
|
|
|
|
cv::Mat frame0 = readImage(GetParam().first, cv::IMREAD_GRAYSCALE); |
|
|
|
|
ASSERT_FALSE(frame0.empty()); |
|
|
|
|
|
|
|
|
|
cv::Mat frame1 = readImage(GetParam().second, cv::IMREAD_GRAYSCALE); |
|
|
|
|
ASSERT_FALSE(frame1.empty()); |
|
|
|
|
|
|
|
|
|
frame0.convertTo(frame0, CV_32FC1, 1.0 / 255.0); |
|
|
|
|
frame1.convertTo(frame1, CV_32FC1, 1.0 / 255.0); |
|
|
|
|
|
|
|
|
|
if (PERF_RUN_CUDA()) |
|
|
|
|
{ |
|
|
|
|
const cv::cuda::GpuMat d_frame0(frame0); |
|
|
|
|
const cv::cuda::GpuMat d_frame1(frame1); |
|
|
|
|
cv::cuda::GpuMat d_fu, d_fv; |
|
|
|
|
cv::cuda::GpuMat d_bu, d_bv; |
|
|
|
|
|
|
|
|
|
cv::cuda::BroxOpticalFlow d_flow(0.197f /*alpha*/, 50.0f /*gamma*/, 0.8f /*scale_factor*/, |
|
|
|
|
10 /*inner_iterations*/, 77 /*outer_iterations*/, 10 /*solver_iterations*/); |
|
|
|
|
|
|
|
|
|
d_flow(d_frame0, d_frame1, d_fu, d_fv); |
|
|
|
|
d_flow(d_frame1, d_frame0, d_bu, d_bv); |
|
|
|
|
|
|
|
|
|
cv::cuda::GpuMat newFrame; |
|
|
|
|
cv::cuda::GpuMat d_buf; |
|
|
|
|
|
|
|
|
|
TEST_CYCLE() cv::cuda::interpolateFrames(d_frame0, d_frame1, d_fu, d_fv, d_bu, d_bv, 0.5f, newFrame, d_buf); |
|
|
|
|
|
|
|
|
|
CUDA_SANITY_CHECK(newFrame, 1e-4); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
FAIL_NO_CPU(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
|
|
|
// CreateOpticalFlowNeedleMap
|
|
|
|
|
|
|
|
|
|
PERF_TEST_P(ImagePair, CreateOpticalFlowNeedleMap, |
|
|
|
|
Values<pair_string>(make_pair("gpu/opticalflow/frame0.png", "gpu/opticalflow/frame1.png"))) |
|
|
|
|
{ |
|
|
|
|
cv::Mat frame0 = readImage(GetParam().first, cv::IMREAD_GRAYSCALE); |
|
|
|
|
ASSERT_FALSE(frame0.empty()); |
|
|
|
|
|
|
|
|
|
cv::Mat frame1 = readImage(GetParam().second, cv::IMREAD_GRAYSCALE); |
|
|
|
|
ASSERT_FALSE(frame1.empty()); |
|
|
|
|
|
|
|
|
|
frame0.convertTo(frame0, CV_32FC1, 1.0 / 255.0); |
|
|
|
|
frame1.convertTo(frame1, CV_32FC1, 1.0 / 255.0); |
|
|
|
|
|
|
|
|
|
if (PERF_RUN_CUDA()) |
|
|
|
|
{ |
|
|
|
|
const cv::cuda::GpuMat d_frame0(frame0); |
|
|
|
|
const cv::cuda::GpuMat d_frame1(frame1); |
|
|
|
|
cv::cuda::GpuMat u; |
|
|
|
|
cv::cuda::GpuMat v; |
|
|
|
|
|
|
|
|
|
cv::cuda::BroxOpticalFlow d_flow(0.197f /*alpha*/, 50.0f /*gamma*/, 0.8f /*scale_factor*/, |
|
|
|
|
10 /*inner_iterations*/, 77 /*outer_iterations*/, 10 /*solver_iterations*/); |
|
|
|
|
|
|
|
|
|
d_flow(d_frame0, d_frame1, u, v); |
|
|
|
|
|
|
|
|
|
cv::cuda::GpuMat vertex, colors; |
|
|
|
|
|
|
|
|
|
TEST_CYCLE() cv::cuda::createOpticalFlowNeedleMap(u, v, vertex, colors); |
|
|
|
|
|
|
|
|
|
CUDA_SANITY_CHECK(vertex, 1e-6); |
|
|
|
|
CUDA_SANITY_CHECK(colors); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
FAIL_NO_CPU(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
|
|
|
// BroxOpticalFlow
|
|
|
|
|
|
|
|
|
@ -383,72 +302,3 @@ PERF_TEST_P(ImagePair, OpticalFlowDual_TVL1, |
|
|
|
|
CPU_SANITY_CHECK(flow); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
|
|
|
// OpticalFlowBM
|
|
|
|
|
|
|
|
|
|
PERF_TEST_P(ImagePair, OpticalFlowBM, |
|
|
|
|
Values<pair_string>(make_pair("gpu/opticalflow/frame0.png", "gpu/opticalflow/frame1.png"))) |
|
|
|
|
{ |
|
|
|
|
declare.time(400); |
|
|
|
|
|
|
|
|
|
const cv::Mat frame0 = readImage(GetParam().first, cv::IMREAD_GRAYSCALE); |
|
|
|
|
ASSERT_FALSE(frame0.empty()); |
|
|
|
|
|
|
|
|
|
const cv::Mat frame1 = readImage(GetParam().second, cv::IMREAD_GRAYSCALE); |
|
|
|
|
ASSERT_FALSE(frame1.empty()); |
|
|
|
|
|
|
|
|
|
const cv::Size block_size(16, 16); |
|
|
|
|
const cv::Size shift_size(1, 1); |
|
|
|
|
const cv::Size max_range(16, 16); |
|
|
|
|
|
|
|
|
|
if (PERF_RUN_CUDA()) |
|
|
|
|
{ |
|
|
|
|
const cv::cuda::GpuMat d_frame0(frame0); |
|
|
|
|
const cv::cuda::GpuMat d_frame1(frame1); |
|
|
|
|
cv::cuda::GpuMat u, v, buf; |
|
|
|
|
|
|
|
|
|
TEST_CYCLE() cv::cuda::calcOpticalFlowBM(d_frame0, d_frame1, block_size, shift_size, max_range, false, u, v, buf); |
|
|
|
|
|
|
|
|
|
CUDA_SANITY_CHECK(u); |
|
|
|
|
CUDA_SANITY_CHECK(v); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
FAIL_NO_CPU(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
PERF_TEST_P(ImagePair, DISABLED_FastOpticalFlowBM, |
|
|
|
|
Values<pair_string>(make_pair("gpu/opticalflow/frame0.png", "gpu/opticalflow/frame1.png"))) |
|
|
|
|
{ |
|
|
|
|
declare.time(400); |
|
|
|
|
|
|
|
|
|
const cv::Mat frame0 = readImage(GetParam().first, cv::IMREAD_GRAYSCALE); |
|
|
|
|
ASSERT_FALSE(frame0.empty()); |
|
|
|
|
|
|
|
|
|
const cv::Mat frame1 = readImage(GetParam().second, cv::IMREAD_GRAYSCALE); |
|
|
|
|
ASSERT_FALSE(frame1.empty()); |
|
|
|
|
|
|
|
|
|
const cv::Size block_size(16, 16); |
|
|
|
|
const cv::Size shift_size(1, 1); |
|
|
|
|
const cv::Size max_range(16, 16); |
|
|
|
|
|
|
|
|
|
if (PERF_RUN_CUDA()) |
|
|
|
|
{ |
|
|
|
|
const cv::cuda::GpuMat d_frame0(frame0); |
|
|
|
|
const cv::cuda::GpuMat d_frame1(frame1); |
|
|
|
|
cv::cuda::GpuMat u, v; |
|
|
|
|
|
|
|
|
|
cv::cuda::FastOpticalFlowBM fastBM; |
|
|
|
|
|
|
|
|
|
TEST_CYCLE() fastBM(d_frame0, d_frame1, u, v, max_range.width, block_size.width); |
|
|
|
|
|
|
|
|
|
CUDA_SANITY_CHECK(u, 2); |
|
|
|
|
CUDA_SANITY_CHECK(v, 2); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
FAIL_NO_CPU(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|