Mercurial > hg > orthanc-stone
annotate 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 |
rev | line source |
---|---|
1771
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 /** |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
2 * Stone of Orthanc |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
5 * Copyright (C) 2017-2021 Osimis S.A., Belgium |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
6 * |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 * This program is free software: you can redistribute it and/or |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Affero General Public License |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
9 * as published by the Free Software Foundation, either version 3 of |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
10 * the License, or (at your option) any later version. |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 * |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, but |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 * WITHOUT ANY WARRANTY; without even the implied warranty of |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
15 * Affero General Public License for more details. |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
16 * |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Affero General Public License |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
19 **/ |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
22 #include "../OrthancStone/Sources/Scene2D/CairoCompositor.h" |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
23 #include "../OrthancStone/Sources/Scene2D/CopyStyleConfigurator.h" |
1775
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
24 #include "../OrthancStone/Sources/Scene2D/ColorTextureSceneLayer.h" |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
25 #include "../OrthancStone/Sources/Volumes/DicomVolumeImageMPRSlicer.h" |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
26 #include "../OrthancStone/Sources/Volumes/DicomVolumeImageReslicer.h" |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
27 |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
28 #include <Images/ImageTraits.h> |
1778
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
29 #include <OrthancException.h> |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
30 |
1771
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 #include <gtest/gtest.h> |
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
32 |
1778
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
33 |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
34 static float GetPixelValue(const Orthanc::ImageAccessor& image, |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
35 unsigned int x, |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
36 unsigned int y) |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
37 { |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
38 switch (image.GetFormat()) |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
39 { |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
40 case Orthanc::PixelFormat_Grayscale8: |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
41 return Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(image, x, y); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
42 |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
43 case Orthanc::PixelFormat_Float32: |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
44 return Orthanc::ImageTraits<Orthanc::PixelFormat_Float32>::GetFloatPixel(image, x, y); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
45 |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
46 case Orthanc::PixelFormat_RGB24: |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
47 { |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
48 Orthanc::PixelTraits<Orthanc::PixelFormat_RGB24>::PixelType pixel; |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
49 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, image, x, y); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
50 return pixel.red_; |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
51 } |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
52 |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
53 case Orthanc::PixelFormat_BGRA32: |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
54 { |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
55 Orthanc::PixelTraits<Orthanc::PixelFormat_BGRA32>::PixelType pixel; |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
56 Orthanc::ImageTraits<Orthanc::PixelFormat_BGRA32>::GetPixel(pixel, image, x, y); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
57 return pixel.red_; |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
58 } |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
59 |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
60 default: |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
61 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
62 } |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
63 } |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
64 |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
65 |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
66 static bool IsConstImage(float value, |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
67 const Orthanc::ImageAccessor& image) |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
68 { |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
69 for (unsigned int y = 0; y < image.GetHeight(); y++) |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
70 { |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
71 for (unsigned int x = 0; x < image.GetWidth(); x++) |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
72 { |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
73 if (!OrthancStone::LinearAlgebra::IsNear(value, GetPixelValue(image, x, y))) |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
74 { |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
75 return false; |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
76 } |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
77 } |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
78 } |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
79 |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
80 return true; |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
81 } |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
82 |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
83 |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
84 static bool IsConstRegion(float value, |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
85 const Orthanc::ImageAccessor& image, |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
86 unsigned int x, |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
87 unsigned int y, |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
88 unsigned int width, |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
89 unsigned int height) |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
90 { |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
91 Orthanc::ImageAccessor region; |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
92 image.GetRegion(region, x, y, width, height); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
93 return IsConstImage(value, region); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
94 } |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
95 |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
96 |
1775
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
97 TEST(VolumeRendering, Axial) |
1771
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
98 { |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
99 Orthanc::DicomMap dicom; |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
100 dicom.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, "study", false); |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
101 dicom.SetValue(Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, "series", false); |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
102 dicom.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop", false); |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
103 |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
104 OrthancStone::CoordinateSystem3D axial(OrthancStone::LinearAlgebra::CreateVector(-0.5, -0.5, 0), |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
105 OrthancStone::LinearAlgebra::CreateVector(1, 0, 0), |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
106 OrthancStone::LinearAlgebra::CreateVector(0, 1, 0)); |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
107 |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
108 OrthancStone::VolumeImageGeometry geometry; |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
109 geometry.SetSizeInVoxels(3, 3, 1); |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
110 geometry.SetAxialGeometry(axial); |
1775
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
111 |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
112 boost::shared_ptr<OrthancStone::DicomVolumeImage> volume(new OrthancStone::DicomVolumeImage); |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
113 volume->Initialize(geometry, Orthanc::PixelFormat_Grayscale8, false); |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
114 volume->SetDicomParameters(OrthancStone::DicomInstanceParameters(dicom)); |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
115 |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
116 { |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
117 OrthancStone::ImageBuffer3D::SliceWriter writer(volume->GetPixelData(), OrthancStone::VolumeProjection_Axial, 0); |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
118 unsigned int v = 0; |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
119 for (unsigned int y = 0; y < writer.GetAccessor().GetHeight(); y++) |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
120 { |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
121 uint8_t *p = reinterpret_cast<uint8_t*>(writer.GetAccessor().GetRow(y)); |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
122 for (unsigned int x = 0; x < writer.GetAccessor().GetWidth(); x++, p++) |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
123 { |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
124 *p = v; |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
125 v += 25; |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
126 } |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
127 } |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
128 } |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
129 |
1775
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
130 OrthancStone::Vector v = volume->GetGeometry().GetVoxelDimensions(OrthancStone::VolumeProjection_Axial); |
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
131 ASSERT_FLOAT_EQ(1, v[0]); |
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
132 ASSERT_FLOAT_EQ(1, v[1]); |
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
133 ASSERT_FLOAT_EQ(1, v[2]); |
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
134 |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
135 OrthancStone::CoordinateSystem3D viewpoint; |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
136 |
1774
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
137 for (unsigned int mode = 0; mode < 2; mode++) |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
138 { |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
139 std::unique_ptr<OrthancStone::IVolumeSlicer> slicer; |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
140 |
1774
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
141 if (mode == 1) |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
142 { |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
143 slicer.reset(new OrthancStone::DicomVolumeImageReslicer(volume)); |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
144 } |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
145 else |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
146 { |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
147 slicer.reset(new OrthancStone::DicomVolumeImageMPRSlicer(volume)); |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
148 } |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
149 |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
150 std::unique_ptr<OrthancStone::IVolumeSlicer::IExtractedSlice> slice(slicer->ExtractSlice(viewpoint)); |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
151 ASSERT_TRUE(slice->IsValid()); |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
152 |
1774
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
153 OrthancStone::CopyStyleConfigurator configurator; |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
154 std::unique_ptr<OrthancStone::ISceneLayer> layer(slice->CreateSceneLayer(&configurator, viewpoint)); |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
155 |
1775
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
156 ASSERT_EQ(OrthancStone::ISceneLayer::Type_FloatTexture, layer->GetType()); |
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
157 |
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
158 OrthancStone::Extent2D box; |
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
159 layer->GetBoundingBox(box); |
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
160 ASSERT_FLOAT_EQ(-1.0f, box.GetX1()); |
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
161 ASSERT_FLOAT_EQ(-1.0f, box.GetY1()); |
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
162 ASSERT_FLOAT_EQ(2.0f, box.GetX2()); |
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
163 ASSERT_FLOAT_EQ(2.0f, box.GetY2()); |
fca942f4b4a7
fix conversion from voxel centers to texture borders
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1774
diff
changeset
|
164 |
1774
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
165 { |
1778
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
166 const Orthanc::ImageAccessor& texture = dynamic_cast<OrthancStone::TextureBaseSceneLayer&>(*layer).GetTexture(); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
167 ASSERT_EQ(3u, texture.GetWidth()); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
168 ASSERT_EQ(3u, texture.GetHeight()); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
169 ASSERT_FLOAT_EQ(0, GetPixelValue(texture, 0, 0)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
170 ASSERT_FLOAT_EQ(25, GetPixelValue(texture, 1, 0)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
171 ASSERT_FLOAT_EQ(50, GetPixelValue(texture, 2, 0)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
172 ASSERT_FLOAT_EQ(75, GetPixelValue(texture, 0, 1)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
173 ASSERT_FLOAT_EQ(100, GetPixelValue(texture, 1, 1)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
174 ASSERT_FLOAT_EQ(125, GetPixelValue(texture, 2, 1)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
175 ASSERT_FLOAT_EQ(150, GetPixelValue(texture, 0, 2)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
176 ASSERT_FLOAT_EQ(175, GetPixelValue(texture, 1, 2)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
177 ASSERT_FLOAT_EQ(200, GetPixelValue(texture, 2, 2)); |
1774
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
178 } |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
179 |
1774
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
180 OrthancStone::Scene2D scene; // Scene is initialized with the identity viewpoint |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
181 scene.SetLayer(0, layer.release()); |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
182 |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
183 OrthancStone::CairoCompositor compositor(5, 5); |
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
184 compositor.Refresh(scene); |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
185 |
1778
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
186 Orthanc::ImageAccessor rendered; |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
187 compositor.GetCanvas().GetReadOnlyAccessor(rendered); |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1771
diff
changeset
|
188 |
1778
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
189 ASSERT_EQ(5u, rendered.GetWidth()); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
190 ASSERT_EQ(5u, rendered.GetHeight()); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
191 ASSERT_EQ(0, GetPixelValue(rendered, 0, 0)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
192 ASSERT_EQ(0, GetPixelValue(rendered, 1, 0)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
193 ASSERT_EQ(0, GetPixelValue(rendered, 2, 0)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
194 ASSERT_EQ(0, GetPixelValue(rendered, 3, 0)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
195 ASSERT_EQ(0, GetPixelValue(rendered, 4, 0)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
196 ASSERT_EQ(0, GetPixelValue(rendered, 0, 1)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
197 ASSERT_EQ(0, GetPixelValue(rendered, 1, 1)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
198 ASSERT_EQ(0, GetPixelValue(rendered, 2, 1)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
199 ASSERT_EQ(0, GetPixelValue(rendered, 3, 1)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
200 ASSERT_EQ(0, GetPixelValue(rendered, 4, 1)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
201 ASSERT_EQ(0, GetPixelValue(rendered, 0, 2)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
202 ASSERT_EQ(0, GetPixelValue(rendered, 1, 2)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
203 ASSERT_EQ(0, GetPixelValue(rendered, 2, 2)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
204 ASSERT_EQ(25, GetPixelValue(rendered, 3, 2)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
205 ASSERT_EQ(50, GetPixelValue(rendered, 4, 2)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
206 ASSERT_EQ(0, GetPixelValue(rendered, 0, 3)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
207 ASSERT_EQ(0, GetPixelValue(rendered, 1, 3)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
208 ASSERT_EQ(75, GetPixelValue(rendered, 2, 3)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
209 ASSERT_EQ(100, GetPixelValue(rendered, 3, 3)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
210 ASSERT_EQ(125, GetPixelValue(rendered, 4, 3)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
211 ASSERT_EQ(0, GetPixelValue(rendered, 0, 4)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
212 ASSERT_EQ(0, GetPixelValue(rendered, 1, 4)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
213 ASSERT_EQ(150, GetPixelValue(rendered, 2, 4)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
214 ASSERT_EQ(175, GetPixelValue(rendered, 3, 4)); |
de5c965f0697
simplifying test VolumeRendering.Axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1775
diff
changeset
|
215 ASSERT_EQ(200, GetPixelValue(rendered, 4, 4)); |
1774
95ece40bb298
DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
216 } |
1771
f302bbddf94d
sync, trying to fix DicomVolumeImageReslicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
217 } |