From 72838e34d281a1a35c9f9a81e630899f7eb2fc33 Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Tue, 5 May 2020 12:56:44 +0300
Subject: [PATCH] Tune Variance weighted hierarchical census

---
 lib/libstereo/middlebury/main.cpp          | 4 ++++
 lib/libstereo/src/algorithms/hcensussgm.cu | 8 +++++---
 lib/libstereo/src/costs/dual.hpp           | 2 +-
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/lib/libstereo/middlebury/main.cpp b/lib/libstereo/middlebury/main.cpp
index 40cd2ec4a..2c05c3c72 100644
--- a/lib/libstereo/middlebury/main.cpp
+++ b/lib/libstereo/middlebury/main.cpp
@@ -90,6 +90,8 @@ static void run_hcensussgm(MiddleburyData &data, cv::Mat &disparity) {
 	stereo.params.subpixel = 1;
 	stereo.params.lr_consistency = true;
 	stereo.params.debug = false;
+	stereo.params.alpha = 0.5f;
+	stereo.params.beta = 1.0f;
 	stereo.compute(data.imL, data.imR, disparity);
 }
 
@@ -104,6 +106,8 @@ static void run_hgcensussgm(MiddleburyData &data, cv::Mat &disparity) {
 	stereo.params.lr_consistency = true;
 	stereo.params.debug = false;
 	stereo.params.pattern = CensusPattern::GENERALISED;
+	stereo.params.alpha = 0.5f;
+	stereo.params.beta = 1.0f;
 	stereo.compute(data.imL, data.imR, disparity);
 }
 
diff --git a/lib/libstereo/src/algorithms/hcensussgm.cu b/lib/libstereo/src/algorithms/hcensussgm.cu
index e8c8b000b..420f22f53 100644
--- a/lib/libstereo/src/algorithms/hcensussgm.cu
+++ b/lib/libstereo/src/algorithms/hcensussgm.cu
@@ -97,16 +97,18 @@ void StereoHierCensusSgm::compute(cv::InputArray l, cv::InputArray r, cv::Output
     variance_mask(impl_->l.toGpuMat(), var_fine, params.var_window);
     cv::cuda::normalize(var_fine, var_fine, params.alpha, params.beta, cv::NORM_MINMAX, -1);
 
-    cv::cuda::GpuMat var_medium = impl_->var_medium.toGpuMat();
+    cv::cuda::GpuMat var_medium; // = impl_->var_medium.toGpuMat();
     variance_mask(medium_l.toGpuMat(), var_medium, params.var_window);
     cv::cuda::normalize(var_medium, var_medium, params.alpha, params.beta, cv::NORM_MINMAX, -1);
+    cv::cuda::resize(var_medium, impl_->var_medium.toGpuMat(), cv::Size(l.cols(), l.rows()));
 
-    cv::cuda::GpuMat var_coarse = impl_->var_coarse.toGpuMat();
+    cv::cuda::GpuMat var_coarse; // = impl_->var_coarse.toGpuMat();
     variance_mask(coarse_l.toGpuMat(), var_coarse, params.var_window);
     cv::cuda::normalize(var_coarse, var_coarse, params.alpha, params.beta, cv::NORM_MINMAX, -1);
+    cv::cuda::resize(var_coarse, impl_->var_coarse.toGpuMat(), cv::Size(l.cols(), l.rows()));
 
     cv::Mat tmp;
-    var_fine.download(tmp);
+    impl_->var_coarse.toGpuMat().download(tmp);
     cv::imshow("Var", tmp);
 
 	// CT
diff --git a/lib/libstereo/src/costs/dual.hpp b/lib/libstereo/src/costs/dual.hpp
index cb4942005..1e0a4774d 100644
--- a/lib/libstereo/src/costs/dual.hpp
+++ b/lib/libstereo/src/costs/dual.hpp
@@ -55,7 +55,7 @@ namespace impl {
 			float pw = 1.0f;
 			#pragma unroll
 			for (int n=0; n<N; ++n) {
-				float w = 1.0f-weights[n](y,x);
+				float w = weights[n](y,x);
 				cost += pw*w*float(costs[n](y,x,d));
 				pw *= 1.0f-w;
 			}
-- 
GitLab