Mercurial > hg > orthanc-stone
comparison UnitTestsSources/VolumeRenderingTests.cpp @ 1775:fca942f4b4a7
fix conversion from voxel centers to texture borders
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 12 May 2021 19:57:50 +0200 |
parents | 95ece40bb298 |
children | de5c965f0697 |
comparison
equal
deleted
inserted
replaced
1774:95ece40bb298 | 1775:fca942f4b4a7 |
---|---|
19 **/ | 19 **/ |
20 | 20 |
21 | 21 |
22 #include "../OrthancStone/Sources/Scene2D/CairoCompositor.h" | 22 #include "../OrthancStone/Sources/Scene2D/CairoCompositor.h" |
23 #include "../OrthancStone/Sources/Scene2D/CopyStyleConfigurator.h" | 23 #include "../OrthancStone/Sources/Scene2D/CopyStyleConfigurator.h" |
24 #include "../OrthancStone/Sources/Scene2D/ColorTextureSceneLayer.h" | |
24 #include "../OrthancStone/Sources/Volumes/DicomVolumeImageMPRSlicer.h" | 25 #include "../OrthancStone/Sources/Volumes/DicomVolumeImageMPRSlicer.h" |
25 #include "../OrthancStone/Sources/Volumes/DicomVolumeImageReslicer.h" | 26 #include "../OrthancStone/Sources/Volumes/DicomVolumeImageReslicer.h" |
26 | 27 |
27 #include <Images/ImageProcessing.h> | 28 #include <Images/ImageProcessing.h> |
28 #include <Images/ImageTraits.h> | 29 #include <Images/ImageTraits.h> |
29 | 30 |
30 #include <gtest/gtest.h> | 31 #include <gtest/gtest.h> |
31 | 32 |
32 TEST(VolumeRendering, Basic) | 33 TEST(VolumeRendering, Axial) |
33 { | 34 { |
34 Orthanc::DicomMap dicom; | 35 Orthanc::DicomMap dicom; |
35 dicom.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, "study", false); | 36 dicom.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, "study", false); |
36 dicom.SetValue(Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, "series", false); | 37 dicom.SetValue(Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, "series", false); |
37 dicom.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop", false); | 38 dicom.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop", false); |
41 OrthancStone::LinearAlgebra::CreateVector(0, 1, 0)); | 42 OrthancStone::LinearAlgebra::CreateVector(0, 1, 0)); |
42 | 43 |
43 OrthancStone::VolumeImageGeometry geometry; | 44 OrthancStone::VolumeImageGeometry geometry; |
44 geometry.SetSizeInVoxels(3, 3, 1); | 45 geometry.SetSizeInVoxels(3, 3, 1); |
45 geometry.SetAxialGeometry(axial); | 46 geometry.SetAxialGeometry(axial); |
46 | 47 |
47 boost::shared_ptr<OrthancStone::DicomVolumeImage> volume(new OrthancStone::DicomVolumeImage); | 48 boost::shared_ptr<OrthancStone::DicomVolumeImage> volume(new OrthancStone::DicomVolumeImage); |
48 volume->Initialize(geometry, Orthanc::PixelFormat_Grayscale8, false); | 49 volume->Initialize(geometry, Orthanc::PixelFormat_Grayscale8, false); |
49 volume->SetDicomParameters(OrthancStone::DicomInstanceParameters(dicom)); | 50 volume->SetDicomParameters(OrthancStone::DicomInstanceParameters(dicom)); |
50 | 51 |
51 { | 52 { |
60 v += 25; | 61 v += 25; |
61 } | 62 } |
62 } | 63 } |
63 } | 64 } |
64 | 65 |
66 OrthancStone::Vector v = volume->GetGeometry().GetVoxelDimensions(OrthancStone::VolumeProjection_Axial); | |
67 ASSERT_FLOAT_EQ(1, v[0]); | |
68 ASSERT_FLOAT_EQ(1, v[1]); | |
69 ASSERT_FLOAT_EQ(1, v[2]); | |
70 | |
65 OrthancStone::CoordinateSystem3D viewpoint; | 71 OrthancStone::CoordinateSystem3D viewpoint; |
66 | 72 |
67 for (unsigned int mode = 0; mode < 2; mode++) | 73 for (unsigned int mode = 0; mode < 2; mode++) |
68 { | 74 { |
69 std::unique_ptr<OrthancStone::IVolumeSlicer> slicer; | 75 std::unique_ptr<OrthancStone::IVolumeSlicer> slicer; |
81 ASSERT_TRUE(slice->IsValid()); | 87 ASSERT_TRUE(slice->IsValid()); |
82 | 88 |
83 OrthancStone::CopyStyleConfigurator configurator; | 89 OrthancStone::CopyStyleConfigurator configurator; |
84 std::unique_ptr<OrthancStone::ISceneLayer> layer(slice->CreateSceneLayer(&configurator, viewpoint)); | 90 std::unique_ptr<OrthancStone::ISceneLayer> layer(slice->CreateSceneLayer(&configurator, viewpoint)); |
85 | 91 |
92 ASSERT_EQ(OrthancStone::ISceneLayer::Type_FloatTexture, layer->GetType()); | |
93 | |
94 OrthancStone::Extent2D box; | |
95 layer->GetBoundingBox(box); | |
96 ASSERT_FLOAT_EQ(-1.0f, box.GetX1()); | |
97 ASSERT_FLOAT_EQ(-1.0f, box.GetY1()); | |
98 ASSERT_FLOAT_EQ(2.0f, box.GetX2()); | |
99 ASSERT_FLOAT_EQ(2.0f, box.GetY2()); | |
100 | |
86 { | 101 { |
87 const Orthanc::ImageAccessor& a = dynamic_cast<OrthancStone::TextureBaseSceneLayer&>(*layer).GetTexture(); | 102 const Orthanc::ImageAccessor& a = dynamic_cast<OrthancStone::TextureBaseSceneLayer&>(*layer).GetTexture(); |
88 Orthanc::Image i(Orthanc::PixelFormat_Grayscale8, a.GetWidth(), a.GetHeight(), false); | 103 Orthanc::Image i(Orthanc::PixelFormat_Grayscale8, a.GetWidth(), a.GetHeight(), false); |
89 Orthanc::ImageProcessing::Convert(i, a); | 104 Orthanc::ImageProcessing::Convert(i, a); |
90 | 105 |
142 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 4); ASSERT_EQ(150, pixel.red_); | 157 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 4); ASSERT_EQ(150, pixel.red_); |
143 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 4); ASSERT_EQ(175, pixel.red_); | 158 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 4); ASSERT_EQ(175, pixel.red_); |
144 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 4); ASSERT_EQ(200, pixel.red_); | 159 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 4); ASSERT_EQ(200, pixel.red_); |
145 } | 160 } |
146 } | 161 } |
147 |