Mercurial > hg > orthanc-stone
comparison UnitTestsSources/VolumeRenderingTests.cpp @ 1778:de5c965f0697
simplifying test VolumeRendering.Axial
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 14 May 2021 09:33:42 +0200 |
parents | fca942f4b4a7 |
children | 9ab251c03eda |
comparison
equal
deleted
inserted
replaced
1777:d9c5474c5588 | 1778:de5c965f0697 |
---|---|
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/Scene2D/ColorTextureSceneLayer.h" |
25 #include "../OrthancStone/Sources/Volumes/DicomVolumeImageMPRSlicer.h" | 25 #include "../OrthancStone/Sources/Volumes/DicomVolumeImageMPRSlicer.h" |
26 #include "../OrthancStone/Sources/Volumes/DicomVolumeImageReslicer.h" | 26 #include "../OrthancStone/Sources/Volumes/DicomVolumeImageReslicer.h" |
27 | 27 |
28 #include <Images/ImageProcessing.h> | |
29 #include <Images/ImageTraits.h> | 28 #include <Images/ImageTraits.h> |
29 #include <OrthancException.h> | |
30 | 30 |
31 #include <gtest/gtest.h> | 31 #include <gtest/gtest.h> |
32 | |
33 | |
34 static float GetPixelValue(const Orthanc::ImageAccessor& image, | |
35 unsigned int x, | |
36 unsigned int y) | |
37 { | |
38 switch (image.GetFormat()) | |
39 { | |
40 case Orthanc::PixelFormat_Grayscale8: | |
41 return Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(image, x, y); | |
42 | |
43 case Orthanc::PixelFormat_Float32: | |
44 return Orthanc::ImageTraits<Orthanc::PixelFormat_Float32>::GetFloatPixel(image, x, y); | |
45 | |
46 case Orthanc::PixelFormat_RGB24: | |
47 { | |
48 Orthanc::PixelTraits<Orthanc::PixelFormat_RGB24>::PixelType pixel; | |
49 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, image, x, y); | |
50 return pixel.red_; | |
51 } | |
52 | |
53 case Orthanc::PixelFormat_BGRA32: | |
54 { | |
55 Orthanc::PixelTraits<Orthanc::PixelFormat_BGRA32>::PixelType pixel; | |
56 Orthanc::ImageTraits<Orthanc::PixelFormat_BGRA32>::GetPixel(pixel, image, x, y); | |
57 return pixel.red_; | |
58 } | |
59 | |
60 default: | |
61 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
62 } | |
63 } | |
64 | |
65 | |
66 static bool IsConstImage(float value, | |
67 const Orthanc::ImageAccessor& image) | |
68 { | |
69 for (unsigned int y = 0; y < image.GetHeight(); y++) | |
70 { | |
71 for (unsigned int x = 0; x < image.GetWidth(); x++) | |
72 { | |
73 if (!OrthancStone::LinearAlgebra::IsNear(value, GetPixelValue(image, x, y))) | |
74 { | |
75 return false; | |
76 } | |
77 } | |
78 } | |
79 | |
80 return true; | |
81 } | |
82 | |
83 | |
84 static bool IsConstRegion(float value, | |
85 const Orthanc::ImageAccessor& image, | |
86 unsigned int x, | |
87 unsigned int y, | |
88 unsigned int width, | |
89 unsigned int height) | |
90 { | |
91 Orthanc::ImageAccessor region; | |
92 image.GetRegion(region, x, y, width, height); | |
93 return IsConstImage(value, region); | |
94 } | |
95 | |
32 | 96 |
33 TEST(VolumeRendering, Axial) | 97 TEST(VolumeRendering, Axial) |
34 { | 98 { |
35 Orthanc::DicomMap dicom; | 99 Orthanc::DicomMap dicom; |
36 dicom.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, "study", false); | 100 dicom.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, "study", false); |
97 ASSERT_FLOAT_EQ(-1.0f, box.GetY1()); | 161 ASSERT_FLOAT_EQ(-1.0f, box.GetY1()); |
98 ASSERT_FLOAT_EQ(2.0f, box.GetX2()); | 162 ASSERT_FLOAT_EQ(2.0f, box.GetX2()); |
99 ASSERT_FLOAT_EQ(2.0f, box.GetY2()); | 163 ASSERT_FLOAT_EQ(2.0f, box.GetY2()); |
100 | 164 |
101 { | 165 { |
102 const Orthanc::ImageAccessor& a = dynamic_cast<OrthancStone::TextureBaseSceneLayer&>(*layer).GetTexture(); | 166 const Orthanc::ImageAccessor& texture = dynamic_cast<OrthancStone::TextureBaseSceneLayer&>(*layer).GetTexture(); |
103 Orthanc::Image i(Orthanc::PixelFormat_Grayscale8, a.GetWidth(), a.GetHeight(), false); | 167 ASSERT_EQ(3u, texture.GetWidth()); |
104 Orthanc::ImageProcessing::Convert(i, a); | 168 ASSERT_EQ(3u, texture.GetHeight()); |
105 | 169 ASSERT_FLOAT_EQ(0, GetPixelValue(texture, 0, 0)); |
106 ASSERT_EQ(3u, i.GetWidth()); | 170 ASSERT_FLOAT_EQ(25, GetPixelValue(texture, 1, 0)); |
107 ASSERT_EQ(3u, i.GetHeight()); | 171 ASSERT_FLOAT_EQ(50, GetPixelValue(texture, 2, 0)); |
108 | 172 ASSERT_FLOAT_EQ(75, GetPixelValue(texture, 0, 1)); |
109 ASSERT_FLOAT_EQ(0, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 0, 0)); | 173 ASSERT_FLOAT_EQ(100, GetPixelValue(texture, 1, 1)); |
110 ASSERT_FLOAT_EQ(25, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 1, 0)); | 174 ASSERT_FLOAT_EQ(125, GetPixelValue(texture, 2, 1)); |
111 ASSERT_FLOAT_EQ(50, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 2, 0)); | 175 ASSERT_FLOAT_EQ(150, GetPixelValue(texture, 0, 2)); |
112 ASSERT_FLOAT_EQ(75, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 0, 1)); | 176 ASSERT_FLOAT_EQ(175, GetPixelValue(texture, 1, 2)); |
113 ASSERT_FLOAT_EQ(100, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 1, 1)); | 177 ASSERT_FLOAT_EQ(200, GetPixelValue(texture, 2, 2)); |
114 ASSERT_FLOAT_EQ(125, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 2, 1)); | |
115 ASSERT_FLOAT_EQ(150, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 0, 2)); | |
116 ASSERT_FLOAT_EQ(175, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 1, 2)); | |
117 ASSERT_FLOAT_EQ(200, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 2, 2)); | |
118 } | 178 } |
119 | 179 |
120 OrthancStone::Scene2D scene; // Scene is initialized with the identity viewpoint | 180 OrthancStone::Scene2D scene; // Scene is initialized with the identity viewpoint |
121 scene.SetLayer(0, layer.release()); | 181 scene.SetLayer(0, layer.release()); |
122 | 182 |
123 OrthancStone::CairoCompositor compositor(5, 5); | 183 OrthancStone::CairoCompositor compositor(5, 5); |
124 compositor.Refresh(scene); | 184 compositor.Refresh(scene); |
125 | 185 |
126 Orthanc::ImageAccessor i; | 186 Orthanc::ImageAccessor rendered; |
127 compositor.GetCanvas().GetReadOnlyAccessor(i); | 187 compositor.GetCanvas().GetReadOnlyAccessor(rendered); |
128 | 188 |
129 Orthanc::Image j(Orthanc::PixelFormat_RGB24, i.GetWidth(), i.GetHeight(), false); | 189 ASSERT_EQ(5u, rendered.GetWidth()); |
130 Orthanc::ImageProcessing::Convert(j, i); | 190 ASSERT_EQ(5u, rendered.GetHeight()); |
131 | 191 ASSERT_EQ(0, GetPixelValue(rendered, 0, 0)); |
132 ASSERT_EQ(5u, j.GetWidth()); | 192 ASSERT_EQ(0, GetPixelValue(rendered, 1, 0)); |
133 ASSERT_EQ(5u, j.GetHeight()); | 193 ASSERT_EQ(0, GetPixelValue(rendered, 2, 0)); |
134 Orthanc::PixelTraits<Orthanc::PixelFormat_RGB24>::PixelType pixel; | 194 ASSERT_EQ(0, GetPixelValue(rendered, 3, 0)); |
135 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 0); ASSERT_EQ(0, pixel.red_); | 195 ASSERT_EQ(0, GetPixelValue(rendered, 4, 0)); |
136 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 0); ASSERT_EQ(0, pixel.red_); | 196 ASSERT_EQ(0, GetPixelValue(rendered, 0, 1)); |
137 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 0); ASSERT_EQ(0, pixel.red_); | 197 ASSERT_EQ(0, GetPixelValue(rendered, 1, 1)); |
138 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 0); ASSERT_EQ(0, pixel.red_); | 198 ASSERT_EQ(0, GetPixelValue(rendered, 2, 1)); |
139 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 0); ASSERT_EQ(0, pixel.red_); | 199 ASSERT_EQ(0, GetPixelValue(rendered, 3, 1)); |
140 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 1); ASSERT_EQ(0, pixel.red_); | 200 ASSERT_EQ(0, GetPixelValue(rendered, 4, 1)); |
141 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 1); ASSERT_EQ(0, pixel.red_); | 201 ASSERT_EQ(0, GetPixelValue(rendered, 0, 2)); |
142 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 1); ASSERT_EQ(0, pixel.red_); | 202 ASSERT_EQ(0, GetPixelValue(rendered, 1, 2)); |
143 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 1); ASSERT_EQ(0, pixel.red_); | 203 ASSERT_EQ(0, GetPixelValue(rendered, 2, 2)); |
144 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 1); ASSERT_EQ(0, pixel.red_); | 204 ASSERT_EQ(25, GetPixelValue(rendered, 3, 2)); |
145 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 2); ASSERT_EQ(0, pixel.red_); | 205 ASSERT_EQ(50, GetPixelValue(rendered, 4, 2)); |
146 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 2); ASSERT_EQ(0, pixel.red_); | 206 ASSERT_EQ(0, GetPixelValue(rendered, 0, 3)); |
147 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 2); ASSERT_EQ(0, pixel.red_); | 207 ASSERT_EQ(0, GetPixelValue(rendered, 1, 3)); |
148 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 2); ASSERT_EQ(25, pixel.red_); | 208 ASSERT_EQ(75, GetPixelValue(rendered, 2, 3)); |
149 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 2); ASSERT_EQ(50, pixel.red_); | 209 ASSERT_EQ(100, GetPixelValue(rendered, 3, 3)); |
150 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 3); ASSERT_EQ(0, pixel.red_); | 210 ASSERT_EQ(125, GetPixelValue(rendered, 4, 3)); |
151 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 3); ASSERT_EQ(0, pixel.red_); | 211 ASSERT_EQ(0, GetPixelValue(rendered, 0, 4)); |
152 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 3); ASSERT_EQ(75, pixel.red_); | 212 ASSERT_EQ(0, GetPixelValue(rendered, 1, 4)); |
153 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 3); ASSERT_EQ(100, pixel.red_); | 213 ASSERT_EQ(150, GetPixelValue(rendered, 2, 4)); |
154 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 3); ASSERT_EQ(125, pixel.red_); | 214 ASSERT_EQ(175, GetPixelValue(rendered, 3, 4)); |
155 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 4); ASSERT_EQ(0, pixel.red_); | 215 ASSERT_EQ(200, GetPixelValue(rendered, 4, 4)); |
156 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 4); ASSERT_EQ(0, pixel.red_); | 216 } |
157 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 4); ASSERT_EQ(150, pixel.red_); | 217 } |
158 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 4); ASSERT_EQ(175, pixel.red_); | |
159 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 4); ASSERT_EQ(200, pixel.red_); | |
160 } | |
161 } |