comparison UnitTestsSources/VolumeRenderingTests.cpp @ 1774:95ece40bb298

DicomVolumeImageReslicer and DicomVolumeImageMPRSlicer behave identically on axial
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 12 May 2021 17:43:51 +0200
parents 6c246f862b00
children fca942f4b4a7
comparison
equal deleted inserted replaced
1773:34eb41352dff 1774:95ece40bb298
62 } 62 }
63 } 63 }
64 64
65 OrthancStone::CoordinateSystem3D viewpoint; 65 OrthancStone::CoordinateSystem3D viewpoint;
66 66
67 //OrthancStone::DicomVolumeImageReslicer slicer(volume); slicer.SetInterpolation(OrthancStone::ImageInterpolation_Nearest); 67 for (unsigned int mode = 0; mode < 2; mode++)
68 OrthancStone::DicomVolumeImageMPRSlicer slicer(volume); 68 {
69 std::unique_ptr<OrthancStone::IVolumeSlicer::IExtractedSlice> slice(slicer.ExtractSlice(viewpoint)); 69 std::unique_ptr<OrthancStone::IVolumeSlicer> slicer;
70 ASSERT_TRUE(slice->IsValid());
71 70
72 OrthancStone::CopyStyleConfigurator configurator; 71 if (mode == 1)
73 std::unique_ptr<OrthancStone::ISceneLayer> layer(slice->CreateSceneLayer(&configurator, viewpoint)); 72 {
73 slicer.reset(new OrthancStone::DicomVolumeImageReslicer(volume));
74 }
75 else
76 {
77 slicer.reset(new OrthancStone::DicomVolumeImageMPRSlicer(volume));
78 }
79
80 std::unique_ptr<OrthancStone::IVolumeSlicer::IExtractedSlice> slice(slicer->ExtractSlice(viewpoint));
81 ASSERT_TRUE(slice->IsValid());
74 82
75 { 83 OrthancStone::CopyStyleConfigurator configurator;
76 const Orthanc::ImageAccessor& a = dynamic_cast<OrthancStone::TextureBaseSceneLayer&>(*layer).GetTexture(); 84 std::unique_ptr<OrthancStone::ISceneLayer> layer(slice->CreateSceneLayer(&configurator, viewpoint));
77 Orthanc::Image i(Orthanc::PixelFormat_Grayscale8, a.GetWidth(), a.GetHeight(), false);
78 Orthanc::ImageProcessing::Convert(i, a);
79 85
80 ASSERT_EQ(3u, i.GetWidth()); 86 {
81 ASSERT_EQ(3u, i.GetHeight()); 87 const Orthanc::ImageAccessor& a = dynamic_cast<OrthancStone::TextureBaseSceneLayer&>(*layer).GetTexture();
88 Orthanc::Image i(Orthanc::PixelFormat_Grayscale8, a.GetWidth(), a.GetHeight(), false);
89 Orthanc::ImageProcessing::Convert(i, a);
82 90
83 ASSERT_FLOAT_EQ(0, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 0, 0)); 91 ASSERT_EQ(3u, i.GetWidth());
84 ASSERT_FLOAT_EQ(25, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 1, 0)); 92 ASSERT_EQ(3u, i.GetHeight());
85 ASSERT_FLOAT_EQ(50, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 2, 0)); 93
86 ASSERT_FLOAT_EQ(75, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 0, 1)); 94 ASSERT_FLOAT_EQ(0, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 0, 0));
87 ASSERT_FLOAT_EQ(100, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 1, 1)); 95 ASSERT_FLOAT_EQ(25, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 1, 0));
88 ASSERT_FLOAT_EQ(125, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 2, 1)); 96 ASSERT_FLOAT_EQ(50, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 2, 0));
89 ASSERT_FLOAT_EQ(150, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 0, 2)); 97 ASSERT_FLOAT_EQ(75, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 0, 1));
90 ASSERT_FLOAT_EQ(175, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 1, 2)); 98 ASSERT_FLOAT_EQ(100, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 1, 1));
91 ASSERT_FLOAT_EQ(200, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 2, 2)); 99 ASSERT_FLOAT_EQ(125, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 2, 1));
100 ASSERT_FLOAT_EQ(150, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 0, 2));
101 ASSERT_FLOAT_EQ(175, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 1, 2));
102 ASSERT_FLOAT_EQ(200, Orthanc::ImageTraits<Orthanc::PixelFormat_Grayscale8>::GetFloatPixel(i, 2, 2));
103 }
104
105 OrthancStone::Scene2D scene; // Scene is initialized with the identity viewpoint
106 scene.SetLayer(0, layer.release());
107
108 OrthancStone::CairoCompositor compositor(5, 5);
109 compositor.Refresh(scene);
110
111 Orthanc::ImageAccessor i;
112 compositor.GetCanvas().GetReadOnlyAccessor(i);
113
114 Orthanc::Image j(Orthanc::PixelFormat_RGB24, i.GetWidth(), i.GetHeight(), false);
115 Orthanc::ImageProcessing::Convert(j, i);
116
117 ASSERT_EQ(5u, j.GetWidth());
118 ASSERT_EQ(5u, j.GetHeight());
119 Orthanc::PixelTraits<Orthanc::PixelFormat_RGB24>::PixelType pixel;
120 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 0); ASSERT_EQ(0, pixel.red_);
121 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 0); ASSERT_EQ(0, pixel.red_);
122 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 0); ASSERT_EQ(0, pixel.red_);
123 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 0); ASSERT_EQ(0, pixel.red_);
124 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 0); ASSERT_EQ(0, pixel.red_);
125 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 1); ASSERT_EQ(0, pixel.red_);
126 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 1); ASSERT_EQ(0, pixel.red_);
127 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 1); ASSERT_EQ(0, pixel.red_);
128 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 1); ASSERT_EQ(0, pixel.red_);
129 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 1); ASSERT_EQ(0, pixel.red_);
130 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 2); ASSERT_EQ(0, pixel.red_);
131 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 2); ASSERT_EQ(0, pixel.red_);
132 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 2); ASSERT_EQ(0, pixel.red_);
133 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 2); ASSERT_EQ(25, pixel.red_);
134 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 2); ASSERT_EQ(50, pixel.red_);
135 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 3); ASSERT_EQ(0, pixel.red_);
136 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 3); ASSERT_EQ(0, pixel.red_);
137 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 3); ASSERT_EQ(75, pixel.red_);
138 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 3); ASSERT_EQ(100, pixel.red_);
139 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 3); ASSERT_EQ(125, pixel.red_);
140 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 4); ASSERT_EQ(0, pixel.red_);
141 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 4); ASSERT_EQ(0, pixel.red_);
142 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 4); ASSERT_EQ(150, pixel.red_);
143 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 4); ASSERT_EQ(175, pixel.red_);
144 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 4); ASSERT_EQ(200, pixel.red_);
92 } 145 }
93
94 OrthancStone::Scene2D scene; // Scene is initialized with the identity viewpoint
95 scene.SetLayer(0, layer.release());
96
97 OrthancStone::CairoCompositor compositor(5, 5);
98 compositor.Refresh(scene);
99
100 Orthanc::ImageAccessor i;
101 compositor.GetCanvas().GetReadOnlyAccessor(i);
102
103 Orthanc::Image j(Orthanc::PixelFormat_RGB24, i.GetWidth(), i.GetHeight(), false);
104 Orthanc::ImageProcessing::Convert(j, i);
105
106 ASSERT_EQ(5u, j.GetWidth());
107 ASSERT_EQ(5u, j.GetHeight());
108 Orthanc::PixelTraits<Orthanc::PixelFormat_RGB24>::PixelType pixel;
109 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 0); ASSERT_EQ(0, pixel.red_);
110 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 0); ASSERT_EQ(0, pixel.red_);
111 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 0); ASSERT_EQ(0, pixel.red_);
112 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 0); ASSERT_EQ(0, pixel.red_);
113 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 0); ASSERT_EQ(0, pixel.red_);
114 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 1); ASSERT_EQ(0, pixel.red_);
115 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 1); ASSERT_EQ(0, pixel.red_);
116 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 1); ASSERT_EQ(0, pixel.red_);
117 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 1); ASSERT_EQ(0, pixel.red_);
118 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 1); ASSERT_EQ(0, pixel.red_);
119 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 2); ASSERT_EQ(0, pixel.red_);
120 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 2); ASSERT_EQ(0, pixel.red_);
121 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 2); ASSERT_EQ(0, pixel.red_);
122 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 2); ASSERT_EQ(25, pixel.red_);
123 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 2); ASSERT_EQ(50, pixel.red_);
124 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 3); ASSERT_EQ(0, pixel.red_);
125 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 3); ASSERT_EQ(0, pixel.red_);
126 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 3); ASSERT_EQ(75, pixel.red_);
127 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 3); ASSERT_EQ(100, pixel.red_);
128 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 3); ASSERT_EQ(125, pixel.red_);
129 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 0, 4); ASSERT_EQ(0, pixel.red_);
130 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 1, 4); ASSERT_EQ(0, pixel.red_);
131 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 2, 4); ASSERT_EQ(150, pixel.red_);
132 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 3, 4); ASSERT_EQ(175, pixel.red_);
133 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(pixel, j, 4, 4); ASSERT_EQ(200, pixel.red_);
134 } 146 }
135 147