Mercurial > hg > orthanc-stone
annotate OrthancStone/Sources/Toolbox/DicomInstanceParameters.cpp @ 2171:8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 22 Oct 2024 15:40:40 +0200 |
parents | fe5406abd43f |
children | 2410a171ebfb |
rev | line source |
---|---|
746 | 1 /** |
2 * Stone of Orthanc | |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | |
4 * Department, University Hospital of Liege, Belgium | |
2124
16c01cc201e7
updated copyright, as Osimis is not active on Orthanc anymore
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2114
diff
changeset
|
5 * Copyright (C) 2017-2023 Osimis S.A., Belgium |
2114
c23eef785569
update year to 2024
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2077
diff
changeset
|
6 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
746 | 7 * |
8 * This program is free software: you can redistribute it and/or | |
1598
8563ea5d8ae4
relicensing some files, cf. osimis bm26 and chu agreement on 2020-05-20
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
9 * modify it under the terms of the GNU Lesser General Public License |
746 | 10 * as published by the Free Software Foundation, either version 3 of |
11 * the License, or (at your option) any later version. | |
12 * | |
13 * This program is distributed in the hope that it will be useful, but | |
14 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
1598
8563ea5d8ae4
relicensing some files, cf. osimis bm26 and chu agreement on 2020-05-20
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
8563ea5d8ae4
relicensing some files, cf. osimis bm26 and chu agreement on 2020-05-20
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
16 * Lesser General Public License for more details. |
1596
4fb8fdf03314
removed annoying whitespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1571
diff
changeset
|
17 * |
1598
8563ea5d8ae4
relicensing some files, cf. osimis bm26 and chu agreement on 2020-05-20
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
18 * You should have received a copy of the GNU Lesser General Public |
8563ea5d8ae4
relicensing some files, cf. osimis bm26 and chu agreement on 2020-05-20
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
19 * License along with this program. If not, see |
8563ea5d8ae4
relicensing some files, cf. osimis bm26 and chu agreement on 2020-05-20
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
20 * <http://www.gnu.org/licenses/>. |
746 | 21 **/ |
22 | |
23 | |
24 #include "DicomInstanceParameters.h" | |
25 | |
26 #include "../Scene2D/ColorTextureSceneLayer.h" | |
27 #include "../Scene2D/FloatTextureSceneLayer.h" | |
1750 | 28 #include "GeometryToolbox.h" |
29 #include "ImageToolbox.h" | |
746 | 30 |
1455
30deba7bc8e2
simplifying include_directories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1353
diff
changeset
|
31 #include <Images/Image.h> |
30deba7bc8e2
simplifying include_directories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1353
diff
changeset
|
32 #include <Images/ImageProcessing.h> |
30deba7bc8e2
simplifying include_directories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1353
diff
changeset
|
33 #include <Logging.h> |
30deba7bc8e2
simplifying include_directories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1353
diff
changeset
|
34 #include <OrthancException.h> |
2171
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
35 #include <SerializationToolbox.h> |
1455
30deba7bc8e2
simplifying include_directories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1353
diff
changeset
|
36 #include <Toolbox.h> |
746 | 37 |
38 | |
39 namespace OrthancStone | |
40 { | |
1636 | 41 static void ExtractFrameOffsets(Vector& target, |
42 const Orthanc::DicomMap& dicom, | |
43 unsigned int numberOfFrames) | |
746 | 44 { |
45 // http://dicom.nema.org/medical/Dicom/2016a/output/chtml/part03/sect_C.8.8.3.2.html | |
46 | |
1634
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
47 std::string increment; |
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
48 |
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
49 if (dicom.LookupStringValue(increment, Orthanc::DICOM_TAG_FRAME_INCREMENT_POINTER, false)) |
746 | 50 { |
1634
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
51 Orthanc::Toolbox::ToUpperCase(increment); |
1635
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
52 |
1746
4bedae500652
Automatically compute SliceThickness from
Benjamin Golinvaux <bgo@osimis.io>
parents:
1739
diff
changeset
|
53 // We only support volumes where the FrameIncrementPointer (0028,0009) (required) contains |
4bedae500652
Automatically compute SliceThickness from
Benjamin Golinvaux <bgo@osimis.io>
parents:
1739
diff
changeset
|
54 // the "Grid Frame Offset Vector" tag (DICOM_TAG_GRID_FRAME_OFFSET_VECTOR) |
1635
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
55 if (increment != "3004,000C") |
746 | 56 { |
1634
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
57 LOG(WARNING) << "Bad value for the FrameIncrementPointer tags in a multiframe image"; |
1636 | 58 target.resize(0); |
1634
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
59 return; |
746 | 60 } |
61 } | |
62 | |
1636 | 63 if (!LinearAlgebra::ParseVector(target, dicom, Orthanc::DICOM_TAG_GRID_FRAME_OFFSET_VECTOR) || |
64 target.size() != numberOfFrames) | |
746 | 65 { |
1746
4bedae500652
Automatically compute SliceThickness from
Benjamin Golinvaux <bgo@osimis.io>
parents:
1739
diff
changeset
|
66 LOG(ERROR) << "The frame offset information (GridFrameOffsetVector (3004,000C)) is missing in a multiframe image"; |
1635
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
67 |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
68 // DO NOT use ".clear()" here, as the "Vector" class doesn't behave like std::vector! |
1636 | 69 target.resize(0); |
746 | 70 } |
71 } | |
72 | |
73 | |
1642
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
74 DicomInstanceParameters::Data::Data(const Orthanc::DicomMap& dicom) |
746 | 75 { |
994
1f74bc3459ba
fix build due to rename in Orthanc::DicomMap
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
980
diff
changeset
|
76 if (!dicom.LookupStringValue(studyInstanceUid_, Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, false) || |
1f74bc3459ba
fix build due to rename in Orthanc::DicomMap
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
980
diff
changeset
|
77 !dicom.LookupStringValue(seriesInstanceUid_, Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, false) || |
1f74bc3459ba
fix build due to rename in Orthanc::DicomMap
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
980
diff
changeset
|
78 !dicom.LookupStringValue(sopInstanceUid_, Orthanc::DICOM_TAG_SOP_INSTANCE_UID, false)) |
746 | 79 { |
80 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); | |
81 } | |
82 | |
83 std::string s; | |
1635
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
84 if (dicom.LookupStringValue(s, Orthanc::DICOM_TAG_SOP_CLASS_UID, false)) |
746 | 85 { |
1635
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
86 sopClassUid_ = StringToSopClassUid(s); |
746 | 87 } |
88 else | |
89 { | |
1635
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
90 sopClassUid_ = SopClassUid_Other; |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
91 } |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
92 |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
93 uint32_t n; |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
94 if (dicom.ParseUnsignedInteger32(n, Orthanc::DICOM_TAG_NUMBER_OF_FRAMES)) |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
95 { |
1846
2789b4b0e0a8
DicomInstanceParameters::HasNumberOfFrames() and DicomInstanceParameters::GetInstanceNumber()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1822
diff
changeset
|
96 hasNumberOfFrames_ = true; |
1635
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
97 numberOfFrames_ = n; |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
98 } |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
99 else |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
100 { |
1846
2789b4b0e0a8
DicomInstanceParameters::HasNumberOfFrames() and DicomInstanceParameters::GetInstanceNumber()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1822
diff
changeset
|
101 hasNumberOfFrames_ = false; |
1635
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
102 numberOfFrames_ = 1; |
746 | 103 } |
104 | |
1635
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
105 if (!dicom.HasTag(Orthanc::DICOM_TAG_COLUMNS) || |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
106 !dicom.GetValue(Orthanc::DICOM_TAG_COLUMNS).ParseFirstUnsignedInteger(width_)) |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
107 { |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
108 width_ = 0; |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
109 } |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
110 |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
111 if (!dicom.HasTag(Orthanc::DICOM_TAG_ROWS) || |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
112 !dicom.GetValue(Orthanc::DICOM_TAG_ROWS).ParseFirstUnsignedInteger(height_)) |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
113 { |
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
114 height_ = 0; |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1750
diff
changeset
|
115 } |
1635
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
116 |
1746
4bedae500652
Automatically compute SliceThickness from
Benjamin Golinvaux <bgo@osimis.io>
parents:
1739
diff
changeset
|
117 |
2076
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
118 if (dicom.ParseDouble(sliceThickness_, Orthanc::DICOM_TAG_SLICE_THICKNESS)) |
746 | 119 { |
2076
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
120 hasSliceThickness_ = true; |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
121 } |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
122 else |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
123 { |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
124 hasSliceThickness_ = false; |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
125 |
1772
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1750
diff
changeset
|
126 if (numberOfFrames_ > 1) |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1750
diff
changeset
|
127 { |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1750
diff
changeset
|
128 LOG(INFO) << "The (non-madatory) slice thickness information is missing in a multiframe image"; |
6c246f862b00
unit test VolumeRendering.Basic
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1750
diff
changeset
|
129 } |
746 | 130 } |
131 | |
1821
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
132 hasPixelSpacing_ = GeometryToolbox::GetPixelSpacing(pixelSpacingX_, pixelSpacingY_, dicom); |
746 | 133 |
134 std::string position, orientation; | |
994
1f74bc3459ba
fix build due to rename in Orthanc::DicomMap
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
980
diff
changeset
|
135 if (dicom.LookupStringValue(position, Orthanc::DICOM_TAG_IMAGE_POSITION_PATIENT, false) && |
1f74bc3459ba
fix build due to rename in Orthanc::DicomMap
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
980
diff
changeset
|
136 dicom.LookupStringValue(orientation, Orthanc::DICOM_TAG_IMAGE_ORIENTATION_PATIENT, false)) |
746 | 137 { |
138 geometry_ = CoordinateSystem3D(position, orientation); | |
139 } | |
140 | |
1635
1a714e21ea7c
start refactoring DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1634
diff
changeset
|
141 // Must be AFTER setting "numberOfFrames_" |
1639 | 142 if (numberOfFrames_ > 1) |
143 { | |
144 ExtractFrameOffsets(frameOffsets_, dicom, numberOfFrames_); | |
145 } | |
1634
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
146 |
746 | 147 if (sopClassUid_ == SopClassUid_RTDose) |
148 { | |
1091
5a18e6a395bc
Added DoseUnit tag retrieval to DicomInstanceParameters
Benjamin Golinvaux <bgo@osimis.io>
parents:
1027
diff
changeset
|
149 static const Orthanc::DicomTag DICOM_TAG_DOSE_UNITS(0x3004, 0x0002); |
5a18e6a395bc
Added DoseUnit tag retrieval to DicomInstanceParameters
Benjamin Golinvaux <bgo@osimis.io>
parents:
1027
diff
changeset
|
150 |
5a18e6a395bc
Added DoseUnit tag retrieval to DicomInstanceParameters
Benjamin Golinvaux <bgo@osimis.io>
parents:
1027
diff
changeset
|
151 if (!dicom.LookupStringValue(doseUnits_, DICOM_TAG_DOSE_UNITS, false)) |
5a18e6a395bc
Added DoseUnit tag retrieval to DicomInstanceParameters
Benjamin Golinvaux <bgo@osimis.io>
parents:
1027
diff
changeset
|
152 { |
1141
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
153 LOG(ERROR) << "Tag DoseUnits (0x3004, 0x0002) is missing in " << sopInstanceUid_; |
1634
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
154 doseUnits_.clear(); |
1091
5a18e6a395bc
Added DoseUnit tag retrieval to DicomInstanceParameters
Benjamin Golinvaux <bgo@osimis.io>
parents:
1027
diff
changeset
|
155 } |
746 | 156 } |
157 | |
158 if (dicom.ParseDouble(rescaleIntercept_, Orthanc::DICOM_TAG_RESCALE_INTERCEPT) && | |
159 dicom.ParseDouble(rescaleSlope_, Orthanc::DICOM_TAG_RESCALE_SLOPE)) | |
160 { | |
1141
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
161 if (sopClassUid_ == SopClassUid_RTDose) |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
162 { |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
163 LOG(INFO) << "DOSE HAS Rescale*: rescaleIntercept_ = " << rescaleIntercept_ << " rescaleSlope_ = " << rescaleSlope_; |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
164 // WE SHOULD NOT TAKE THE RESCALE VALUE INTO ACCOUNT IN THE CASE OF DOSES |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
165 hasRescale_ = false; |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
166 } |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
167 else |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
168 { |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
169 hasRescale_ = true; |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
170 } |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
171 |
746 | 172 } |
173 else | |
174 { | |
175 hasRescale_ = false; | |
176 } | |
177 | |
1141
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
178 if (dicom.ParseDouble(doseGridScaling_, Orthanc::DICOM_TAG_DOSE_GRID_SCALING)) |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
179 { |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
180 if (sopClassUid_ == SopClassUid_RTDose) |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
181 { |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
182 LOG(INFO) << "DOSE HAS DoseGridScaling: doseGridScaling_ = " << doseGridScaling_; |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
183 } |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
184 } |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
185 else |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
186 { |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
187 doseGridScaling_ = 1.0; |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
188 if (sopClassUid_ == SopClassUid_RTDose) |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
189 { |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
190 LOG(ERROR) << "Tag DoseGridScaling (0x3004, 0x000e) is missing in " << sopInstanceUid_ << " doseGridScaling_ will be set to 1.0"; |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
191 } |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
192 } |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
193 |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
194 |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
195 windowingPresets_.clear(); |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
196 |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
197 Vector centers, widths; |
1677
51bab5188a13
start multiple preset windowings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1646
diff
changeset
|
198 |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
199 if (LinearAlgebra::ParseVector(centers, dicom, Orthanc::DICOM_TAG_WINDOW_CENTER) && |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
200 LinearAlgebra::ParseVector(widths, dicom, Orthanc::DICOM_TAG_WINDOW_WIDTH)) |
746 | 201 { |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
202 if (centers.size() == widths.size()) |
1677
51bab5188a13
start multiple preset windowings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1646
diff
changeset
|
203 { |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
204 windowingPresets_.resize(centers.size()); |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
205 |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
206 for (size_t i = 0; i < centers.size(); i++) |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
207 { |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
208 windowingPresets_[i] = Windowing(centers[i], widths[i]); |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
209 } |
1677
51bab5188a13
start multiple preset windowings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1646
diff
changeset
|
210 } |
51bab5188a13
start multiple preset windowings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1646
diff
changeset
|
211 else |
51bab5188a13
start multiple preset windowings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1646
diff
changeset
|
212 { |
51bab5188a13
start multiple preset windowings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1646
diff
changeset
|
213 LOG(ERROR) << "Mismatch in the number of preset windowing widths/centers, ignoring this"; |
51bab5188a13
start multiple preset windowings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1646
diff
changeset
|
214 } |
746 | 215 } |
1677
51bab5188a13
start multiple preset windowings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1646
diff
changeset
|
216 |
980
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
217 // This computes the "IndexInSeries" metadata from Orthanc (check |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
218 // out "Orthanc::ServerIndex::Store()") |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
219 hasIndexInSeries_ = ( |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
220 dicom.ParseUnsignedInteger32(indexInSeries_, Orthanc::DICOM_TAG_INSTANCE_NUMBER) || |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
221 dicom.ParseUnsignedInteger32(indexInSeries_, Orthanc::DICOM_TAG_IMAGE_INDEX)); |
1646
4e14735e98f8
preparing to remove FrameExtent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1642
diff
changeset
|
222 |
4e14735e98f8
preparing to remove FrameExtent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1642
diff
changeset
|
223 if (!dicom.LookupStringValue( |
4e14735e98f8
preparing to remove FrameExtent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1642
diff
changeset
|
224 frameOfReferenceUid_, Orthanc::DICOM_TAG_FRAME_OF_REFERENCE_UID, false)) |
4e14735e98f8
preparing to remove FrameExtent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1642
diff
changeset
|
225 { |
4e14735e98f8
preparing to remove FrameExtent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1642
diff
changeset
|
226 frameOfReferenceUid_.clear(); |
4e14735e98f8
preparing to remove FrameExtent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1642
diff
changeset
|
227 } |
1846
2789b4b0e0a8
DicomInstanceParameters::HasNumberOfFrames() and DicomInstanceParameters::GetInstanceNumber()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1822
diff
changeset
|
228 |
2789b4b0e0a8
DicomInstanceParameters::HasNumberOfFrames() and DicomInstanceParameters::GetInstanceNumber()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1822
diff
changeset
|
229 if (!dicom.HasTag(Orthanc::DICOM_TAG_INSTANCE_NUMBER) || |
2789b4b0e0a8
DicomInstanceParameters::HasNumberOfFrames() and DicomInstanceParameters::GetInstanceNumber()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1822
diff
changeset
|
230 !dicom.GetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER).ParseInteger32(instanceNumber_)) |
2789b4b0e0a8
DicomInstanceParameters::HasNumberOfFrames() and DicomInstanceParameters::GetInstanceNumber()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1822
diff
changeset
|
231 { |
2789b4b0e0a8
DicomInstanceParameters::HasNumberOfFrames() and DicomInstanceParameters::GetInstanceNumber()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1822
diff
changeset
|
232 instanceNumber_ = 0; |
2789b4b0e0a8
DicomInstanceParameters::HasNumberOfFrames() and DicomInstanceParameters::GetInstanceNumber()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1822
diff
changeset
|
233 } |
2171
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
234 |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
235 |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
236 static const Orthanc::DicomTag DICOM_TAG_PER_FRAME_FUNCTIONAL_GROUPS_SEQUENCE(0x5200, 0x9230); |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
237 static const Orthanc::DicomTag DICOM_TAG_FRAME_VOI_LUT_SEQUENCE_ATTRIBUTE(0x0028, 0x9132); |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
238 |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
239 const Orthanc::DicomValue* frames = dicom.TestAndGetValue(DICOM_TAG_PER_FRAME_FUNCTIONAL_GROUPS_SEQUENCE); |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
240 if (frames != NULL && |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
241 hasNumberOfFrames_ && |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
242 frames->IsSequence()) |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
243 { |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
244 /** |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
245 * New in Stone Web viewer 2.2: Deal with Philips multiframe |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
246 * (cf. mail from Tomas Kenda on 2021-08-17). This cannot be done |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
247 * in LoadSeriesDetailsFromInstance, as the "Per Frame Functional Groups Sequence" |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
248 * is not available at that point. |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
249 **/ |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
250 |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
251 const Json::Value& sequence = frames->GetSequenceContent(); |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
252 |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
253 perFrameWindowing_.resize(numberOfFrames_); |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
254 |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
255 // This corresponds to "ParsedDicomFile::GetDefaultWindowing()" |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
256 for (Json::ArrayIndex i = 0; i < sequence.size(); i++) |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
257 { |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
258 if (i < numberOfFrames_ && |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
259 sequence[i].isMember(DICOM_TAG_FRAME_VOI_LUT_SEQUENCE_ATTRIBUTE.Format())) |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
260 { |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
261 const Json::Value& v = sequence[i][DICOM_TAG_FRAME_VOI_LUT_SEQUENCE_ATTRIBUTE.Format()]; |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
262 |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
263 static const char* KEY_VALUE = "Value"; |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
264 |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
265 if (v.isMember(KEY_VALUE) && |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
266 v[KEY_VALUE].type() == Json::arrayValue && |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
267 v[KEY_VALUE].size() >= 1 && |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
268 v[KEY_VALUE][0].isMember(Orthanc::DICOM_TAG_WINDOW_CENTER.Format()) && |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
269 v[KEY_VALUE][0].isMember(Orthanc::DICOM_TAG_WINDOW_WIDTH.Format()) && |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
270 v[KEY_VALUE][0][Orthanc::DICOM_TAG_WINDOW_CENTER.Format()].isMember(KEY_VALUE) && |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
271 v[KEY_VALUE][0][Orthanc::DICOM_TAG_WINDOW_WIDTH.Format()].isMember(KEY_VALUE)) |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
272 { |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
273 const Json::Value& scenter = v[KEY_VALUE][0][Orthanc::DICOM_TAG_WINDOW_CENTER.Format()][KEY_VALUE]; |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
274 const Json::Value& swidth = v[KEY_VALUE][0][Orthanc::DICOM_TAG_WINDOW_WIDTH.Format()][KEY_VALUE]; |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
275 |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
276 double center, width; |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
277 if (scenter.isString() && |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
278 swidth.isString() && |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
279 Orthanc::SerializationToolbox::ParseDouble(center, scenter.asString()) && |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
280 Orthanc::SerializationToolbox::ParseDouble(width, swidth.asString())) |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
281 { |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
282 perFrameWindowing_[i] = Windowing(center, width); |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
283 } |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
284 else if (scenter.isNumeric() && |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
285 swidth.isNumeric()) |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
286 { |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
287 perFrameWindowing_[i] = Windowing(scenter.asDouble(), swidth.asDouble()); |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
288 } |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
289 } |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
290 } |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
291 } |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
292 } |
746 | 293 } |
294 | |
295 | |
2076
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
296 double DicomInstanceParameters::GetSliceThickness() const |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
297 { |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
298 if (data_.hasSliceThickness_) |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
299 { |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
300 return data_.sliceThickness_; |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
301 } |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
302 else |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
303 { |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
304 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
305 } |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
306 } |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
307 |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
308 |
1642
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
309 const Orthanc::DicomImageInformation& DicomInstanceParameters::GetImageInformation() const |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
310 { |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
311 assert(tags_.get() != NULL); |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
312 |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
313 if (imageInformation_.get() == NULL) |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
314 { |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
315 const_cast<DicomInstanceParameters&>(*this).imageInformation_. |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
316 reset(new Orthanc::DicomImageInformation(GetTags())); |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
317 |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
318 assert(imageInformation_->GetWidth() == GetWidth()); |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
319 assert(imageInformation_->GetHeight() == GetHeight()); |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
320 assert(imageInformation_->GetNumberOfFrames() == GetNumberOfFrames()); |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
321 } |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
322 |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
323 assert(imageInformation_.get() != NULL); |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
324 return *imageInformation_; |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
325 } |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
326 |
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
327 |
1636 | 328 CoordinateSystem3D DicomInstanceParameters::GetFrameGeometry(unsigned int frame) const |
746 | 329 { |
1636 | 330 if (frame >= data_.numberOfFrames_) |
746 | 331 { |
332 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
333 } | |
1636 | 334 else if (data_.frameOffsets_.empty()) |
746 | 335 { |
1636 | 336 return data_.geometry_; |
1634
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
337 } |
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
338 else |
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
339 { |
1636 | 340 assert(data_.frameOffsets_.size() == data_.numberOfFrames_); |
746 | 341 |
342 return CoordinateSystem3D( | |
1636 | 343 data_.geometry_.GetOrigin() + data_.frameOffsets_[frame] * data_.geometry_.GetNormal(), |
344 data_.geometry_.GetAxisX(), | |
345 data_.geometry_.GetAxisY()); | |
746 | 346 } |
347 } | |
348 | |
349 | |
1636 | 350 bool DicomInstanceParameters::IsPlaneWithinSlice(unsigned int frame, |
351 const CoordinateSystem3D& plane) const | |
746 | 352 { |
1636 | 353 if (frame >= data_.numberOfFrames_) |
746 | 354 { |
355 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
356 } | |
357 | |
1636 | 358 CoordinateSystem3D tmp = data_.geometry_; |
746 | 359 |
360 if (frame != 0) | |
361 { | |
362 tmp = GetFrameGeometry(frame); | |
363 } | |
364 | |
365 double distance; | |
366 | |
757 | 367 return (CoordinateSystem3D::ComputeDistance(distance, tmp, plane) && |
1636 | 368 distance <= data_.sliceThickness_ / 2.0); |
746 | 369 } |
370 | |
1637 | 371 |
372 bool DicomInstanceParameters::IsColor() const | |
373 { | |
374 Orthanc::PhotometricInterpretation photometric = | |
1642
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
375 GetImageInformation().GetPhotometricInterpretation(); |
1637 | 376 |
377 return (photometric != Orthanc::PhotometricInterpretation_Monochrome1 && | |
378 photometric != Orthanc::PhotometricInterpretation_Monochrome2); | |
379 } | |
380 | |
381 | |
1636 | 382 void DicomInstanceParameters::ApplyRescaleAndDoseScaling(Orthanc::ImageAccessor& image, |
383 bool useDouble) const | |
746 | 384 { |
385 if (image.GetFormat() != Orthanc::PixelFormat_Float32) | |
386 { | |
387 throw Orthanc::OrthancException(Orthanc::ErrorCode_IncompatibleImageFormat); | |
388 } | |
1141
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
389 |
1924
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
390 double scaling = data_.doseGridScaling_; |
1141
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
391 double offset = 0.0; |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
392 |
1636 | 393 if (data_.hasRescale_) |
746 | 394 { |
1924
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
395 scaling *= data_.rescaleSlope_; |
1636 | 396 offset = data_.rescaleIntercept_; |
1141
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
397 } |
7681f3943748
Changed handling of DoseGridScaling: before this commit, rescaleSlope was set to
Benjamin Golinvaux <bgo@osimis.io>
parents:
1091
diff
changeset
|
398 |
1924
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
399 Orthanc::ImageProcessing::ShiftScale2(image, offset, scaling, false); |
746 | 400 } |
1924
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
401 |
746 | 402 |
403 double DicomInstanceParameters::GetRescaleIntercept() const | |
404 { | |
405 if (data_.hasRescale_) | |
406 { | |
407 return data_.rescaleIntercept_; | |
408 } | |
409 else | |
410 { | |
956
a7351ad54960
Made IsContextLost automatically set the flag by checking with the emscripten
Benjamin Golinvaux <bgo@osimis.io>
parents:
949
diff
changeset
|
411 LOG(ERROR) << "DicomInstanceParameters::GetRescaleIntercept(): !data_.hasRescale_"; |
746 | 412 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
413 } | |
414 } | |
415 | |
416 | |
417 double DicomInstanceParameters::GetRescaleSlope() const | |
418 { | |
419 if (data_.hasRescale_) | |
420 { | |
421 return data_.rescaleSlope_; | |
422 } | |
423 else | |
424 { | |
956
a7351ad54960
Made IsContextLost automatically set the flag by checking with the emscripten
Benjamin Golinvaux <bgo@osimis.io>
parents:
949
diff
changeset
|
425 LOG(ERROR) << "DicomInstanceParameters::GetRescaleSlope(): !data_.hasRescale_"; |
746 | 426 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
427 } | |
428 } | |
429 | |
430 | |
1637 | 431 Orthanc::PixelFormat DicomInstanceParameters::GetExpectedPixelFormat() const |
432 { | |
433 if (GetSopClassUid() == SopClassUid_RTDose) | |
434 { | |
435 switch (GetImageInformation().GetBitsStored()) | |
436 { | |
437 case 16: | |
438 return Orthanc::PixelFormat_Grayscale16; | |
439 | |
440 case 32: | |
441 return Orthanc::PixelFormat_Grayscale32; | |
442 | |
443 default: | |
444 return Orthanc::PixelFormat_Grayscale16; // Rough guess | |
445 } | |
446 } | |
447 else if (IsColor()) | |
448 { | |
449 return Orthanc::PixelFormat_RGB24; | |
450 } | |
451 else if (GetImageInformation().IsSigned()) | |
452 { | |
453 return Orthanc::PixelFormat_SignedGrayscale16; | |
454 } | |
455 else | |
456 { | |
457 return Orthanc::PixelFormat_Grayscale16; // Rough guess | |
458 } | |
459 } | |
460 | |
461 | |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
462 Windowing DicomInstanceParameters::GetFallbackWindowing() const |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
463 { |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
464 double a, b; |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
465 if (tags_->ParseDouble(a, Orthanc::DICOM_TAG_SMALLEST_IMAGE_PIXEL_VALUE) && |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
466 tags_->ParseDouble(b, Orthanc::DICOM_TAG_LARGEST_IMAGE_PIXEL_VALUE)) |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
467 { |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
468 const double center = (a + b) / 2.0f; |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
469 const double width = (b - a); |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
470 return Windowing(center, width); |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
471 } |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
472 |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
473 // Added in Stone Web viewer > 2.5 |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
474 uint32_t bitsStored, pixelRepresentation; |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
475 if (tags_->ParseUnsignedInteger32(bitsStored, Orthanc::DICOM_TAG_BITS_STORED) && |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
476 tags_->ParseUnsignedInteger32(pixelRepresentation, Orthanc::DICOM_TAG_PIXEL_REPRESENTATION)) |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
477 { |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
478 const bool isSigned = (pixelRepresentation != 0); |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
479 const float maximum = powf(2.0, bitsStored); |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
480 return Windowing(isSigned ? 0.0f : maximum / 2.0f, maximum); |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
481 } |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
482 else |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
483 { |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
484 // Cannot infer a suitable windowing from the available tags |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
485 return Windowing(); |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
486 } |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
487 } |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
488 |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
489 |
1679
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
490 size_t DicomInstanceParameters::GetWindowingPresetsCount() const |
746 | 491 { |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
492 return data_.windowingPresets_.size(); |
1677
51bab5188a13
start multiple preset windowings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1646
diff
changeset
|
493 } |
51bab5188a13
start multiple preset windowings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1646
diff
changeset
|
494 |
51bab5188a13
start multiple preset windowings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1646
diff
changeset
|
495 |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
496 Windowing DicomInstanceParameters::GetWindowingPreset(size_t i) const |
1677
51bab5188a13
start multiple preset windowings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1646
diff
changeset
|
497 { |
1679
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
498 if (i < GetWindowingPresetsCount()) |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
499 { |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
500 return data_.windowingPresets_[i]; |
1679
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
501 } |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
502 else |
746 | 503 { |
1679
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
504 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
505 } |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
506 } |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
507 |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
508 |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
509 Windowing DicomInstanceParameters::GetWindowingPresetsUnion() const |
746 | 510 { |
1679
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
511 assert(tags_.get() != NULL); |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
512 size_t s = GetWindowingPresetsCount(); |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
513 |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
514 if (s > 0) |
746 | 515 { |
1679
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
516 // Use the largest windowing given all the preset windowings |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
517 // that are available in the DICOM tags |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
518 double low, high; |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
519 GetWindowingPreset(0).GetBounds(low, high); |
1679
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
520 |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
521 for (size_t i = 1; i < s; i++) |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
522 { |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
523 double a, b; |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
524 GetWindowingPreset(i).GetBounds(a, b); |
1679
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
525 low = std::min(low, a); |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
526 high = std::max(high, b); |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
527 } |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
528 |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
529 assert(low <= high); |
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
530 |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
531 if (!LinearAlgebra::IsNear(low, high)) |
1679
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
532 { |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
533 const double center = (low + high) / 2.0f; |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
534 const double width = (high - low); |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
535 return Windowing(center, width); |
1679
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
536 } |
746 | 537 } |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
538 |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
539 // No preset, or presets with an empty range |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
540 return GetFallbackWindowing(); |
746 | 541 } |
542 | |
1679
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
543 |
768
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
544 Orthanc::ImageAccessor* DicomInstanceParameters::ConvertToFloat(const Orthanc::ImageAccessor& pixelData) const |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
545 { |
1298
8a0a62189f46
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1291
diff
changeset
|
546 std::unique_ptr<Orthanc::Image> converted(new Orthanc::Image(Orthanc::PixelFormat_Float32, |
1634
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
547 pixelData.GetWidth(), |
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
548 pixelData.GetHeight(), |
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
549 false)); |
768
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
550 Orthanc::ImageProcessing::Convert(*converted, pixelData); |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
551 |
1287
8e82fdc6200e
Heavy (temporary) logging in the path that leads
Benjamin Golinvaux <bgo@osimis.io>
parents:
1270
diff
changeset
|
552 |
768
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
553 // Correct rescale slope/intercept if need be |
1636 | 554 //ApplyRescaleAndDoseScaling(*converted, (pixelData.GetFormat() == Orthanc::PixelFormat_Grayscale32)); |
555 ApplyRescaleAndDoseScaling(*converted, false); | |
768
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
556 |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
557 return converted.release(); |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
558 } |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
559 |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
560 |
1919
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
561 TextureBaseSceneLayer* DicomInstanceParameters::CreateTexture( |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
562 const Orthanc::ImageAccessor& pixelData) const |
746 | 563 { |
1353
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
564 // { |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
565 // const Orthanc::ImageAccessor& source = pixelData; |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
566 // const void* sourceBuffer = source.GetConstBuffer(); |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
567 // intptr_t sourceBufferInt = reinterpret_cast<intptr_t>(sourceBuffer); |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
568 // int sourceWidth = source.GetWidth(); |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
569 // int sourceHeight = source.GetHeight(); |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
570 // int sourcePitch = source.GetPitch(); |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
571 |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
572 // // TODO: turn error into trace below |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
573 // LOG(ERROR) << "ConvertGrayscaleToFloat | source:" |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
574 // << " W = " << sourceWidth << " H = " << sourceHeight |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
575 // << " P = " << sourcePitch << " B = " << sourceBufferInt |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
576 // << " B % 4 == " << sourceBufferInt % 4; |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
577 // } |
af65bce18951
Dummy commented debug block
Benjamin Golinvaux <bgo@osimis.io>
parents:
1300
diff
changeset
|
578 |
746 | 579 assert(sizeof(float) == 4); |
580 | |
581 Orthanc::PixelFormat sourceFormat = pixelData.GetFormat(); | |
582 | |
583 if (sourceFormat != GetExpectedPixelFormat()) | |
584 { | |
585 throw Orthanc::OrthancException(Orthanc::ErrorCode_IncompatibleImageFormat); | |
586 } | |
587 | |
1911
898774b4e02d
DicomInstanceParameters::CreateTexture() now sets pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
588 std::unique_ptr<TextureBaseSceneLayer> texture; |
898774b4e02d
DicomInstanceParameters::CreateTexture() now sets pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
589 |
746 | 590 if (sourceFormat == Orthanc::PixelFormat_RGB24) |
591 { | |
592 // This is the case of a color image. No conversion has to be done. | |
1911
898774b4e02d
DicomInstanceParameters::CreateTexture() now sets pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
593 texture.reset(new ColorTextureSceneLayer(pixelData)); |
746 | 594 } |
595 else | |
596 { | |
768
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
597 // This is the case of a grayscale frame. Convert it to Float32. |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
598 if (pixelData.GetFormat() == Orthanc::PixelFormat_Float32) |
746 | 599 { |
768
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
600 texture.reset(new FloatTextureSceneLayer(pixelData)); |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
601 } |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
602 else |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
603 { |
1298
8a0a62189f46
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1291
diff
changeset
|
604 std::unique_ptr<Orthanc::ImageAccessor> converted(ConvertToFloat(pixelData)); |
746 | 605 texture.reset(new FloatTextureSceneLayer(*converted)); |
606 } | |
607 | |
1911
898774b4e02d
DicomInstanceParameters::CreateTexture() now sets pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
608 FloatTextureSceneLayer& floatTexture = dynamic_cast<FloatTextureSceneLayer&>(*texture); |
898774b4e02d
DicomInstanceParameters::CreateTexture() now sets pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
609 |
1679
5b8b88e5bfd6
successfully running unit tests in WebAssembly
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1677
diff
changeset
|
610 if (GetWindowingPresetsCount() > 0) |
746 | 611 { |
2169
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
612 Windowing preset = GetWindowingPreset(0); |
fe5406abd43f
added separate class Windowing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2124
diff
changeset
|
613 floatTexture.SetCustomWindowing(preset.GetCenter(), preset.GetWidth()); |
746 | 614 } |
1206
c93a6218f0cd
Fixed photometric interpretation in texture creation
Benjamin Golinvaux <bgo@osimis.io>
parents:
1141
diff
changeset
|
615 |
1642
5cc589bfb385
lazy computation of DicomInstanceParameters::GetImageInformation()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1639
diff
changeset
|
616 switch (GetImageInformation().GetPhotometricInterpretation()) |
1206
c93a6218f0cd
Fixed photometric interpretation in texture creation
Benjamin Golinvaux <bgo@osimis.io>
parents:
1141
diff
changeset
|
617 { |
1634
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
618 case Orthanc::PhotometricInterpretation_Monochrome1: |
1911
898774b4e02d
DicomInstanceParameters::CreateTexture() now sets pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
619 floatTexture.SetInverted(true); |
1634
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
620 break; |
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
621 |
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
622 case Orthanc::PhotometricInterpretation_Monochrome2: |
1911
898774b4e02d
DicomInstanceParameters::CreateTexture() now sets pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
623 floatTexture.SetInverted(false); |
1634
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
624 break; |
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
625 |
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
626 default: |
a4418a489e86
improving robustness of DicomInstanceParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
627 break; |
1206
c93a6218f0cd
Fixed photometric interpretation in texture creation
Benjamin Golinvaux <bgo@osimis.io>
parents:
1141
diff
changeset
|
628 } |
1911
898774b4e02d
DicomInstanceParameters::CreateTexture() now sets pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
629 } |
1206
c93a6218f0cd
Fixed photometric interpretation in texture creation
Benjamin Golinvaux <bgo@osimis.io>
parents:
1141
diff
changeset
|
630 |
1911
898774b4e02d
DicomInstanceParameters::CreateTexture() now sets pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
631 if (HasPixelSpacing()) |
898774b4e02d
DicomInstanceParameters::CreateTexture() now sets pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
632 { |
898774b4e02d
DicomInstanceParameters::CreateTexture() now sets pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
633 texture->SetPixelSpacing(GetPixelSpacingX(), GetPixelSpacingY()); |
746 | 634 } |
1911
898774b4e02d
DicomInstanceParameters::CreateTexture() now sets pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
635 |
898774b4e02d
DicomInstanceParameters::CreateTexture() now sets pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
636 return texture.release(); |
746 | 637 } |
768
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
638 |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
639 |
1919
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
640 LookupTableTextureSceneLayer* DicomInstanceParameters::CreateLookupTableTexture( |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
641 const Orthanc::ImageAccessor& pixelData) const |
768
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
642 { |
1919
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
643 std::unique_ptr<LookupTableTextureSceneLayer> texture; |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
644 |
768
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
645 if (pixelData.GetFormat() == Orthanc::PixelFormat_Float32) |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
646 { |
1919
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
647 texture.reset(new LookupTableTextureSceneLayer(pixelData)); |
768
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
648 } |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
649 else |
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
650 { |
1298
8a0a62189f46
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1291
diff
changeset
|
651 std::unique_ptr<Orthanc::ImageAccessor> converted(ConvertToFloat(pixelData)); |
1919
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
652 texture.reset(new LookupTableTextureSceneLayer(*converted)); |
768
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
653 } |
1919
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
654 |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
655 if (HasPixelSpacing()) |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
656 { |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
657 texture->SetPixelSpacing(GetPixelSpacingX(), GetPixelSpacingY()); |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
658 } |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
659 |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
660 return texture.release(); |
768
55411e7da2f7
LookupTableTextureSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
762
diff
changeset
|
661 } |
980
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
662 |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
663 |
1919
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
664 LookupTableTextureSceneLayer* DicomInstanceParameters::CreateOverlayTexture( |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
665 int originX, |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
666 int originY, |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
667 const Orthanc::ImageAccessor& overlay) const |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
668 { |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
669 if (overlay.GetFormat() != Orthanc::PixelFormat_Grayscale8) |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
670 { |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
671 throw Orthanc::OrthancException(Orthanc::ErrorCode_IncompatibleImageFormat); |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
672 } |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
673 |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
674 std::unique_ptr<LookupTableTextureSceneLayer> texture(CreateLookupTableTexture(overlay)); |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
675 |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
676 texture->SetOrigin(static_cast<double>(originX - 1) * texture->GetPixelSpacingX(), |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
677 static_cast<double>(originY - 1) * texture->GetPixelSpacingY()); |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
678 |
1924
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
679 std::vector<uint8_t> lut(4 * 256); |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
680 for (size_t i = 0; i < 256; i++) |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
681 { |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
682 if (i < 127) |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
683 { |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
684 // Black pixels are converted to transparent pixels |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
685 lut[4 * i] = 0; |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
686 lut[4 * i + 1] = 0; |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
687 lut[4 * i + 2] = 0; |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
688 lut[4 * i + 3] = 0; // alpha |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
689 } |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
690 else |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
691 { |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
692 // White pixels are converted to opaque white |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
693 lut[4 * i] = 255; |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
694 lut[4 * i + 1] = 255; |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
695 lut[4 * i + 2] = 255; |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
696 lut[4 * i + 3] = 255; // alpha |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
697 } |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
698 } |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
699 |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
700 texture->SetLookupTable(lut); |
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
701 |
1919
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
702 return texture.release(); |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
703 } |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
704 |
ed4831e08961
added DicomInstanceParameters::CreateOverlayTexture()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1911
diff
changeset
|
705 |
980
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
706 unsigned int DicomInstanceParameters::GetIndexInSeries() const |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
707 { |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
708 if (data_.hasIndexInSeries_) |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
709 { |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
710 return data_.indexInSeries_; |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
711 } |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
712 else |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
713 { |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
714 LOG(ERROR) << "DicomInstanceParameters::GetIndexInSeries(): !data_.hasIndexInSeries_"; |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
715 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
716 } |
8e497a4e3d96
DicomInstanceParameters::GetIndexInSeries()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
956
diff
changeset
|
717 } |
1159
acb399643945
DicomInstanceParameters::ApplyRescale()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1141
diff
changeset
|
718 |
acb399643945
DicomInstanceParameters::ApplyRescale()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1141
diff
changeset
|
719 |
1636 | 720 double DicomInstanceParameters::ApplyRescale(double value) const |
1159
acb399643945
DicomInstanceParameters::ApplyRescale()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1141
diff
changeset
|
721 { |
1924
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
722 double scaling = data_.doseGridScaling_; |
1159
acb399643945
DicomInstanceParameters::ApplyRescale()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1141
diff
changeset
|
723 double offset = 0.0; |
acb399643945
DicomInstanceParameters::ApplyRescale()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1141
diff
changeset
|
724 |
1636 | 725 if (data_.hasRescale_) |
1159
acb399643945
DicomInstanceParameters::ApplyRescale()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1141
diff
changeset
|
726 { |
1924
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
727 scaling *= data_.rescaleSlope_; |
1636 | 728 offset = data_.rescaleIntercept_; |
1159
acb399643945
DicomInstanceParameters::ApplyRescale()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1141
diff
changeset
|
729 } |
acb399643945
DicomInstanceParameters::ApplyRescale()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1141
diff
changeset
|
730 |
1924
f4050908c6bc
display of overlays
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1919
diff
changeset
|
731 return (value * scaling + offset); |
1159
acb399643945
DicomInstanceParameters::ApplyRescale()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1141
diff
changeset
|
732 } |
1161
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
733 |
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
734 |
2076
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
735 bool DicomInstanceParameters::ComputeFrameOffsetsSpacing(double& spacing) const |
1161
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
736 { |
1636 | 737 if (data_.frameOffsets_.size() == 0) // Not a RT-DOSE |
1161
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
738 { |
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
739 return false; |
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
740 } |
1636 | 741 else if (data_.frameOffsets_.size() == 1) |
1161
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
742 { |
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
743 spacing = 1; // Edge case: RT-DOSE with one single frame |
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
744 return true; |
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
745 } |
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
746 else |
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
747 { |
2076
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
748 static double THRESHOLD = 0.001; |
1636 | 749 |
2076
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
750 if (data_.frameOffsets_.size() != GetNumberOfFrames()) |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
751 { |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
752 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
753 } |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
754 |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
755 double a = data_.frameOffsets_[1] - data_.frameOffsets_[0]; |
1161
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
756 |
1636 | 757 for (size_t i = 1; i + 1 < data_.frameOffsets_.size(); i++) |
1161
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
758 { |
2076
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
759 double b = data_.frameOffsets_[i + 1] - data_.frameOffsets_[i]; |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
760 if (!LinearAlgebra::IsNear(a, b, THRESHOLD)) |
1161
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
761 { |
2076
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
762 LOG(ERROR) << "Unable to extract slice thickness from GridFrameOffsetVector (3004,000C) (reason: varying spacing)"; |
1161
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
763 return false; |
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
764 } |
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
765 } |
2076
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
766 |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
767 spacing = std::abs(a); |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
768 |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
769 if (HasSliceThickness() && |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
770 !LinearAlgebra::IsNear(spacing, GetSliceThickness(), THRESHOLD)) |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
771 { |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
772 LOG(WARNING) << "SliceThickness and GridFrameOffsetVector (3004,000C) do not match"; |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
773 } |
1161
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
774 |
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
775 return true; |
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
776 } |
19b1c8caade4
fix sagittal geometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1159
diff
changeset
|
777 } |
1822
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
778 |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
779 |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
780 void DicomInstanceParameters::SetPixelSpacing(double pixelSpacingX, |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
781 double pixelSpacingY) |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
782 { |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
783 data_.hasPixelSpacing_ = true; |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
784 data_.pixelSpacingX_ = pixelSpacingX; |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
785 data_.pixelSpacingY_ = pixelSpacingY; |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
786 } |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
787 |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
788 |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
789 static const Json::Value* LookupDicomWebSingleValue(const Json::Value& dicomweb, |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
790 const std::string& tag, |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
791 const std::string& vr) |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
792 { |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
793 static const char* const VALUE = "Value"; |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
794 static const char* const VR = "vr"; |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
795 |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
796 if (dicomweb.type() == Json::objectValue && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
797 dicomweb.isMember(tag) && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
798 dicomweb[tag].type() == Json::objectValue && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
799 dicomweb[tag].isMember(VALUE) && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
800 dicomweb[tag].isMember(VR) && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
801 dicomweb[tag][VR].type() == Json::stringValue && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
802 dicomweb[tag][VR].asString() == vr && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
803 dicomweb[tag][VALUE].type() == Json::arrayValue && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
804 dicomweb[tag][VALUE].size() == 1u) |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
805 { |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
806 return &dicomweb[tag][VALUE][0]; |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
807 } |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
808 else |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
809 { |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
810 return NULL; |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
811 } |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
812 } |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
813 |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
814 |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
815 void DicomInstanceParameters::EnrichUsingDicomWeb(const Json::Value& dicomweb) |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
816 { |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
817 /** |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
818 * Use DICOM tag "SequenceOfUltrasoundRegions" (0018,6011) in |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
819 * order to derive the pixel spacing on ultrasound (US) images |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
820 **/ |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
821 |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
822 if (!data_.hasPixelSpacing_) |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
823 { |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
824 const Json::Value* region = LookupDicomWebSingleValue(dicomweb, "00186011", "SQ"); |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
825 if (region != NULL) |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
826 { |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
827 const Json::Value* physicalUnitsXDirection = LookupDicomWebSingleValue(*region, "00186024", "US"); |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
828 const Json::Value* physicalUnitsYDirection = LookupDicomWebSingleValue(*region, "00186026", "US"); |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
829 const Json::Value* physicalDeltaX = LookupDicomWebSingleValue(*region, "0018602C", "FD"); |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
830 const Json::Value* physicalDeltaY = LookupDicomWebSingleValue(*region, "0018602E", "FD"); |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
831 |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
832 if (physicalUnitsXDirection != NULL && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
833 physicalUnitsYDirection != NULL && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
834 physicalDeltaX != NULL && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
835 physicalDeltaY != NULL && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
836 physicalUnitsXDirection->type() == Json::intValue && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
837 physicalUnitsYDirection->type() == Json::intValue && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
838 physicalUnitsXDirection->asInt() == 0x0003 && // Centimeters |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
839 physicalUnitsYDirection->asInt() == 0x0003 && // Centimeters |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
840 physicalDeltaX->isNumeric() && |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
841 physicalDeltaY->isNumeric()) |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
842 { |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
843 // Scene coordinates are expressed in millimeters => multiplication by 10 |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
844 SetPixelSpacing(10.0 * physicalDeltaX->asDouble(), |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
845 10.0 * physicalDeltaY->asDouble()); |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
846 } |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
847 } |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
848 } |
0489fe25ce48
support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1821
diff
changeset
|
849 } |
2076
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
850 |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
851 |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
852 CoordinateSystem3D DicomInstanceParameters::GetMultiFrameGeometry() const |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
853 { |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
854 if (data_.frameOffsets_.empty()) |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
855 { |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
856 return data_.geometry_; |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
857 } |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
858 else |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
859 { |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
860 assert(data_.frameOffsets_.size() == data_.numberOfFrames_); |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
861 |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
862 double lowest = data_.frameOffsets_[0]; |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
863 for (size_t i = 1; i < data_.frameOffsets_.size(); i++) |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
864 { |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
865 lowest = std::min(lowest, data_.frameOffsets_[i]); |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
866 } |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
867 |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
868 return CoordinateSystem3D( |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
869 data_.geometry_.GetOrigin() + lowest * data_.geometry_.GetNormal(), |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
870 data_.geometry_.GetAxisX(), |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
871 data_.geometry_.GetAxisY()); |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
872 } |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
873 } |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
874 |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
875 |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
876 bool DicomInstanceParameters::IsReversedFrameOffsets() const |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
877 { |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
878 if (data_.frameOffsets_.size() < 2) |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
879 { |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
880 return false; |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
881 } |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
882 else |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
883 { |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
884 return (data_.frameOffsets_[0] > data_.frameOffsets_[1]); |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
885 } |
990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2075
diff
changeset
|
886 } |
2171
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
887 |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
888 |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
889 bool DicomInstanceParameters::LookupPerFrameWindowing(Windowing& windowing, |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
890 unsigned int frame) const |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
891 { |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
892 if (frame < data_.perFrameWindowing_.size()) |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
893 { |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
894 windowing = data_.perFrameWindowing_[frame]; |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
895 return true; |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
896 } |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
897 else |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
898 { |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
899 return false; |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
900 } |
8e3c403cc643
Improved support of the (0028,9132) tag for Philips multiframe images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2169
diff
changeset
|
901 } |
746 | 902 } |