Initial commit: Speckle-Scanner 3D pipeline with setup README

This commit is contained in:
2026-06-10 03:09:05 +05:00
commit 1765934846
375 changed files with 123081 additions and 0 deletions
@@ -0,0 +1,89 @@
#include <gtest/gtest.h>
#include "host_image.h"
#include "device_image.h"
#include "test_utility.h"
#include "internal.h"
#include "constants.h"
#include "reference.h"
TEST(IntegrationTest, RandomU8)
{
using namespace sgm;
using namespace details;
const int w = 311;
const int h = 239;
const int pitch = 320;
const int disp_size = 128;
const int P1 = 10;
const int P2 = 120;
const float uniqueness = 0.95f;
const auto path_type = PathType::SCAN_4PATH;
const int min_disp = -5;
const bool subpixel = true;
const int LR_max_diff = 5;
const auto censusType = CensusType::SYMMETRIC_CENSUS_9x7;
const ImageType stype = SGM_8U;
const ImageType dtype = SGM_16U;
const ImageType ctype = censusType == CensusType::CENSUS_9x7 ? SGM_64U : SGM_32U;
HostImage h_srcL(h, w, stype, pitch), h_srcR(h, w, stype, pitch);
DeviceImage d_srcL(h, w, stype, pitch), d_srcR(h, w, stype, pitch);
HostImage h_censusL(h, w, ctype), h_censusR(h, w, ctype), h_costs;
DeviceImage d_censusL(h, w, ctype), d_censusR(h, w, ctype), d_costs;
HostImage h_tmpL(h, w, dtype), h_tmpR(h, w, dtype), h_dispL(h, w, dtype), h_dispR(h, w, dtype);
DeviceImage d_tmpL(h, w, dtype), d_tmpR(h, w, dtype), d_dispL(h, w, dtype), d_dispR(h, w, dtype);
random_fill(h_srcL);
random_fill(h_srcR);
d_srcL.upload(h_srcL.data);
d_srcR.upload(h_srcR.data);
d_censusL.fill_zero();
d_censusR.fill_zero();
d_dispL.fill_zero();
d_dispR.fill_zero();
// census transform
census_transform(h_srcL, h_censusL, censusType);
census_transform(h_srcR, h_censusR, censusType);
census_transform(d_srcL, d_censusL, censusType);
census_transform(d_srcR, d_censusR, censusType);
EXPECT_TRUE(equals(h_censusL, d_censusL));
EXPECT_TRUE(equals(h_censusR, d_censusR));
// cost aggregation
cost_aggregation(h_censusL, h_censusR, h_costs, disp_size, P1, P2, path_type, min_disp);
cost_aggregation(d_censusL, d_censusR, d_costs, disp_size, P1, P2, path_type, min_disp);
EXPECT_TRUE(equals(h_costs, d_costs));
// winner takes all
winner_takes_all(h_costs, h_tmpL, h_tmpR, disp_size, uniqueness, subpixel, path_type);
winner_takes_all(d_costs, d_tmpL, d_tmpR, disp_size, uniqueness, subpixel, path_type);
EXPECT_TRUE(equals(h_tmpL, d_tmpL));
EXPECT_TRUE(equals(h_tmpR, d_tmpR));
// post filtering
median_filter(h_tmpL, h_dispL);
median_filter(d_tmpL, d_dispL);
EXPECT_TRUE(equals(h_dispL, d_dispL));
median_filter(h_tmpR, h_dispR);
median_filter(d_tmpR, d_dispR);
EXPECT_TRUE(equals(h_dispR, d_dispR));
// consistency check
check_consistency(h_dispL, h_dispR, h_srcL, subpixel, LR_max_diff);
check_consistency(d_dispL, d_dispR, d_srcL, subpixel, LR_max_diff);
EXPECT_TRUE(equals(h_dispL, d_dispL));
// correct disparity range
correct_disparity_range(h_dispL, subpixel, min_disp);
correct_disparity_range(d_dispL, subpixel, min_disp);
EXPECT_TRUE(equals(h_dispL, d_dispL));
}