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