fixed bug #1821
authorMarina Kolpakova <no@email>
Tue, 24 Apr 2012 10:07:14 +0000 (10:07 +0000)
committerMarina Kolpakova <no@email>
Tue, 24 Apr 2012 10:07:14 +0000 (10:07 +0000)
modules/gpu/src/nvidia/NPP_staging/NPP_staging.cu
modules/gpu/test/test_video.cpp

index a45eb5b..1ac44c5 100644 (file)
@@ -2508,7 +2508,7 @@ __global__ void resizeBicubic(NcvSize32u srcSize,
             wsum += wx;\r
         }\r
     }\r
-    dst[(ix + dstROI.x)+ (iy + dstROI.y) * dstStep] = sum / wsum;\r
+    dst[(ix + dstROI.x)+ (iy + dstROI.y) * dstStep] = (!wsum)? 0 : sum / wsum;\r
 }\r
 \r
 \r
index 7fe0b27..4418c19 100644 (file)
@@ -375,7 +375,7 @@ TEST_P(FarnebackOpticalFlow, Accuracy)
 \r
     EXPECT_MAT_SIMILAR(flowxy[0], d_flowx, 0.1);\r
     EXPECT_MAT_SIMILAR(flowxy[1], d_flowy, 0.1);\r
-}\r
+};\r
 \r
 INSTANTIATE_TEST_CASE_P(GPU_Video, FarnebackOpticalFlow, testing::Combine(\r
     ALL_DEVICES,\r
@@ -384,4 +384,33 @@ INSTANTIATE_TEST_CASE_P(GPU_Video, FarnebackOpticalFlow, testing::Combine(
     testing::Values(FarnebackOptFlowFlags(0), FarnebackOptFlowFlags(cv::OPTFLOW_FARNEBACK_GAUSSIAN)),\r
     testing::Values(UseInitFlow(false), UseInitFlow(true))));\r
 \r
+struct OpticalFlowNan : public BroxOpticalFlow {};\r
+\r
+TEST_P(OpticalFlowNan, Regression)\r
+{\r
+    cv::Mat frame0 = readImageType("opticalflow/frame0.png", CV_32FC1);\r
+    ASSERT_FALSE(frame0.empty());\r
+    cv::Mat r_frame0, r_frame1;\r
+    cv::resize(frame0, r_frame0, cv::Size(1380,1000));\r
+\r
+    cv::Mat frame1 = readImageType("opticalflow/frame1.png", CV_32FC1);\r
+    ASSERT_FALSE(frame1.empty());\r
+    cv::resize(frame1, r_frame1, cv::Size(1380,1000));\r
+\r
+    cv::gpu::BroxOpticalFlow brox(0.197f /*alpha*/, 50.0f /*gamma*/, 0.8f /*scale_factor*/,\r
+                                  5 /*inner_iterations*/, 150 /*outer_iterations*/, 10 /*solver_iterations*/);\r
+\r
+    cv::gpu::GpuMat u;\r
+    cv::gpu::GpuMat v;\r
+    brox(loadMat(r_frame0), loadMat(r_frame1), u, v);\r
+\r
+    cv::Mat h_u, h_v;\r
+    u.download(h_u);\r
+    v.download(h_v);\r
+    EXPECT_TRUE(cv::checkRange(h_u));\r
+    EXPECT_TRUE(cv::checkRange(h_v));\r
+};\r
+\r
+INSTANTIATE_TEST_CASE_P(GPU_Video, OpticalFlowNan, ALL_DEVICES);\r
+\r
 } // namespace\r