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 }