comparison UnitTestsSources/UnitTestsMain.cpp @ 188:45b03b04a777 wasm

calibration of FiniteProjectiveCamera
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 16 Mar 2018 13:02:17 +0100
parents 83200c4d07ca
children 964118e7e6de
comparison
equal deleted inserted replaced
187:a12ca0f4aaaa 188:45b03b04a777
618 ASSERT_DOUBLE_EQ(29, b(3, 2)); 618 ASSERT_DOUBLE_EQ(29, b(3, 2));
619 ASSERT_DOUBLE_EQ(-32, b(3, 3)); 619 ASSERT_DOUBLE_EQ(-32, b(3, 3));
620 } 620 }
621 621
622 622
623 TEST(FiniteProjectiveCamera, Calibration)
624 {
625 unsigned int volumeWidth = 512;
626 unsigned int volumeHeight = 512;
627 unsigned int volumeDepth = 110;
628
629 OrthancStone::Vector camera = OrthancStone::LinearAlgebra::CreateVector
630 (-1000, -5000, -static_cast<double>(volumeDepth) * 32);
631
632 OrthancStone::Vector principalPoint = OrthancStone::LinearAlgebra::CreateVector
633 (volumeWidth/2, volumeHeight/2, volumeDepth * 2);
634
635 OrthancStone::FiniteProjectiveCamera c(camera, principalPoint, 0, 512, 512, 1, 1);
636
637 double swapv[9] = { 1, 0, 0,
638 0, -1, 512,
639 0, 0, 1 };
640 OrthancStone::Matrix swap;
641 OrthancStone::LinearAlgebra::FillMatrix(swap, 3, 3, swapv);
642
643 OrthancStone::Matrix p = OrthancStone::LinearAlgebra::Product(swap, c.GetMatrix());
644 p /= p(2,3);
645
646 ASSERT_NEAR( 1.04437, p(0,0), 0.00001);
647 ASSERT_NEAR(-0.0703111, p(0,1), 0.00000001);
648 ASSERT_NEAR(-0.179283, p(0,2), 0.000001);
649 ASSERT_NEAR( 61.7431, p(0,3), 0.0001);
650 ASSERT_NEAR( 0.11127, p(1,0), 0.000001);
651 ASSERT_NEAR(-0.595541, p(1,1), 0.000001);
652 ASSERT_NEAR( 0.872211, p(1,2), 0.000001);
653 ASSERT_NEAR( 203.748, p(1,3), 0.001);
654 ASSERT_NEAR( 3.08593e-05, p(2,0), 0.0000000001);
655 ASSERT_NEAR( 0.000129138, p(2,1), 0.000000001);
656 ASSERT_NEAR( 9.18901e-05, p(2,2), 0.0000000001);
657 ASSERT_NEAR( 1, p(2,3), 0.0000001);
658 }
659
660
623 int main(int argc, char **argv) 661 int main(int argc, char **argv)
624 { 662 {
625 Orthanc::Logging::Initialize(); 663 Orthanc::Logging::Initialize();
626 Orthanc::Logging::EnableInfoLevel(true); 664 Orthanc::Logging::EnableInfoLevel(true);
627 665