Mercurial > hg > orthanc-stone
comparison UnitTestsSources/VolumeRenderingTests.cpp @ 1784:42a2880d690f
unit tests for MPR slicing
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 14 May 2021 18:48:55 +0200 |
parents | 75d3e2ab1fe1 |
children | 4fd065ad1fc0 |
comparison
equal
deleted
inserted
replaced
1783:75d3e2ab1fe1 | 1784:42a2880d690f |
---|---|
665 } | 665 } |
666 } | 666 } |
667 | 667 |
668 | 668 |
669 | 669 |
670 TEST(VolumeRendering, FlipAxial) | 670 TEST(VolumeRendering, MPR) |
671 { | 671 { |
672 double x = 2; | 672 double x = 2; |
673 double y = 1; | 673 double y = 1; |
674 OrthancStone::CoordinateSystem3D axial(OrthancStone::LinearAlgebra::CreateVector(x, y, 0), | 674 OrthancStone::CoordinateSystem3D axial(OrthancStone::LinearAlgebra::CreateVector(x, y, 0), |
675 OrthancStone::LinearAlgebra::CreateVector(1, 0, 0), | 675 OrthancStone::LinearAlgebra::CreateVector(1, 0, 0), |
809 | 809 |
810 Orthanc::ImageAccessor p; | 810 Orthanc::ImageAccessor p; |
811 rendered->GetRegion(p, 3, 4, 3, 3); | 811 rendered->GetRegion(p, 3, 4, 3, 3); |
812 ASSERT_TRUE(AreSameImages(p, patternXY)); | 812 ASSERT_TRUE(AreSameImages(p, patternXY)); |
813 } | 813 } |
814 } | 814 |
815 } | 815 // Tests along the sagittal and coronal axis: cf. |
816 // "TEST(VolumeRendering, Pattern)" to understand why Z is flipped | |
817 | |
818 { | |
819 OrthancStone::CoordinateSystem3D cuttingPlane(OrthancStone::LinearAlgebra::CreateVector(0, 0, 0), | |
820 OrthancStone::LinearAlgebra::CreateVector(1, 0, 0), | |
821 OrthancStone::LinearAlgebra::CreateVector(0, 1, 0)); | |
822 | |
823 std::unique_ptr<OrthancStone::TextureBaseSceneLayer> layer( | |
824 Slice3x3x1Pattern(OrthancStone::VolumeProjection_Sagittal, axial, cuttingPlane, static_cast<SlicerType>(mode))); | |
825 | |
826 std::unique_ptr<Orthanc::ImageAccessor> rendered(Render(layer.release(), 1, 3, true)); | |
827 ASSERT_FLOAT_EQ(150, GetPixelValue(*rendered, 0, 0)); | |
828 ASSERT_FLOAT_EQ(175, GetPixelValue(*rendered, 0, 1)); | |
829 ASSERT_FLOAT_EQ(200, GetPixelValue(*rendered, 0, 2)); | |
830 } | |
831 | |
832 { | |
833 OrthancStone::CoordinateSystem3D cuttingPlane(OrthancStone::LinearAlgebra::CreateVector(0, 0, 1), | |
834 OrthancStone::LinearAlgebra::CreateVector(1, 0, 0), | |
835 OrthancStone::LinearAlgebra::CreateVector(0, 1, 0)); | |
836 | |
837 std::unique_ptr<OrthancStone::TextureBaseSceneLayer> layer( | |
838 Slice3x3x1Pattern(OrthancStone::VolumeProjection_Sagittal, axial, cuttingPlane, static_cast<SlicerType>(mode))); | |
839 | |
840 std::unique_ptr<Orthanc::ImageAccessor> rendered(Render(layer.release(), 1, 3, true)); | |
841 ASSERT_FLOAT_EQ(75, GetPixelValue(*rendered, 0, 0)); | |
842 ASSERT_FLOAT_EQ(100, GetPixelValue(*rendered, 0, 1)); | |
843 ASSERT_FLOAT_EQ(125, GetPixelValue(*rendered, 0, 2)); | |
844 } | |
845 | |
846 { | |
847 OrthancStone::CoordinateSystem3D cuttingPlane(OrthancStone::LinearAlgebra::CreateVector(0, 0, 2), | |
848 OrthancStone::LinearAlgebra::CreateVector(1, 0, 0), | |
849 OrthancStone::LinearAlgebra::CreateVector(0, 1, 0)); | |
850 | |
851 std::unique_ptr<OrthancStone::TextureBaseSceneLayer> layer( | |
852 Slice3x3x1Pattern(OrthancStone::VolumeProjection_Sagittal, axial, cuttingPlane, static_cast<SlicerType>(mode))); | |
853 | |
854 std::unique_ptr<Orthanc::ImageAccessor> rendered(Render(layer.release(), 1, 3, true)); | |
855 ASSERT_FLOAT_EQ(0, GetPixelValue(*rendered, 0, 0)); | |
856 ASSERT_FLOAT_EQ(25, GetPixelValue(*rendered, 0, 1)); | |
857 ASSERT_FLOAT_EQ(50, GetPixelValue(*rendered, 0, 2)); | |
858 } | |
859 | |
860 for (double z = -1; z < 4; z += 4) // z in { -1, 3 }, out of volume | |
861 { | |
862 OrthancStone::CoordinateSystem3D cuttingPlane(OrthancStone::LinearAlgebra::CreateVector(0, 0, z), | |
863 OrthancStone::LinearAlgebra::CreateVector(1, 0, 0), | |
864 OrthancStone::LinearAlgebra::CreateVector(0, 1, 0)); | |
865 | |
866 std::unique_ptr<OrthancStone::TextureBaseSceneLayer> layer( | |
867 Slice3x3x1Pattern(OrthancStone::VolumeProjection_Sagittal, axial, cuttingPlane, static_cast<SlicerType>(mode))); | |
868 | |
869 ASSERT_TRUE(layer.get() == NULL || // This is for DicomVolumeImageMPRSlicer | |
870 (layer->GetTexture().GetWidth() == 0 && // This is for DicomVolumeImageReslicer | |
871 layer->GetTexture().GetHeight() == 0)); | |
872 } | |
873 | |
874 { | |
875 OrthancStone::CoordinateSystem3D cuttingPlane(OrthancStone::LinearAlgebra::CreateVector(0, 0, 0), | |
876 OrthancStone::LinearAlgebra::CreateVector(1, 0, 0), | |
877 OrthancStone::LinearAlgebra::CreateVector(0, 1, 0)); | |
878 | |
879 std::unique_ptr<OrthancStone::TextureBaseSceneLayer> layer( | |
880 Slice3x3x1Pattern(OrthancStone::VolumeProjection_Coronal, axial, cuttingPlane, static_cast<SlicerType>(mode))); | |
881 | |
882 std::unique_ptr<Orthanc::ImageAccessor> rendered(Render(layer.release(), 3, 1, true)); | |
883 ASSERT_FLOAT_EQ(150, GetPixelValue(*rendered, 0, 0)); | |
884 ASSERT_FLOAT_EQ(175, GetPixelValue(*rendered, 1, 0)); | |
885 ASSERT_FLOAT_EQ(200, GetPixelValue(*rendered, 2, 0)); | |
886 } | |
887 | |
888 { | |
889 OrthancStone::CoordinateSystem3D cuttingPlane(OrthancStone::LinearAlgebra::CreateVector(0, 0, 1), | |
890 OrthancStone::LinearAlgebra::CreateVector(1, 0, 0), | |
891 OrthancStone::LinearAlgebra::CreateVector(0, 1, 0)); | |
892 | |
893 std::unique_ptr<OrthancStone::TextureBaseSceneLayer> layer( | |
894 Slice3x3x1Pattern(OrthancStone::VolumeProjection_Coronal, axial, cuttingPlane, static_cast<SlicerType>(mode))); | |
895 | |
896 std::unique_ptr<Orthanc::ImageAccessor> rendered(Render(layer.release(), 3, 1, true)); | |
897 ASSERT_FLOAT_EQ(75, GetPixelValue(*rendered, 0, 0)); | |
898 ASSERT_FLOAT_EQ(100, GetPixelValue(*rendered, 1, 0)); | |
899 ASSERT_FLOAT_EQ(125, GetPixelValue(*rendered, 2, 0)); | |
900 } | |
901 | |
902 { | |
903 OrthancStone::CoordinateSystem3D cuttingPlane(OrthancStone::LinearAlgebra::CreateVector(0, 0, 2), | |
904 OrthancStone::LinearAlgebra::CreateVector(1, 0, 0), | |
905 OrthancStone::LinearAlgebra::CreateVector(0, 1, 0)); | |
906 | |
907 std::unique_ptr<OrthancStone::TextureBaseSceneLayer> layer( | |
908 Slice3x3x1Pattern(OrthancStone::VolumeProjection_Coronal, axial, cuttingPlane, static_cast<SlicerType>(mode))); | |
909 | |
910 std::unique_ptr<Orthanc::ImageAccessor> rendered(Render(layer.release(), 3, 1, true)); | |
911 ASSERT_FLOAT_EQ(0, GetPixelValue(*rendered, 0, 0)); | |
912 ASSERT_FLOAT_EQ(25, GetPixelValue(*rendered, 1, 0)); | |
913 ASSERT_FLOAT_EQ(50, GetPixelValue(*rendered, 2, 0)); | |
914 } | |
915 | |
916 for (double z = -1; z < 4; z += 4) // z in { -1, 3 }, out of volume | |
917 { | |
918 OrthancStone::CoordinateSystem3D cuttingPlane(OrthancStone::LinearAlgebra::CreateVector(0, 0, z), | |
919 OrthancStone::LinearAlgebra::CreateVector(1, 0, 0), | |
920 OrthancStone::LinearAlgebra::CreateVector(0, 1, 0)); | |
921 | |
922 std::unique_ptr<OrthancStone::TextureBaseSceneLayer> layer( | |
923 Slice3x3x1Pattern(OrthancStone::VolumeProjection_Coronal, axial, cuttingPlane, static_cast<SlicerType>(mode))); | |
924 | |
925 ASSERT_TRUE(layer.get() == NULL || // This is for DicomVolumeImageMPRSlicer | |
926 (layer->GetTexture().GetWidth() == 0 && // This is for DicomVolumeImageReslicer | |
927 layer->GetTexture().GetHeight() == 0)); | |
928 } | |
929 } | |
930 } |