comparison UnitTestsSources/ImageProcessingTests.cpp @ 2487:be1dbb1dcdd6

PixelTraits and ImageTraits
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 13 Mar 2018 16:29:20 +0100
parents 878b59270859
children 22524fd06225
comparison
equal deleted inserted replaced
2486:ad8f30fc28d1 2487:be1dbb1dcdd6
33 33
34 #include "PrecompiledHeadersUnitTests.h" 34 #include "PrecompiledHeadersUnitTests.h"
35 #include "gtest/gtest.h" 35 #include "gtest/gtest.h"
36 36
37 #include "../Core/DicomFormat/DicomImageInformation.h" 37 #include "../Core/DicomFormat/DicomImageInformation.h"
38 #include "../Core/Images/ImageBuffer.h" 38 #include "../Core/Images/Image.h"
39 #include "../Core/Images/ImageProcessing.h" 39 #include "../Core/Images/ImageProcessing.h"
40 #include "../Core/Images/ImageTraits.h"
41
42 #include <memory>
40 43
41 using namespace Orthanc; 44 using namespace Orthanc;
42 45
43 46
44 TEST(DicomImageInformation, ExtractPixelFormat1) 47 TEST(DicomImageInformation, ExtractPixelFormat1)
77 DicomImageInformation info(m); 80 DicomImageInformation info(m);
78 PixelFormat format; 81 PixelFormat format;
79 ASSERT_TRUE(info.ExtractPixelFormat(format, false)); 82 ASSERT_TRUE(info.ExtractPixelFormat(format, false));
80 ASSERT_EQ(PixelFormat_SignedGrayscale16, format); 83 ASSERT_EQ(PixelFormat_SignedGrayscale16, format);
81 } 84 }
85
86
87
88 namespace
89 {
90 template <typename T>
91 class TestImageTraits : public ::testing::Test
92 {
93 private:
94 std::auto_ptr<Image> image_;
95
96 protected:
97 virtual void SetUp()
98 {
99 image_.reset(new Image(ImageTraits::PixelTraits::GetPixelFormat(), 7, 9, false));
100 }
101
102 virtual void TearDown()
103 {
104 image_.reset(NULL);
105 }
106
107 public:
108 typedef T ImageTraits;
109
110 ImageAccessor& GetImage()
111 {
112 return *image_;
113 }
114 };
115
116 template <typename T>
117 class TestIntegerImageTraits : public TestImageTraits<T>
118 {
119 };
120 }
121
122
123 typedef ::testing::Types<
124 ImageTraits<PixelFormat_Grayscale8>,
125 ImageTraits<PixelFormat_Grayscale16>,
126 ImageTraits<PixelFormat_SignedGrayscale16>
127 > IntegerFormats;
128 TYPED_TEST_CASE(TestIntegerImageTraits, IntegerFormats);
129
130 typedef ::testing::Types<
131 ImageTraits<PixelFormat_Grayscale8>,
132 ImageTraits<PixelFormat_Grayscale16>,
133 ImageTraits<PixelFormat_SignedGrayscale16>,
134 ImageTraits<PixelFormat_RGB24>,
135 ImageTraits<PixelFormat_BGRA32>
136 > AllFormats;
137 TYPED_TEST_CASE(TestImageTraits, AllFormats);
138
139
140 TYPED_TEST(TestImageTraits, SetZero)
141 {
142 ImageAccessor& image = this->GetImage();
143
144 memset(image.GetBuffer(), 128, image.GetHeight() * image.GetWidth());
145
146 switch (image.GetFormat())
147 {
148 case PixelFormat_Grayscale8:
149 case PixelFormat_Grayscale16:
150 case PixelFormat_SignedGrayscale16:
151 ImageProcessing::Set(image, 0);
152 break;
153
154 case PixelFormat_RGB24:
155 case PixelFormat_BGRA32:
156 ImageProcessing::Set(image, 0, 0, 0, 0);
157 break;
158
159 default:
160 ASSERT_TRUE(0);
161 }
162
163 typename TestFixture::ImageTraits::PixelType zero, value;
164 TestFixture::ImageTraits::PixelTraits::SetZero(zero);
165
166 for (unsigned int y = 0; y < image.GetHeight(); y++)
167 {
168 for (unsigned int x = 0; x < image.GetWidth(); x++)
169 {
170 TestFixture::ImageTraits::GetPixel(value, image, x, y);
171 ASSERT_TRUE(TestFixture::ImageTraits::PixelTraits::IsEqual(zero, value));
172 }
173 }
174 }
175
176
177 TYPED_TEST(TestIntegerImageTraits, SetZeroFloat)
178 {
179 ImageAccessor& image = this->GetImage();
180
181 memset(image.GetBuffer(), 128, image.GetHeight() * image.GetWidth());
182
183 unsigned int c = 0;
184 for (unsigned int y = 0; y < image.GetHeight(); y++)
185 {
186 for (unsigned int x = 0; x < image.GetWidth(); x++, c++)
187 {
188 TestFixture::ImageTraits::SetFloatPixel(image, c, x, y);
189 }
190 }
191
192 c = 0;
193 for (unsigned int y = 0; y < image.GetHeight(); y++)
194 {
195 for (unsigned int x = 0; x < image.GetWidth(); x++, c++)
196 {
197 ASSERT_FLOAT_EQ(c, TestFixture::ImageTraits::GetFloatPixel(image, x, y));
198 }
199 }
200 }