Mercurial > hg > orthanc-stone
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 |