From acbecd13e197da3f29d8a59ad5317830a23c60c5 Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Mon, 25 Mar 2019 11:20:58 +0200
Subject: [PATCH] Fix sgbm to new structure and make rtcensus back to original
 implementation

---
 cv-node/src/algorithms/opencv_sgbm.cpp | 11 +++++----
 cv-node/src/algorithms/rtcensus.cu     | 10 ++++----
 cv-node/src/main.cpp                   | 32 ++++++++++++++++++++++----
 3 files changed, 40 insertions(+), 13 deletions(-)

diff --git a/cv-node/src/algorithms/opencv_sgbm.cpp b/cv-node/src/algorithms/opencv_sgbm.cpp
index 3e003bdb1..fda8ff13e 100644
--- a/cv-node/src/algorithms/opencv_sgbm.cpp
+++ b/cv-node/src/algorithms/opencv_sgbm.cpp
@@ -25,14 +25,17 @@ OpenCVSGBM::OpenCVSGBM(nlohmann::json &config) : Disparity(config) {
 }
 
 void OpenCVSGBM::compute(const cv::Mat &l, const cv::Mat &r, cv::Mat &disp) {
+	Mat lbw, rbw;
 	Mat left_disp;
 	Mat right_disp;
-	left_matcher_-> compute(l, r,left_disp);
-    right_matcher_->compute(r,l, right_disp);
+	cv::cvtColor(l, lbw,  COLOR_BGR2GRAY);
+	cv::cvtColor(r, rbw, COLOR_BGR2GRAY);
+	left_matcher_-> compute(lbw, rbw,left_disp);
+    right_matcher_->compute(rbw,lbw, right_disp);
     wls_filter_->filter(left_disp,l,disp,right_disp);
     
-    //float f = 255.0f / static_cast<float>(max_disp_);
-    //disp *= f;
+    // WHY 12!!!!!!
+    disp.convertTo(disp, CV_32F, 12.0 / max_disp_);
 }
 
 
diff --git a/cv-node/src/algorithms/rtcensus.cu b/cv-node/src/algorithms/rtcensus.cu
index e722dbac7..0fc818088 100644
--- a/cv-node/src/algorithms/rtcensus.cu
+++ b/cv-node/src/algorithms/rtcensus.cu
@@ -331,7 +331,7 @@ void rtcensus_call(const PtrStepSz<uchar4> &l, const PtrStepSz<uchar4> &r, const
 	ftl::cuda::TextureObject<uint2> censusTexRight(r.cols, r.rows);
 	ftl::cuda::TextureObject<float> dispTexLeft(l.cols, l.rows);
 	ftl::cuda::TextureObject<float> dispTexRight(r.cols, r.rows);
-	ftl::cuda::TextureObject<float> dispTex(r.cols, r.rows);
+	ftl::cuda::TextureObject<float> dispTex(disp); //r.cols, r.rows);
 	
 	// Calculate the census for left and right
 	ftl::cuda::sparse_census(texLeft, texRight, censusTexLeft, censusTexRight);
@@ -355,15 +355,15 @@ void rtcensus_call(const PtrStepSz<uchar4> &l, const PtrStepSz<uchar4> &r, const
 
 	
 
-	grid.x = 4;
+	/*grid.x = 4;
 	grid.y = l.rows;
 	threads.x = l.cols;
 	size_t filter_smem = sizeof(uchar4) * l.cols;
 	filter_kernel<<<grid, threads, filter_smem>>>(texLeft.cudaTexture(), dispTex.cudaTexture(), prevDisp.cudaTexture(), prevImage.cudaTexture(), disp, num_disp);
-	cudaSafeCall( cudaGetLastError() );
+	cudaSafeCall( cudaGetLastError() );*/
 
-	prevDisp.free();
-	prevDisp = disp;
+	//prevDisp.free();
+	//prevDisp = disp;
 	prevImage.free();
 	prevImage = texLeft;
 	
diff --git a/cv-node/src/main.cpp b/cv-node/src/main.cpp
index e0dbaa00b..9e3689bdb 100644
--- a/cv-node/src/main.cpp
+++ b/cv-node/src/main.cpp
@@ -86,6 +86,29 @@ static void process_options(const map<string,string> &opts) {
 	}
 }
 
+static string type2str(int type) {
+  string r;
+
+  uchar depth = type & CV_MAT_DEPTH_MASK;
+  uchar chans = 1 + (type >> CV_CN_SHIFT);
+
+  switch ( depth ) {
+    case CV_8U:  r = "8U"; break;
+    case CV_8S:  r = "8S"; break;
+    case CV_16U: r = "16U"; break;
+    case CV_16S: r = "16S"; break;
+    case CV_32S: r = "32S"; break;
+    case CV_32F: r = "32F"; break;
+    case CV_64F: r = "64F"; break;
+    default:     r = "User"; break;
+  }
+
+  r += "C";
+  r += (chans+'0');
+
+  return r;
+}
+
 static void run(const string &file) {
 	// TODO Initiate the network
 	
@@ -136,8 +159,7 @@ static void run(const string &file) {
         // TODO Check other algorithms convert to BW
         disparity->compute(l,r,disparity32F);
 		
-		disparity32F.convertTo(disparity32F, CV_32F);
-		disparity32F += 10.0f; // TODO REMOVE
+		//disparity32F += 10.0f; // TODO REMOVE
 		
 		// Clip the left edge
 		//Rect rect((int)config["disparity"]["maximum"],7,disparity32F.cols-(int)config["disparity"]["maximum"],disparity32F.rows-14);
@@ -180,8 +202,10 @@ static void run(const string &file) {
 		        break;
 		    }
         } else if (config["display"]["disparity"]) {
-        	disparity32F = disparity32F / (float)config["disparity"]["maximum"];
-        	disparity32F.convertTo(disparity32F,CV_8U,255.0f);
+        	//if (disparity32F.type() == CV_32FC1) {
+        		//disparity32F = disparity32F / (float)config["disparity"]["maximum"];
+        		disparity32F.convertTo(disparity32F,CV_8U,255.0f / (float)config["disparity"]["maximum"]);
+        	//}
         	//normalize(disparity32F, disparity32F, 0, 255, NORM_MINMAX, CV_8U);
         	applyColorMap(disparity32F, disparity32F, cv::COLORMAP_JET);
 			cv::imshow("Disparity", disparity32F);
-- 
GitLab