Mercurial > hg > orthanc
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 } |