annotate Applications/Dicomizer.cpp @ 292:053af6d76f2a

fix shared library linking
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 13 Jul 2023 17:20:14 +0200
parents 5f783bf882fe
children fa734a851551
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * Orthanc - A Lightweight, RESTful DICOM Store
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
254
20a730889ae2 upgrade to 2023
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 246
diff changeset
5 * Copyright (C) 2017-2023 Osimis S.A., Belgium
20a730889ae2 upgrade to 2023
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 246
diff changeset
6 * Copyright (C) 2021-2023 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 *
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * This program is free software: you can redistribute it and/or
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * modify it under the terms of the GNU Affero General Public License
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * as published by the Free Software Foundation, either version 3 of
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 * the License, or (at your option) any later version.
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 *
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful, but
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 * Affero General Public License for more details.
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 *
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 * You should have received a copy of the GNU Affero General Public License
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 **/
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23 #include "../Framework/Algorithms/ReconstructPyramidCommand.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 #include "../Framework/Algorithms/TranscodeTileCommand.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25 #include "../Framework/DicomToolbox.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 #include "../Framework/DicomizerParameters.h"
217
20bc074ec19a Viewer can display DICOM pyramids whose tile sizes vary across levels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
27 #include "../Framework/ImageToolbox.h"
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 #include "../Framework/ImagedVolumeParameters.h"
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
29 #include "../Framework/Inputs/CytomineImage.h"
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 #include "../Framework/Inputs/HierarchicalTiff.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31 #include "../Framework/Inputs/OpenSlidePyramid.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32 #include "../Framework/Inputs/TiledJpegImage.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 #include "../Framework/Inputs/TiledPngImage.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 #include "../Framework/Inputs/TiledPyramidStatistics.h"
151
fb8d4cd2f618 fix applications
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
35 #include "../Framework/MultiThreading/BagOfTasksProcessor.h"
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36 #include "../Framework/Outputs/DicomPyramidWriter.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 #include "../Framework/Outputs/TruncatedPyramidWriter.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
39 #include <Compatibility.h> // For std::unique_ptr
192
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
40 #include <DicomParsing/FromDcmtkBridge.h>
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
41 #include <Logging.h>
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
42 #include <OrthancException.h>
213
2a4e1f7de5ab remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 199
diff changeset
43 #include <Toolbox.h>
192
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
44 #include <SystemToolbox.h>
59
7a3853d51c45 Move "Framework/Orthanc/" as "Resources/Orthanc/"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 57
diff changeset
45
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 #include "ApplicationToolbox.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48 #include <EmbeddedResources.h>
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 #include <dcmtk/dcmdata/dcdeftag.h>
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 #include <dcmtk/dcmdata/dcuid.h>
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52 #include <dcmtk/dcmdata/dcvrobow.h>
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
53 #include <dcmtk/dcmdata/dcvrat.h>
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
56 static const char* OPTION_COLOR = "color";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
57 static const char* OPTION_COMPRESSION = "compression";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
58 static const char* OPTION_DATASET = "dataset";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
59 static const char* OPTION_FOLDER = "folder";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
60 static const char* OPTION_FOLDER_PATTERN = "folder-pattern";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
61 static const char* OPTION_HELP = "help";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
62 static const char* OPTION_ICC_PROFILE = "icc-profile";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
63 static const char* OPTION_IMAGED_DEPTH = "imaged-depth";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
64 static const char* OPTION_IMAGED_HEIGHT = "imaged-height";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
65 static const char* OPTION_IMAGED_WIDTH = "imaged-width";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
66 static const char* OPTION_INPUT = "input";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
67 static const char* OPTION_JPEG_QUALITY = "jpeg-quality";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
68 static const char* OPTION_LEVELS = "levels";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
69 static const char* OPTION_LOWER_LEVELS = "lower-levels";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
70 static const char* OPTION_MAX_SIZE = "max-size";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
71 static const char* OPTION_OFFSET_X = "offset-x";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
72 static const char* OPTION_OFFSET_Y = "offset-y";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
73 static const char* OPTION_OPENSLIDE = "openslide";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
74 static const char* OPTION_OPTICAL_PATH = "optical-path";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
75 static const char* OPTION_PYRAMID = "pyramid";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
76 static const char* OPTION_REENCODE = "reencode";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
77 static const char* OPTION_REPAINT = "repaint";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
78 static const char* OPTION_SAFETY = "safety";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
79 static const char* OPTION_SAMPLE_DATASET = "sample-dataset";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
80 static const char* OPTION_SMOOTH = "smooth";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
81 static const char* OPTION_THREADS = "threads";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
82 static const char* OPTION_TILE_HEIGHT = "tile-height";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
83 static const char* OPTION_TILE_WIDTH = "tile-width";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
84 static const char* OPTION_VERBOSE = "verbose";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
85 static const char* OPTION_VERSION = "version";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
86
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
87 // New in release 1.1
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
88 static const char* OPTION_CYTOMINE_URL = "cytomine-url";
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
89 static const char* OPTION_CYTOMINE_IMAGE_INSTANCE_ID = "cytomine-image";
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
90 static const char* OPTION_CYTOMINE_PUBLIC_KEY = "cytomine-public-key";
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
91 static const char* OPTION_CYTOMINE_PRIVATE_KEY = "cytomine-private-key";
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
92 static const char* OPTION_CYTOMINE_COMPRESSION = "cytomine-compression";
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
93
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
94
226
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
95 #if ORTHANC_FRAMEWORK_VERSION_IS_ABOVE(1, 9, 0)
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
96
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
97 bool ReadJsonWithoutComments(Json::Value& target,
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
98 const std::string& source)
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
99 {
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
100 return Orthanc::Toolbox::ReadJsonWithoutComments(target, source);
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
101 }
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
102
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
103 #else
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
104
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
105 // Backward compatibility with Orthanc framework <= 1.8.2
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
106 #include <json/reader.h>
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
107
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
108 bool ReadJsonWithoutComments(Json::Value& target,
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
109 const std::string& source)
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
110 {
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
111 Json::Reader reader;
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
112 return reader.parse(source, target, false);
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
113 }
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
114 #endif
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
115
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
116
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
117 static void TranscodePyramid(OrthancWSI::PyramidWriterBase& target,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
118 OrthancWSI::ITiledPyramid& source,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
119 const OrthancWSI::DicomizerParameters& parameters)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
120 {
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
121 LOG(WARNING) << "Transcoding the source pyramid (not re-encoding)";
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
122
236
b0ee417b667a migrating new definitions in namespace Orthanc to namespace OrthancWSI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
123 OrthancWSI::BagOfTasks tasks;
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
124
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
125 for (unsigned int i = 0; i < source.GetLevelCount(); i++)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
126 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
127 LOG(WARNING) << "Creating level " << i << " of size "
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
128 << source.GetLevelWidth(i) << "x" << source.GetLevelHeight(i);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
129 target.AddLevel(source.GetLevelWidth(i), source.GetLevelHeight(i));
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
130 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
131
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
132 OrthancWSI::TranscodeTileCommand::PrepareBagOfTasks(tasks, target, source, parameters);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
133 OrthancWSI::ApplicationToolbox::Execute(tasks, parameters.GetThreadsCount());
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
134 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
135
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
136
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
137 static void ReconstructPyramid(OrthancWSI::PyramidWriterBase& target,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
138 OrthancWSI::ITiledPyramid& source,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
139 const OrthancWSI::DicomizerParameters& parameters)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
140 {
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
141 LOG(WARNING) << "Re-encoding the source pyramid (not transcoding, slower process)";
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
142
236
b0ee417b667a migrating new definitions in namespace Orthanc to namespace OrthancWSI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
143 OrthancWSI::BagOfTasks tasks;
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
144
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
145 unsigned int levelsCount = parameters.GetPyramidLevelsCount(target, source);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
146 LOG(WARNING) << "The target pyramid will have " << levelsCount << " levels";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
147 assert(levelsCount >= 1);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
148
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
149 for (unsigned int i = 0; i < levelsCount; i++)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
150 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
151 unsigned int width = OrthancWSI::CeilingDivision(source.GetLevelWidth(0), 1 << i);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
152 unsigned int height = OrthancWSI::CeilingDivision(source.GetLevelHeight(0), 1 << i);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
153
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
154 LOG(WARNING) << "Creating level " << i << " of size " << width << "x" << height;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
155 target.AddLevel(width, height);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
156 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
157
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
158 unsigned int lowerLevelsCount = parameters.GetPyramidLowerLevelsCount(target, source);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
159 if (lowerLevelsCount > levelsCount)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
160 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
161 LOG(WARNING) << "The number of lower levels (" << lowerLevelsCount
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
162 << ") exceeds the number of levels (" << levelsCount
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
163 << "), cropping it";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
164 lowerLevelsCount = levelsCount;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
165 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
166
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
167 assert(lowerLevelsCount <= levelsCount);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
168 if (lowerLevelsCount != levelsCount)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
169 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
170 LOG(WARNING) << "Constructing the " << lowerLevelsCount << " lower levels of the pyramid";
166
f0dac1e8f736 access to photometric interpretation of source pyramids
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 157
diff changeset
171 OrthancWSI::TruncatedPyramidWriter truncated(target, lowerLevelsCount, source.GetPhotometricInterpretation());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
172 OrthancWSI::ReconstructPyramidCommand::PrepareBagOfTasks
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
173 (tasks, truncated, source, lowerLevelsCount + 1, 0, parameters);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
174 OrthancWSI::ApplicationToolbox::Execute(tasks, parameters.GetThreadsCount());
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
175
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
176 assert(tasks.GetSize() == 0);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
177
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
178 const unsigned int upperLevelsCount = levelsCount - lowerLevelsCount;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
179 LOG(WARNING) << "Constructing the " << upperLevelsCount << " upper levels of the pyramid";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
180 OrthancWSI::ReconstructPyramidCommand::PrepareBagOfTasks
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
181 (tasks, target, truncated.GetUpperLevel(),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
182 upperLevelsCount, lowerLevelsCount, parameters);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
183 OrthancWSI::ApplicationToolbox::Execute(tasks, parameters.GetThreadsCount());
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
184 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
185 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
186 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
187 LOG(WARNING) << "Constructing the pyramid";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
188 OrthancWSI::ReconstructPyramidCommand::PrepareBagOfTasks
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
189 (tasks, target, source, levelsCount, 0, parameters);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
190 OrthancWSI::ApplicationToolbox::Execute(tasks, parameters.GetThreadsCount());
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
191 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
192 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
193
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
194
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
195 static void Recompress(OrthancWSI::IFileTarget& output,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
196 OrthancWSI::ITiledPyramid& source,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
197 const DcmDataset& dataset,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
198 const OrthancWSI::DicomizerParameters& parameters,
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
199 const OrthancWSI::ImagedVolumeParameters& volume,
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
200 OrthancWSI::ImageCompression sourceCompression)
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
201 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
202 OrthancWSI::TiledPyramidStatistics stats(source);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
203
217
20bc074ec19a Viewer can display DICOM pyramids whose tile sizes vary across levels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
204 OrthancWSI::ImageToolbox::CheckConstantTileSize(stats); // Sanity check
20bc074ec19a Viewer can display DICOM pyramids whose tile sizes vary across levels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
205 LOG(WARNING) << "Size of source tiles: " << stats.GetTileWidth(0) << "x" << stats.GetTileHeight(0);
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
206 LOG(WARNING) << "Pixel format: " << Orthanc::EnumerationToString(source.GetPixelFormat());
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
207 LOG(WARNING) << "Source photometric interpretation: " << Orthanc::EnumerationToString(source.GetPhotometricInterpretation());
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
208 LOG(WARNING) << "Source compression: " << EnumerationToString(sourceCompression);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
209 LOG(WARNING) << "Smoothing is " << (parameters.IsSmoothEnabled() ? "enabled" : "disabled");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
210
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
211 if (parameters.IsRepaintBackground())
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
212 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
213 LOG(WARNING) << "Repainting the background with color: ("
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
214 << static_cast<int>(parameters.GetBackgroundColorRed()) << ","
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
215 << static_cast<int>(parameters.GetBackgroundColorGreen()) << ","
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
216 << static_cast<int>(parameters.GetBackgroundColorBlue()) << ")";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
217 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
218 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
219 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
220 LOG(WARNING) << "No repainting of the background";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
221 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
222
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
223 Orthanc::PhotometricInterpretation targetPhotometric;
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
224 bool transcoding;
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
225
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
226 if (parameters.IsForceReencode() ||
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
227 parameters.IsReconstructPyramid() ||
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
228 sourceCompression != parameters.GetTargetCompression())
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
229 {
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
230 // The tiles of the source image will be re-encoded
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
231 transcoding = false;
171
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
232
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
233 if (source.GetPixelFormat() == Orthanc::PixelFormat_Grayscale8)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
234 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
235 targetPhotometric = source.GetPhotometricInterpretation();
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
236 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
237 else
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
238 {
171
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
239 switch (parameters.GetTargetCompression())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
240 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
241 case OrthancWSI::ImageCompression_Jpeg:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
242 case OrthancWSI::ImageCompression_Jpeg2000:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
243 targetPhotometric = Orthanc::PhotometricInterpretation_YBRFull422;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
244 break;
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
245
171
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
246 case OrthancWSI::ImageCompression_None:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
247 targetPhotometric = Orthanc::PhotometricInterpretation_RGB;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
248 break;
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
249
171
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
250 default:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
251 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
252 }
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
253 }
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
254 }
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
255 else
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
256 {
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
257 // Transcoding: The tiles are copied (no re-encoding)
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
258 transcoding = true;
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
259 targetPhotometric = source.GetPhotometricInterpretation();
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
260 }
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
261
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
262 OrthancWSI::DicomPyramidWriter target(output, dataset,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
263 source.GetPixelFormat(),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
264 parameters.GetTargetCompression(),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
265 parameters.GetTargetTileWidth(source),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
266 parameters.GetTargetTileHeight(source),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
267 parameters.GetDicomMaxFileSize(),
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
268 volume, targetPhotometric);
29
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
269 target.SetJpegQuality(parameters.GetJpegQuality());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
270
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
271 LOG(WARNING) << "Size of target tiles: " << target.GetTileWidth() << "x" << target.GetTileHeight();
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
272 LOG(WARNING) << "Target photometric interpretation: " << Orthanc::EnumerationToString(targetPhotometric);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
273
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
274 if (!transcoding &&
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
275 target.GetImageCompression() == OrthancWSI::ImageCompression_Jpeg)
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
276 {
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
277 LOG(WARNING) << "Target compression: Jpeg with quality "
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
278 << static_cast<int>(target.GetJpegQuality());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
279 target.SetJpegQuality(target.GetJpegQuality());
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
280 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
281 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
282 {
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
283 LOG(WARNING) << "Target compression: "
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
284 << OrthancWSI::EnumerationToString(target.GetImageCompression());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
285 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
286
217
20bc074ec19a Viewer can display DICOM pyramids whose tile sizes vary across levels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
287 OrthancWSI::ImageToolbox::CheckConstantTileSize(stats);
20bc074ec19a Viewer can display DICOM pyramids whose tile sizes vary across levels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
288 if (stats.GetTileWidth(0) % target.GetTileWidth() != 0 ||
20bc074ec19a Viewer can display DICOM pyramids whose tile sizes vary across levels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
289 stats.GetTileHeight(0) % target.GetTileHeight() != 0)
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
290 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
291 LOG(ERROR) << "When resampling the tile size, "
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
292 << "it must be a integer divisor of the original tile size";
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
293 throw Orthanc::OrthancException(Orthanc::ErrorCode_IncompatibleImageSize);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
294 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
295
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
296 if (target.GetTileWidth() <= 16 ||
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
297 target.GetTileHeight() <= 16)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
298 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
299 LOG(ERROR) << "Tiles are too small (16 pixels minimum): "
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
300 << target.GetTileWidth() << "x" << target.GetTileHeight();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
301 throw Orthanc::OrthancException(Orthanc::ErrorCode_IncompatibleImageSize);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
302 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
303
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
304 if (transcoding)
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
305 {
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
306 TranscodePyramid(target, stats, parameters);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
307 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
308 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
309 {
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
310 ReconstructPyramid(target, stats, parameters);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
311 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
312
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
313 target.Flush();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
314 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
315
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
316
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
317
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
318 static DcmDataset* ParseDataset(const std::string& path)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
319 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
320 Json::Value json;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
321
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
322 if (path.empty())
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
323 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
324 json = Json::objectValue; // Empty dataset => TODO EMBED
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
325 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
326 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
327 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
328 std::string content;
43
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 31
diff changeset
329 Orthanc::SystemToolbox::ReadFile(content, path);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
330
226
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
331 if (!ReadJsonWithoutComments(json, content))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
332 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
333 LOG(ERROR) << "Cannot parse the JSON file in: " << path;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
334 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
335 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
336 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
337
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
338 std::unique_ptr<DcmDataset> dataset(Orthanc::FromDcmtkBridge::FromJson(json, true, true, Orthanc::Encoding_Latin1,
177
ea62c89b264b fix due to change in the orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 175
diff changeset
339 "" /* no private tag, thus no private creator */));
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
340 if (dataset.get() == NULL)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
341 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
342 LOG(ERROR) << "Cannot convert to JSON file to a DICOM dataset: " << path;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
343 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
344 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
345
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
346 // VL Whole Slide Microscopy Image IOD
271
45e3b5adf4ae opened issue 2379 in OpenSeadragon
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
347 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_SOPClassUID, OrthancWSI::VL_WHOLE_SLIDE_MICROSCOPY_IMAGE_STORAGE_IOD);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
348
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
349 // Slide Microscopy
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
350 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_Modality, "SM");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
351
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
352 // Patient orientation makes no sense in whole-slide images
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
353 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_PatientOrientation, "");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
354
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
355 // Some basic coordinate information
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
356 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_VolumetricProperties, "VOLUME");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
357 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_ImageOrientationSlide, "0\\-1\\0\\-1\\0\\0");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
358
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
359 std::string date, time;
130
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 129
diff changeset
360 Orthanc::SystemToolbox::GetNowDicom(date, time, true /* use UTC time (not local time) */);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
361 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_StudyDate, date);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
362 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_StudyTime, time);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
363 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_SeriesDate, date);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
364 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_SeriesTime, time);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
365 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_ContentDate, date);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
366 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_ContentTime, time);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
367 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_AcquisitionDateTime, date + time);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
368
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
369 return dataset.release();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
370 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
371
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
372
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
373
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
374 static void SetupDimension(DcmDataset& dataset,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
375 const std::string& opticalPathId,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
376 const OrthancWSI::ITiledPyramid& source,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
377 const OrthancWSI::ImagedVolumeParameters& volume)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
378 {
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
379 // Extract the identifier of the Dimension Organization, if provided
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
380 std::string organization;
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
381 DcmItem* previous = OrthancWSI::DicomToolbox::ExtractSingleSequenceItem(dataset, DCM_DimensionOrganizationSequence);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
382
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
383 if (previous != NULL &&
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
384 previous->tagExists(DCM_DimensionOrganizationUID))
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
385 {
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
386 organization = OrthancWSI::DicomToolbox::GetStringTag(*previous, DCM_DimensionOrganizationUID);
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
387 }
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
388 else
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
389 {
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
390 // No Dimension Organization provided: Generate an unique identifier
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
391 organization = Orthanc::FromDcmtkBridge::GenerateUniqueIdentifier(Orthanc::ResourceType_Instance);
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
392 }
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
393
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
394
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
395 {
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
396 // Construct tag "Dimension Organization Sequence" (0020,9221)
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
397 std::unique_ptr<DcmItem> item(new DcmItem);
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
398 OrthancWSI::DicomToolbox::SetStringTag(*item, DCM_DimensionOrganizationUID, organization);
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
399
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
400 std::unique_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_DimensionOrganizationSequence));
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
401
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
402 if (!sequence->insert(item.release(), false, false).good() ||
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
403 !dataset.insert(sequence.release(), true /* replace */, false).good())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
404 {
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
405 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
406 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
407 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
408
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
409
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
410 {
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
411 // Construct tag "Dimension Index Sequence" (0020,9222)
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
412 std::unique_ptr<DcmItem> item(new DcmItem);
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
413 OrthancWSI::DicomToolbox::SetStringTag(*item, DCM_DimensionOrganizationUID, organization);
84
727670c5c125 fix generation of "Dimension Index Sequence" and "Dimension Index Values"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
414 OrthancWSI::DicomToolbox::SetAttributeTag(*item, DCM_FunctionalGroupPointer, DCM_PlanePositionSlideSequence);
727670c5c125 fix generation of "Dimension Index Sequence" and "Dimension Index Values"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
415 OrthancWSI::DicomToolbox::SetAttributeTag(*item, DCM_DimensionIndexPointer, DCM_ColumnPositionInTotalImagePixelMatrix);
727670c5c125 fix generation of "Dimension Index Sequence" and "Dimension Index Values"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
416
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
417 std::unique_ptr<DcmItem> item2(new DcmItem);
84
727670c5c125 fix generation of "Dimension Index Sequence" and "Dimension Index Values"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
418 OrthancWSI::DicomToolbox::SetStringTag(*item2, DCM_DimensionOrganizationUID, organization);
727670c5c125 fix generation of "Dimension Index Sequence" and "Dimension Index Values"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
419 OrthancWSI::DicomToolbox::SetAttributeTag(*item2, DCM_FunctionalGroupPointer, DCM_PlanePositionSlideSequence);
727670c5c125 fix generation of "Dimension Index Sequence" and "Dimension Index Values"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
420 OrthancWSI::DicomToolbox::SetAttributeTag(*item2, DCM_DimensionIndexPointer, DCM_RowPositionInTotalImagePixelMatrix);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
421
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
422 std::unique_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_DimensionIndexSequence));
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
423
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
424 if (!sequence->insert(item.release(), false, false).good() ||
84
727670c5c125 fix generation of "Dimension Index Sequence" and "Dimension Index Values"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 83
diff changeset
425 !sequence->insert(item2.release(), false, false).good() ||
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
426 !dataset.insert(sequence.release(), true /* replace */, false).good())
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
427 {
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
428 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
429 }
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
430 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
431
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
432
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
433 {
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
434 // Construct tag "Shared Functional Groups Sequence" (5200,9229)
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
435 std::unique_ptr<DcmItem> item(new DcmItem);
168
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
436
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
437 std::unique_ptr<DcmItem> item3(new DcmItem);
168
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
438 OrthancWSI::DicomToolbox::SetStringTag(*item3, DCM_OpticalPathIdentifier, opticalPathId);
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
439
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
440 std::unique_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_SharedFunctionalGroupsSequence));
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
441 std::unique_ptr<DcmSequenceOfItems> sequence3(new DcmSequenceOfItems(DCM_OpticalPathIdentificationSequence));
168
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
442
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
443 if (!sequence3->insert(item3.release(), false, false).good() ||
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
444 !item->insert(sequence3.release(), false, false).good() ||
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
445 !sequence->insert(item.release(), false, false).good() ||
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
446 !dataset.insert(sequence.release(), true /* replace */, false).good())
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
447 {
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
448 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
449 }
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
450 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
451 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
452
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
453
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
454 static void EnrichDataset(DcmDataset& dataset,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
455 const OrthancWSI::ITiledPyramid& source,
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
456 OrthancWSI::ImageCompression sourceCompression,
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
457 const OrthancWSI::DicomizerParameters& parameters,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
458 const OrthancWSI::ImagedVolumeParameters& volume)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
459 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
460 Orthanc::Encoding encoding = Orthanc::FromDcmtkBridge::DetectEncoding(dataset, Orthanc::Encoding_Latin1);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
461
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
462 if (sourceCompression == OrthancWSI::ImageCompression_Jpeg ||
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
463 parameters.GetTargetCompression() == OrthancWSI::ImageCompression_Jpeg)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
464 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
465 // Takes as estimation a 1:10 compression ratio
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
466 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_LossyImageCompression, "01");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
467 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_LossyImageCompressionRatio, "10");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
468 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_LossyImageCompressionMethod, "ISO_10918_1"); // JPEG Lossy Compression
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
469 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
470 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
471 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
472 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_LossyImageCompression, "00");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
473 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
474
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
475 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeWidth, boost::lexical_cast<std::string>(volume.GetWidth()));
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
476 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeHeight, boost::lexical_cast<std::string>(volume.GetHeight()));
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
477 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeDepth, boost::lexical_cast<std::string>(volume.GetDepth()));
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
478
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
479 std::unique_ptr<DcmItem> origin(new DcmItem);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
480 OrthancWSI::DicomToolbox::SetStringTag(*origin, DCM_XOffsetInSlideCoordinateSystem,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
481 boost::lexical_cast<std::string>(volume.GetOffsetX()));
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
482 OrthancWSI::DicomToolbox::SetStringTag(*origin, DCM_YOffsetInSlideCoordinateSystem,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
483 boost::lexical_cast<std::string>(volume.GetOffsetY()));
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
484
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
485 std::unique_ptr<DcmSequenceOfItems> sequenceOrigin(new DcmSequenceOfItems(DCM_TotalPixelMatrixOriginSequence));
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
486 if (!sequenceOrigin->insert(origin.release(), false, false).good() ||
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
487 !dataset.insert(sequenceOrigin.release(), false, false).good())
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
488 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
489 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
490 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
491
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
492
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
493 if (parameters.GetOpticalPath() == OrthancWSI::OpticalPath_Brightfield)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
494 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
495 if (dataset.tagExists(DCM_OpticalPathSequence))
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
496 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
497 LOG(ERROR) << "The user DICOM dataset already contains an optical path sequence, giving up";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
498 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
499 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
500
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
501 std::string brightfield;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
502 Orthanc::EmbeddedResources::GetFileResource(brightfield, Orthanc::EmbeddedResources::BRIGHTFIELD_OPTICAL_PATH);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
503
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
504 Json::Value json;
226
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
505 if (!ReadJsonWithoutComments(json, brightfield))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
506 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
507 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
508 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
509
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
510 std::unique_ptr<DcmElement> element(Orthanc::FromDcmtkBridge::FromJson(
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
511 Orthanc::DicomTag(DCM_OpticalPathSequence.getGroup(),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
512 DCM_OpticalPathSequence.getElement()),
177
ea62c89b264b fix due to change in the orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 175
diff changeset
513 json, false, encoding,
ea62c89b264b fix due to change in the orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 175
diff changeset
514 "" /* no private tag, thus no private creator */));
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
515 if (!dataset.insert(element.release()).good())
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
516 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
517 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
518 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
519 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
520
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
521
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
522 std::string profile;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
523 if (parameters.GetIccProfilePath().empty())
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
524 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
525 Orthanc::EmbeddedResources::GetFileResource(profile, Orthanc::EmbeddedResources::SRGB_ICC_PROFILE);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
526 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
527 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
528 {
43
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 31
diff changeset
529 Orthanc::SystemToolbox::ReadFile(profile, parameters.GetIccProfilePath());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
530 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
531
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
532
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
533 DcmItem* opticalPath = OrthancWSI::DicomToolbox::ExtractSingleSequenceItem(dataset, DCM_OpticalPathSequence);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
534 if (opticalPath == NULL)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
535 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
536 LOG(ERROR) << "No optical path specified";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
537 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
538 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
539
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
540 if (!opticalPath->tagExists(DCM_ICCProfile))
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
541 {
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
542 std::unique_ptr<DcmOtherByteOtherWord> icc(new DcmOtherByteOtherWord(DCM_ICCProfile));
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
543
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
544 if (!icc->putUint8Array(reinterpret_cast<const Uint8*>(profile.c_str()), profile.size()).good() ||
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
545 !opticalPath->insert(icc.release()).good())
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
546 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
547 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
548 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
549 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
550
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
551 const char* opticalPathId = NULL;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
552 if (!opticalPath->findAndGetString(DCM_OpticalPathIdentifier, opticalPathId).good() ||
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
553 opticalPathId == NULL)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
554 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
555 LOG(ERROR) << "No identifier in the optical path";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
556 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
557 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
558
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
559 SetupDimension(dataset, opticalPathId, source, volume);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
560 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
561
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
562
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
563 static bool ParseParameters(int& exitStatus,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
564 OrthancWSI::DicomizerParameters& parameters,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
565 OrthancWSI::ImagedVolumeParameters& volume,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
566 int argc,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
567 char* argv[])
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
568 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
569 // Declare the supported parameters
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
570 boost::program_options::options_description generic("Generic options");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
571 generic.add_options()
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
572 (OPTION_HELP, "Display this help and exit")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
573 (OPTION_VERSION, "Output version information and exit")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
574 (OPTION_VERBOSE, "Be verbose in logs")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
575 (OPTION_THREADS,
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
576 boost::program_options::value<int>()->default_value(parameters.GetThreadsCount()),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
577 "Number of processing threads to be used")
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
578 (OPTION_OPENSLIDE, boost::program_options::value<std::string>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
579 "Path to the shared library of OpenSlide "
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
580 "(not necessary if converting from standard hierarchical TIFF)")
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
581 ;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
582
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
583 boost::program_options::options_description source("Options for the source image");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
584 source.add_options()
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
585 (OPTION_DATASET, boost::program_options::value<std::string>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
586 "Path to a JSON file containing the DICOM dataset")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
587 (OPTION_SAMPLE_DATASET,
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
588 "Display a minimalistic sample DICOM dataset in JSON format, then exit")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
589 (OPTION_REENCODE, boost::program_options::value<bool>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
590 "Whether to re-encode each tile (no transcoding, much slower) (Boolean)")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
591 (OPTION_REPAINT, boost::program_options::value<bool>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
592 "Whether to repaint the background of the image (Boolean)")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
593 (OPTION_COLOR, boost::program_options::value<std::string>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
594 "Color of the background (e.g. \"255,0,0\")")
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
595 ;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
596
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
597 boost::program_options::options_description cytomine("Options if importing from Cytomine");
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
598 cytomine.add_options()
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
599 (OPTION_CYTOMINE_URL, boost::program_options::value<std::string>(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
600 "URL of the source Cytomine server, for instance: https://demo.cytomine.be/")
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
601 (OPTION_CYTOMINE_PUBLIC_KEY, boost::program_options::value<std::string>(),
246
793b8f9c9d52 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 244
diff changeset
602 "Your personal public key in Cytomine (cf. Account in the Cytomine Web interface)")
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
603 (OPTION_CYTOMINE_PRIVATE_KEY, boost::program_options::value<std::string>(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
604 "Your personal private key in Cytomine (to be kept secret)")
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
605 (OPTION_CYTOMINE_IMAGE_INSTANCE_ID, boost::program_options::value<int>(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
606 "ID of the Image Instance of interest in Cytomine (must be an integer)")
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
607 (OPTION_CYTOMINE_COMPRESSION, boost::program_options::value<std::string>()->default_value("jpeg"),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
608 "Compression to be used for downloading the tiles from Cytomine, "
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
609 "can be \"jpeg\" (faster) or \"png\" (better quality)")
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
610 ;
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
611
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
612 boost::program_options::options_description pyramid("Options to construct the pyramid");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
613 pyramid.add_options()
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
614 (OPTION_PYRAMID, boost::program_options::value<bool>()->default_value(false),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
615 "Reconstruct the full pyramid (slow) (Boolean)")
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
616 (OPTION_SMOOTH, boost::program_options::value<bool>()->default_value(false),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
617 "Apply smoothing when reconstructing the pyramid "
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
618 "(slower, but higher quality) (Boolean)")
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
619 (OPTION_LEVELS, boost::program_options::value<int>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
620 "Number of levels in the target pyramid")
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
621 ;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
622
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
623 boost::program_options::options_description target("Options for the target image");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
624 target.add_options()
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
625 (OPTION_TILE_WIDTH, boost::program_options::value<int>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
626 "Width of the tiles in the target image")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
627 (OPTION_TILE_HEIGHT, boost::program_options::value<int>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
628 "Height of the tiles in the target image")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
629 (OPTION_COMPRESSION, boost::program_options::value<std::string>(),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
630 "Compression of the target image (\"none\", \"jpeg\" or \"jpeg2000\")")
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
631 (OPTION_JPEG_QUALITY, boost::program_options::value<int>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
632 "Set quality level for JPEG (0..100)")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
633 (OPTION_MAX_SIZE, boost::program_options::value<int>()->default_value(10),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
634 "Maximum size per DICOM instance (in MB), 0 means no limit on the file size")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
635 (OPTION_FOLDER, boost::program_options::value<std::string>(),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
636 "Folder where to store the output DICOM instances")
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
637 (OPTION_FOLDER_PATTERN,
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
638 boost::program_options::value<std::string>()->default_value("wsi-%06d.dcm"),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
639 "Pattern for the files in the output folder")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
640 ("orthanc", boost::program_options::value<std::string>()->default_value("http://localhost:8042/"),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
641 "URL to the REST API of the target Orthanc server")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
642 ;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
643
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
644 boost::program_options::options_description volumeOptions("Description of the imaged volume");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
645 volumeOptions.add_options()
279
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
646 (OPTION_IMAGED_WIDTH, boost::program_options::value<float>(),
289
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
647 "Width of the specimen (in mm), in the coordinate system of the glass slide, defaults to 15mm if missing")
279
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
648 (OPTION_IMAGED_HEIGHT, boost::program_options::value<float>(),
289
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
649 "Height of the specimen (in mm), in the coordinate system of the glass slide, defaults to 15mm if missing")
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
650 (OPTION_IMAGED_DEPTH, boost::program_options::value<float>()->default_value(1),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
651 "Depth of the specimen (in mm)")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
652 (OPTION_OFFSET_X, boost::program_options::value<float>()->default_value(20),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
653 "X offset the specimen, wrt. slide coordinates origin (in mm)")
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
654 (OPTION_OFFSET_Y, boost::program_options::value<float>()->default_value(40),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
655 "Y offset the specimen, wrt. slide coordinates origin (in mm)")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
656 ;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
657
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
658 boost::program_options::options_description restOptions
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
659 ("HTTP/HTTPS client configuration to access the Orthanc REST API");
125
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
660 OrthancWSI::ApplicationToolbox::AddRestApiOptions(restOptions);
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
661
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
662 boost::program_options::options_description advancedOptions("Advanced options");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
663 advancedOptions.add_options()
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
664 (OPTION_OPTICAL_PATH, boost::program_options::value<std::string>()->default_value("brightfield"),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
665 "Optical path to be automatically added to the DICOM dataset (\"none\" or \"brightfield\")")
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
666 (OPTION_ICC_PROFILE, boost::program_options::value<std::string>(),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
667 "Path to the ICC profile to be included. If empty, a default sRGB profile will be added.")
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
668 (OPTION_SAFETY, boost::program_options::value<bool>()->default_value(true),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
669 "Whether to do additional checks to verify the source image is supported (might slow down) (Boolean)")
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
670 (OPTION_LOWER_LEVELS, boost::program_options::value<int>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
671 "Number of pyramid levels up to which multithreading "
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
672 "should be applied (only for performance/memory tuning)")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
673 ;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
674
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
675 boost::program_options::options_description hidden;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
676 hidden.add_options()
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
677 (OPTION_INPUT, boost::program_options::value<std::string>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
678 "Input file");
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
679 ;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
680
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
681 boost::program_options::options_description allWithoutHidden;
125
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
682 allWithoutHidden
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
683 .add(generic)
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
684 .add(source)
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
685 .add(cytomine)
125
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
686 .add(pyramid)
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
687 .add(target)
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
688 .add(volumeOptions)
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
689 .add(restOptions)
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
690 .add(advancedOptions);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
691
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
692 boost::program_options::options_description all = allWithoutHidden;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
693 all.add(hidden);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
694
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
695 boost::program_options::positional_options_description positional;
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
696 positional.add(OPTION_INPUT, 1);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
697
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
698 boost::program_options::variables_map options;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
699 bool error = false;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
700
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
701 try
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
702 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
703 boost::program_options::store(boost::program_options::command_line_parser(argc, argv).
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
704 options(all).positional(positional).run(), options);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
705 boost::program_options::notify(options);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
706 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
707 catch (boost::program_options::error& e)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
708 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
709 LOG(ERROR) << "Error while parsing the command-line arguments: " << e.what();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
710 error = true;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
711 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
712
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
713 if (!error &&
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
714 options.count(OPTION_SAMPLE_DATASET))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
715 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
716 std::string sample;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
717 Orthanc::EmbeddedResources::GetFileResource(sample, Orthanc::EmbeddedResources::SAMPLE_DATASET);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
718
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
719 std::cout << std::endl << sample << std::endl;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
720
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
721 return false;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
722 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
723
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
724 // New in release 1.1
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
725 if (options.count(OPTION_CYTOMINE_URL) ||
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
726 options.count(OPTION_CYTOMINE_PUBLIC_KEY) ||
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
727 options.count(OPTION_CYTOMINE_PRIVATE_KEY) ||
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
728 options.count(OPTION_CYTOMINE_IMAGE_INSTANCE_ID))
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
729 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
730 if (!options.count(OPTION_CYTOMINE_URL))
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
731 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
732 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
733 "URL to the Cytomine server is missing");
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
734 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
735
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
736 if (!options.count(OPTION_CYTOMINE_PUBLIC_KEY))
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
737 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
738 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
739 "Public key for the Cytomine server is missing");
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
740 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
741
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
742 if (!options.count(OPTION_CYTOMINE_PRIVATE_KEY))
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
743 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
744 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
745 "Private key for the Cytomine server is missing");
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
746 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
747
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
748 if (!options.count(OPTION_CYTOMINE_IMAGE_INSTANCE_ID))
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
749 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
750 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
751 "The Image Instance ID from the Cytomine server is missing");
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
752 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
753
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
754 if (!options.count(OPTION_CYTOMINE_COMPRESSION))
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
755 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
756 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
757 "The tile compression scheme for Cytomine is missing");
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
758 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
759
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
760 const std::string s = options[OPTION_CYTOMINE_COMPRESSION].as<std::string>();
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
761
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
762 OrthancWSI::ImageCompression compression;
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
763 if (s == "jpeg")
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
764 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
765 compression = OrthancWSI::ImageCompression_Jpeg;
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
766 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
767 else if (s == "png")
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
768 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
769 compression = OrthancWSI::ImageCompression_Png;
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
770 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
771 else
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
772 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
773 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
774 "The tile compression scheme must be \"jpeg\" or \"png\", found: " + s);
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
775 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
776
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
777 parameters.SetCytomineSource(options[OPTION_CYTOMINE_URL].as<std::string>(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
778 options[OPTION_CYTOMINE_PUBLIC_KEY].as<std::string>(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
779 options[OPTION_CYTOMINE_PRIVATE_KEY].as<std::string>(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
780 options[OPTION_CYTOMINE_IMAGE_INSTANCE_ID].as<int>(), compression);
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
781 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
782
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
783 if (!error &&
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
784 options.count(OPTION_HELP) == 0 &&
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
785 options.count(OPTION_VERSION) == 0 &&
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
786 options.count(OPTION_INPUT) != 1 &&
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
787 !parameters.IsCytomineSource())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
788 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
789 LOG(ERROR) << "No input file was specified";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
790 error = true;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
791 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
792
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
793 if (error || options.count(OPTION_HELP))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
794 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
795 std::cout << std::endl
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
796 << "Usage: " << argv[0] << " [OPTION]... [INPUT]"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
797 << std::endl
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
798 << "Orthanc, lightweight, RESTful DICOM server for healthcare and medical research."
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
799 << std::endl << std::endl
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
800 << "Create a DICOM file from a digital pathology image."
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
801 << std::endl;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
802
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
803 std::cout << allWithoutHidden << "\n";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
804
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
805 if (error)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
806 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
807 exitStatus = -1;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
808 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
809
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
810 return false;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
811 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
812
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
813 if (options.count(OPTION_VERSION))
8
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
814 {
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
815 OrthancWSI::ApplicationToolbox::PrintVersion(argv[0]);
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
816 return false;
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
817 }
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
818
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
819 if (options.count(OPTION_VERBOSE))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
820 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
821 Orthanc::Logging::EnableInfoLevel(true);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
822 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
823
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
824 if (options.count(OPTION_OPENSLIDE))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
825 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
826 OrthancWSI::OpenSlideLibrary::Initialize(options[OPTION_OPENSLIDE].as<std::string>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
827 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
828
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
829 if (options.count(OPTION_PYRAMID) &&
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
830 options[OPTION_PYRAMID].as<bool>())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
831 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
832 parameters.SetReconstructPyramid(true);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
833 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
834
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
835 if (options.count(OPTION_SMOOTH) &&
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
836 options[OPTION_SMOOTH].as<bool>())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
837 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
838 parameters.SetSmoothEnabled(true);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
839 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
840
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
841 if (options.count(OPTION_SAFETY) &&
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
842 options[OPTION_SAFETY].as<bool>())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
843 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
844 parameters.SetSafetyCheck(true);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
845 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
846
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
847 if (options.count(OPTION_REENCODE) &&
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
848 options[OPTION_REENCODE].as<bool>())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
849 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
850 parameters.SetForceReencode(true);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
851 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
852
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
853 if (options.count(OPTION_REPAINT) &&
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
854 options[OPTION_REPAINT].as<bool>())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
855 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
856 parameters.SetRepaintBackground(true);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
857 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
858
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
859 if (options.count(OPTION_TILE_WIDTH) ||
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
860 options.count(OPTION_TILE_HEIGHT))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
861 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
862 int w = 0;
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
863 if (options.count(OPTION_TILE_WIDTH))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
864 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
865 w = options[OPTION_TILE_WIDTH].as<int>();
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
866 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
867
145
0b7e7be7d655 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 140
diff changeset
868 int h = 0;
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
869 if (options.count(OPTION_TILE_HEIGHT))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
870 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
871 h = options[OPTION_TILE_HEIGHT].as<int>();
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
872 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
873
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
874 if (w < 0 || h < 0)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
875 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
876 LOG(ERROR) << "Negative target tile size specified: " << w << "x" << h;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
877 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
878 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
879
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
880 parameters.SetTargetTileSize(w, h);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
881 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
882
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
883 if (!parameters.IsCytomineSource())
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
884 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
885 parameters.SetInputFile(options[OPTION_INPUT].as<std::string>());
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
886 }
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
887
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
888 if (options.count(OPTION_COLOR))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
889 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
890 uint8_t r, g, b;
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
891 OrthancWSI::ApplicationToolbox::ParseColor(r, g, b, options[OPTION_COLOR].as<std::string>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
892 parameters.SetBackgroundColor(r, g, b);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
893 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
894
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
895 if (options.count(OPTION_COMPRESSION))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
896 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
897 std::string s = options[OPTION_COMPRESSION].as<std::string>();
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
898 if (s == "none")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
899 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
900 parameters.SetTargetCompression(OrthancWSI::ImageCompression_None);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
901 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
902 else if (s == "jpeg")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
903 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
904 parameters.SetTargetCompression(OrthancWSI::ImageCompression_Jpeg);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
905 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
906 else if (s == "jpeg2000")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
907 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
908 parameters.SetTargetCompression(OrthancWSI::ImageCompression_Jpeg2000);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
909 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
910 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
911 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
912 LOG(ERROR) << "Unknown image compression for the target image: " << s;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
913 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
914 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
915 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
916
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
917 if (options.count(OPTION_JPEG_QUALITY))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
918 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
919 parameters.SetJpegQuality(options[OPTION_JPEG_QUALITY].as<int>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
920 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
921
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
922 if (options.count(OPTION_LEVELS))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
923 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
924 parameters.SetPyramidLevelsCount(options[OPTION_LEVELS].as<int>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
925 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
926
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
927 if (options.count(OPTION_LOWER_LEVELS))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
928 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
929 parameters.SetPyramidLowerLevelsCount(options[OPTION_LOWER_LEVELS].as<int>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
930 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
931
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
932 if (options.count(OPTION_THREADS))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
933 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
934 parameters.SetThreadsCount(options[OPTION_THREADS].as<int>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
935 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
936
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
937 if (options.count(OPTION_MAX_SIZE))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
938 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
939 parameters.SetDicomMaxFileSize(options[OPTION_MAX_SIZE].as<int>() * 1024 * 1024);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
940 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
941
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
942 if (options.count(OPTION_FOLDER))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
943 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
944 parameters.SetTargetFolder(options[OPTION_FOLDER].as<std::string>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
945 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
946
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
947 if (options.count(OPTION_FOLDER_PATTERN))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
948 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
949 parameters.SetTargetFolderPattern(options[OPTION_FOLDER_PATTERN].as<std::string>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
950 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
951
125
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
952 OrthancWSI::ApplicationToolbox::SetupRestApi(parameters.GetOrthancParameters(), options);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
953
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
954 if (options.count(OPTION_DATASET))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
955 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
956 parameters.SetDatasetPath(options[OPTION_DATASET].as<std::string>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
957 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
958
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
959 if (options.count(OPTION_IMAGED_WIDTH))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
960 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
961 volume.SetWidth(options[OPTION_IMAGED_WIDTH].as<float>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
962 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
963
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
964 if (options.count(OPTION_IMAGED_HEIGHT))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
965 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
966 volume.SetHeight(options[OPTION_IMAGED_HEIGHT].as<float>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
967 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
968
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
969 if (options.count(OPTION_IMAGED_DEPTH))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
970 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
971 volume.SetDepth(options[OPTION_IMAGED_DEPTH].as<float>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
972 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
973
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
974 if (options.count(OPTION_OFFSET_X))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
975 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
976 volume.SetOffsetX(options[OPTION_OFFSET_X].as<float>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
977 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
978
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
979 if (options.count(OPTION_OFFSET_Y))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
980 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
981 volume.SetOffsetY(options[OPTION_OFFSET_Y].as<float>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
982 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
983
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
984 if (options.count(OPTION_OPTICAL_PATH))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
985 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
986 std::string s = options[OPTION_OPTICAL_PATH].as<std::string>();
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
987 if (s == "none")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
988 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
989 parameters.SetOpticalPath(OrthancWSI::OpticalPath_None);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
990 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
991 else if (s == "brightfield")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
992 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
993 parameters.SetOpticalPath(OrthancWSI::OpticalPath_Brightfield);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
994 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
995 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
996 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
997 LOG(ERROR) << "Unknown optical path definition: " << s;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
998 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
999 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1000 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1001
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
1002 if (options.count(OPTION_ICC_PROFILE))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1003 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
1004 parameters.SetIccProfilePath(options[OPTION_ICC_PROFILE].as<std::string>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1005 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1006
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1007 return true;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1008 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1009
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1010
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
1011
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1012 OrthancWSI::ITiledPyramid* OpenInputPyramid(OrthancWSI::ImageCompression& sourceCompression,
279
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1013 OrthancWSI::ImagedVolumeParameters& volume,
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1014 const std::string& path,
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1015 const OrthancWSI::DicomizerParameters& parameters)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1016 {
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1017 if (parameters.IsCytomineSource())
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1018 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1019 // New in release 1.1
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1020 LOG(WARNING) << "Importing Image Instance " << parameters.GetCytomineImageInstanceId()
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1021 << " from Cytomine server: " << parameters.GetCytomineServer().GetUrl();
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1022 sourceCompression = OrthancWSI::ImageCompression_Unknown;
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1023 return new OrthancWSI::CytomineImage(parameters.GetCytomineServer(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1024 parameters.GetCytominePublicKey(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1025 parameters.GetCytominePrivateKey(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1026 parameters.GetCytomineImageInstanceId(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1027 parameters.GetTargetTileWidth(512),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1028 parameters.GetTargetTileHeight(512));
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1029 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1030
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1031 LOG(WARNING) << "The input image is: " << path;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1032
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1033 OrthancWSI::ImageCompression format = OrthancWSI::DetectFormatFromFile(path);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1034 LOG(WARNING) << "File format of the input image: " << EnumerationToString(format);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1035
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1036 switch (format)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1037 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1038 case OrthancWSI::ImageCompression_Png:
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1039 {
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1040 sourceCompression = OrthancWSI::ImageCompression_Unknown;
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1041 return new OrthancWSI::TiledPngImage(path,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1042 parameters.GetTargetTileWidth(512),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1043 parameters.GetTargetTileHeight(512));
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1044 }
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1045
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1046 case OrthancWSI::ImageCompression_Jpeg:
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1047 {
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1048 sourceCompression = OrthancWSI::ImageCompression_Unknown;
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1049 return new OrthancWSI::TiledJpegImage(path,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1050 parameters.GetTargetTileWidth(512),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1051 parameters.GetTargetTileHeight(512));
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1052 }
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1053
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1054 case OrthancWSI::ImageCompression_Tiff:
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1055 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1056 try
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1057 {
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1058 std::unique_ptr<OrthancWSI::HierarchicalTiff> tiff(new OrthancWSI::HierarchicalTiff(path));
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1059 sourceCompression = tiff->GetImageCompression();
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1060 return tiff.release();
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1061 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1062 catch (Orthanc::OrthancException&)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1063 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1064 LOG(WARNING) << "This is not a standard hierarchical TIFF file";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1065 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1066 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1067
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1068 default:
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1069 break;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1070 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1071
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1072 try
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1073 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1074 LOG(WARNING) << "Trying to open the input pyramid with OpenSlide";
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1075 sourceCompression = OrthancWSI::ImageCompression_Unknown;
279
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1076
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1077 std::unique_ptr<OrthancWSI::OpenSlidePyramid> openslide(
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1078 new OrthancWSI::OpenSlidePyramid(path, parameters.GetTargetTileWidth(512),
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1079 parameters.GetTargetTileHeight(512)));
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1080
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1081 float volumeWidth, volumeHeight;
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1082 if (openslide->LookupImagedVolumeSize(volumeWidth, volumeHeight))
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1083 {
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1084 if (!volume.HasWidth())
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1085 {
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1086 volume.SetWidth(volumeWidth);
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
1087 LOG(WARNING) << "Width of the imaged volume extracted using OpenSlide: " << volumeWidth << "mm";
279
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1088 }
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1089
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1090 if (!volume.HasHeight())
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1091 {
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1092 volume.SetHeight(volumeHeight);
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
1093 LOG(WARNING) << "Height of the imaged volume extracted using OpenSlide: " << volumeHeight << "mm";
279
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1094 }
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1095 }
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1096
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1097 return openslide.release();
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1098 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1099 catch (Orthanc::OrthancException&)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1100 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1101 LOG(ERROR) << "This file is not supported by OpenSlide";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1102 return NULL;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1103 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1104 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1105
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1106
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1107 int main(int argc, char* argv[])
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1108 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1109 OrthancWSI::ApplicationToolbox::GlobalInitialize();
93
14146ecd1688 Display version of the framework in the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 84
diff changeset
1110 OrthancWSI::ApplicationToolbox::ShowVersionInLog(argv[0]);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1111
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1112 int exitStatus = 0;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1113
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1114 try
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1115 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1116 OrthancWSI::DicomizerParameters parameters;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1117 OrthancWSI::ImagedVolumeParameters volume;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1118
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1119 if (ParseParameters(exitStatus, parameters, volume, argc, argv))
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1120 {
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1121 OrthancWSI::ImageCompression sourceCompression;
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1122 std::unique_ptr<OrthancWSI::ITiledPyramid> source;
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1123
279
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1124 source.reset(OpenInputPyramid(sourceCompression, volume, parameters.GetInputFile(), parameters));
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1125 if (source.get() == NULL)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1126 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1127 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1128 }
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1129
289
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1130 // In the 2 lines below, remember to switch X/Y when going from physical to pixel coordinates!
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1131 float pixelSpacingX = volume.GetWidth() / static_cast<float>(source->GetLevelHeight(0));
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1132 float pixelSpacingY = volume.GetHeight() / static_cast<float>(source->GetLevelWidth(0));
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1133 if (std::abs(pixelSpacingX - pixelSpacingY) >= 100.0f * std::numeric_limits<float>::epsilon())
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1134 {
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1135 LOG(WARNING) << "Your pixel spacing is different along the X and Y axes, make sure that "
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1136 << "you have not inversed the --" << OPTION_IMAGED_WIDTH << " and the --"
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1137 << OPTION_IMAGED_HEIGHT << " options: " << pixelSpacingX << " vs. " << pixelSpacingY;
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1138 }
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1139
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1140 LOG(WARNING) << "Compression of the individual source tiles: " << OrthancWSI::EnumerationToString(sourceCompression);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1141
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1142 // Create the shared DICOM tags
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1143 std::unique_ptr<DcmDataset> dataset(ParseDataset(parameters.GetDatasetPath()));
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1144 EnrichDataset(*dataset, *source, sourceCompression, parameters, volume);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1145
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1146 std::unique_ptr<OrthancWSI::IFileTarget> output(parameters.CreateTarget());
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
1147 Recompress(*output, *source, *dataset, parameters, volume, sourceCompression);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1148 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1149 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1150 catch (Orthanc::OrthancException& e)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1151 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1152 LOG(ERROR) << "Terminating on exception: " << e.What();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1153 exitStatus = -1;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1154 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1155
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1156 OrthancWSI::ApplicationToolbox::GlobalFinalize();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1157
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1158 return exitStatus;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1159 }