annotate Applications/Dicomizer.cpp @ 308:13721d3da291

cont
author Sebastien Jodogne <s.jodogne@gmail.com>
date Sat, 27 Jan 2024 14:40:32 +0100
parents fa734a851551
children 7020852a8fa9
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"
298
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
32 #include "../Framework/Inputs/PlainTiff.h"
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 #include "../Framework/Inputs/TiledJpegImage.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 #include "../Framework/Inputs/TiledPngImage.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35 #include "../Framework/Inputs/TiledPyramidStatistics.h"
151
fb8d4cd2f618 fix applications
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 145
diff changeset
36 #include "../Framework/MultiThreading/BagOfTasksProcessor.h"
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 #include "../Framework/Outputs/DicomPyramidWriter.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38 #include "../Framework/Outputs/TruncatedPyramidWriter.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
40 #include <Compatibility.h> // For std::unique_ptr
192
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
41 #include <DicomParsing/FromDcmtkBridge.h>
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
42 #include <Logging.h>
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
43 #include <OrthancException.h>
213
2a4e1f7de5ab remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 199
diff changeset
44 #include <Toolbox.h>
192
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 177
diff changeset
45 #include <SystemToolbox.h>
59
7a3853d51c45 Move "Framework/Orthanc/" as "Resources/Orthanc/"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 57
diff changeset
46
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 #include "ApplicationToolbox.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49 #include <EmbeddedResources.h>
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 #include <dcmtk/dcmdata/dcdeftag.h>
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52 #include <dcmtk/dcmdata/dcuid.h>
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
53 #include <dcmtk/dcmdata/dcvrobow.h>
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54 #include <dcmtk/dcmdata/dcvrat.h>
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
57 static const char* OPTION_COLOR = "color";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
58 static const char* OPTION_COMPRESSION = "compression";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
59 static const char* OPTION_DATASET = "dataset";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
60 static const char* OPTION_FOLDER = "folder";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
61 static const char* OPTION_FOLDER_PATTERN = "folder-pattern";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
62 static const char* OPTION_HELP = "help";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
63 static const char* OPTION_ICC_PROFILE = "icc-profile";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
64 static const char* OPTION_IMAGED_DEPTH = "imaged-depth";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
65 static const char* OPTION_IMAGED_HEIGHT = "imaged-height";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
66 static const char* OPTION_IMAGED_WIDTH = "imaged-width";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
67 static const char* OPTION_INPUT = "input";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
68 static const char* OPTION_JPEG_QUALITY = "jpeg-quality";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
69 static const char* OPTION_LEVELS = "levels";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
70 static const char* OPTION_LOWER_LEVELS = "lower-levels";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
71 static const char* OPTION_MAX_SIZE = "max-size";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
72 static const char* OPTION_OFFSET_X = "offset-x";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
73 static const char* OPTION_OFFSET_Y = "offset-y";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
74 static const char* OPTION_OPENSLIDE = "openslide";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
75 static const char* OPTION_OPTICAL_PATH = "optical-path";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
76 static const char* OPTION_PYRAMID = "pyramid";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
77 static const char* OPTION_REENCODE = "reencode";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
78 static const char* OPTION_REPAINT = "repaint";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
79 static const char* OPTION_SAFETY = "safety";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
80 static const char* OPTION_SAMPLE_DATASET = "sample-dataset";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
81 static const char* OPTION_SMOOTH = "smooth";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
82 static const char* OPTION_THREADS = "threads";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
83 static const char* OPTION_TILE_HEIGHT = "tile-height";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
84 static const char* OPTION_TILE_WIDTH = "tile-width";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
85 static const char* OPTION_VERBOSE = "verbose";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
86 static const char* OPTION_VERSION = "version";
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
87
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
88 // New in release 1.1
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
89 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
90 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
91 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
92 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
93 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
94
298
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
95 // New in release 2.1
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
96 static const char* OPTION_TIFF_ALIGNMENT = "tiff-alignment";
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
97
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
98
226
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
99 #if ORTHANC_FRAMEWORK_VERSION_IS_ABOVE(1, 9, 0)
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
100
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
101 bool ReadJsonWithoutComments(Json::Value& target,
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
102 const std::string& source)
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
103 {
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
104 return Orthanc::Toolbox::ReadJsonWithoutComments(target, source);
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
105 }
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
106
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
107 #else
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
108
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
109 // Backward compatibility with Orthanc framework <= 1.8.2
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
110 #include <json/reader.h>
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
111
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
112 bool ReadJsonWithoutComments(Json::Value& target,
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
113 const std::string& source)
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
114 {
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
115 Json::Reader reader;
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
116 return reader.parse(source, target, false);
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
117 }
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
118 #endif
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
119
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
120
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
121 static void TranscodePyramid(OrthancWSI::PyramidWriterBase& target,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
122 OrthancWSI::ITiledPyramid& source,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
123 const OrthancWSI::DicomizerParameters& parameters)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
124 {
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
125 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
126
236
b0ee417b667a migrating new definitions in namespace Orthanc to namespace OrthancWSI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
127 OrthancWSI::BagOfTasks tasks;
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
128
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
129 for (unsigned int i = 0; i < source.GetLevelCount(); 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 LOG(WARNING) << "Creating level " << i << " of size "
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
132 << source.GetLevelWidth(i) << "x" << source.GetLevelHeight(i);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
133 target.AddLevel(source.GetLevelWidth(i), source.GetLevelHeight(i));
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 OrthancWSI::TranscodeTileCommand::PrepareBagOfTasks(tasks, target, source, parameters);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
137 OrthancWSI::ApplicationToolbox::Execute(tasks, parameters.GetThreadsCount());
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
138 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
139
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
140
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
141 static void ReconstructPyramid(OrthancWSI::PyramidWriterBase& target,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
142 OrthancWSI::ITiledPyramid& source,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
143 const OrthancWSI::DicomizerParameters& parameters)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
144 {
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
145 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
146
236
b0ee417b667a migrating new definitions in namespace Orthanc to namespace OrthancWSI
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
147 OrthancWSI::BagOfTasks tasks;
0
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 unsigned int levelsCount = parameters.GetPyramidLevelsCount(target, source);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
150 LOG(WARNING) << "The target pyramid will have " << levelsCount << " levels";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
151 assert(levelsCount >= 1);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
152
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
153 for (unsigned int i = 0; i < levelsCount; i++)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
154 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
155 unsigned int width = OrthancWSI::CeilingDivision(source.GetLevelWidth(0), 1 << i);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
156 unsigned int height = OrthancWSI::CeilingDivision(source.GetLevelHeight(0), 1 << i);
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 LOG(WARNING) << "Creating level " << i << " of size " << width << "x" << height;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
159 target.AddLevel(width, height);
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
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
162 unsigned int lowerLevelsCount = parameters.GetPyramidLowerLevelsCount(target, source);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
163 if (lowerLevelsCount > levelsCount)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
164 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
165 LOG(WARNING) << "The number of lower levels (" << lowerLevelsCount
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
166 << ") exceeds the number of levels (" << levelsCount
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
167 << "), cropping it";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
168 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
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
171 assert(lowerLevelsCount <= levelsCount);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
172 if (lowerLevelsCount != levelsCount)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
173 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
174 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
175 OrthancWSI::TruncatedPyramidWriter truncated(target, lowerLevelsCount, source.GetPhotometricInterpretation());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
176 OrthancWSI::ReconstructPyramidCommand::PrepareBagOfTasks
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
177 (tasks, truncated, source, lowerLevelsCount + 1, 0, parameters);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
178 OrthancWSI::ApplicationToolbox::Execute(tasks, parameters.GetThreadsCount());
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
179
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
180 assert(tasks.GetSize() == 0);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
181
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
182 const unsigned int upperLevelsCount = levelsCount - lowerLevelsCount;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
183 LOG(WARNING) << "Constructing the " << upperLevelsCount << " upper levels of the pyramid";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
184 OrthancWSI::ReconstructPyramidCommand::PrepareBagOfTasks
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
185 (tasks, target, truncated.GetUpperLevel(),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
186 upperLevelsCount, lowerLevelsCount, parameters);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
187 OrthancWSI::ApplicationToolbox::Execute(tasks, parameters.GetThreadsCount());
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
188 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
189 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
190 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
191 LOG(WARNING) << "Constructing the pyramid";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
192 OrthancWSI::ReconstructPyramidCommand::PrepareBagOfTasks
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
193 (tasks, target, source, levelsCount, 0, parameters);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
194 OrthancWSI::ApplicationToolbox::Execute(tasks, parameters.GetThreadsCount());
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
195 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
196 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
197
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
198
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
199 static void Recompress(OrthancWSI::IFileTarget& output,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
200 OrthancWSI::ITiledPyramid& source,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
201 const DcmDataset& dataset,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
202 const OrthancWSI::DicomizerParameters& parameters,
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
203 const OrthancWSI::ImagedVolumeParameters& volume,
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
204 OrthancWSI::ImageCompression sourceCompression)
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
205 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
206 OrthancWSI::TiledPyramidStatistics stats(source);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
207
217
20bc074ec19a Viewer can display DICOM pyramids whose tile sizes vary across levels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
208 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
209 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
210 LOG(WARNING) << "Pixel format: " << Orthanc::EnumerationToString(source.GetPixelFormat());
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
211 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
212 LOG(WARNING) << "Source compression: " << EnumerationToString(sourceCompression);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
213 LOG(WARNING) << "Smoothing is " << (parameters.IsSmoothEnabled() ? "enabled" : "disabled");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
214
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
215 if (parameters.IsRepaintBackground())
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
216 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
217 LOG(WARNING) << "Repainting the background with color: ("
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
218 << static_cast<int>(parameters.GetBackgroundColorRed()) << ","
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
219 << static_cast<int>(parameters.GetBackgroundColorGreen()) << ","
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
220 << static_cast<int>(parameters.GetBackgroundColorBlue()) << ")";
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 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
223 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
224 LOG(WARNING) << "No repainting of the background";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
225 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
226
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
227 Orthanc::PhotometricInterpretation targetPhotometric;
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
228 bool transcoding;
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 if (parameters.IsForceReencode() ||
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
231 parameters.IsReconstructPyramid() ||
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
232 sourceCompression != parameters.GetTargetCompression())
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
233 {
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
234 // 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
235 transcoding = false;
171
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
236
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
237 if (source.GetPixelFormat() == Orthanc::PixelFormat_Grayscale8)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
238 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
239 targetPhotometric = source.GetPhotometricInterpretation();
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
240 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
241 else
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
242 {
171
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
243 switch (parameters.GetTargetCompression())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
244 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
245 case OrthancWSI::ImageCompression_Jpeg:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
246 case OrthancWSI::ImageCompression_Jpeg2000:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
247 targetPhotometric = Orthanc::PhotometricInterpretation_YBRFull422;
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 case OrthancWSI::ImageCompression_None:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
251 targetPhotometric = Orthanc::PhotometricInterpretation_RGB;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
252 break;
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
253
171
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
254 default:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
255 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 169
diff changeset
256 }
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
257 }
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
258 }
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
259 else
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 // Transcoding: The tiles are copied (no re-encoding)
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
262 transcoding = true;
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
263 targetPhotometric = source.GetPhotometricInterpretation();
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
264 }
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
265
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
266 OrthancWSI::DicomPyramidWriter target(output, dataset,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
267 source.GetPixelFormat(),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
268 parameters.GetTargetCompression(),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
269 parameters.GetTargetTileWidth(source),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
270 parameters.GetTargetTileHeight(source),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
271 parameters.GetDicomMaxFileSize(),
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
272 volume, targetPhotometric);
29
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 26
diff changeset
273 target.SetJpegQuality(parameters.GetJpegQuality());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
274
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
275 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
276 LOG(WARNING) << "Target photometric interpretation: " << Orthanc::EnumerationToString(targetPhotometric);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
277
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
278 if (!transcoding &&
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
279 target.GetImageCompression() == OrthancWSI::ImageCompression_Jpeg)
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
280 {
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
281 LOG(WARNING) << "Target compression: Jpeg with quality "
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
282 << static_cast<int>(target.GetJpegQuality());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
283 target.SetJpegQuality(target.GetJpegQuality());
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
284 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
285 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
286 {
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
287 LOG(WARNING) << "Target compression: "
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
288 << OrthancWSI::EnumerationToString(target.GetImageCompression());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
289 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
290
217
20bc074ec19a Viewer can display DICOM pyramids whose tile sizes vary across levels
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 214
diff changeset
291 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
292 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
293 stats.GetTileHeight(0) % target.GetTileHeight() != 0)
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
294 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
295 LOG(ERROR) << "When resampling the tile size, "
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
296 << "it must be a integer divisor of the original tile size";
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
297 throw Orthanc::OrthancException(Orthanc::ErrorCode_IncompatibleImageSize);
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
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
300 if (target.GetTileWidth() <= 16 ||
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
301 target.GetTileHeight() <= 16)
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 LOG(ERROR) << "Tiles are too small (16 pixels minimum): "
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
304 << target.GetTileWidth() << "x" << target.GetTileHeight();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
305 throw Orthanc::OrthancException(Orthanc::ErrorCode_IncompatibleImageSize);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
306 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
307
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
308 if (transcoding)
0
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 TranscodePyramid(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 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
313 {
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
314 ReconstructPyramid(target, stats, parameters);
0
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 target.Flush();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
318 }
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
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 static DcmDataset* ParseDataset(const std::string& path)
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::Value json;
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 if (path.empty())
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 json = Json::objectValue; // Empty dataset => TODO EMBED
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
329 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
330 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
331 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
332 std::string content;
43
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 31
diff changeset
333 Orthanc::SystemToolbox::ReadFile(content, path);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
334
226
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
335 if (!ReadJsonWithoutComments(json, content))
0
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 LOG(ERROR) << "Cannot parse the JSON file in: " << path;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
338 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
339 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
340 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
341
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
342 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
343 "" /* no private tag, thus no private creator */));
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
344 if (dataset.get() == NULL)
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 LOG(ERROR) << "Cannot convert to JSON file to a DICOM dataset: " << path;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
347 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
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
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
350 // VL Whole Slide Microscopy Image IOD
271
45e3b5adf4ae opened issue 2379 in OpenSeadragon
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 265
diff changeset
351 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
352
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
353 // Slide Microscopy
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
354 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_Modality, "SM");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
355
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
356 // Patient orientation makes no sense in whole-slide images
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
357 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_PatientOrientation, "");
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 // Some basic coordinate information
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
360 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_VolumetricProperties, "VOLUME");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
361 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_ImageOrientationSlide, "0\\-1\\0\\-1\\0\\0");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
362
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
363 std::string date, time;
130
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 129
diff changeset
364 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
365 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_StudyDate, date);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
366 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_StudyTime, time);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
367 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_SeriesDate, date);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
368 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_SeriesTime, time);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
369 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_ContentDate, date);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
370 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_ContentTime, time);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
371 OrthancWSI::DicomToolbox::SetStringTag(*dataset, DCM_AcquisitionDateTime, date + time);
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 return dataset.release();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
374 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
375
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
376
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
377
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
378 static void SetupDimension(DcmDataset& dataset,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
379 const std::string& opticalPathId,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
380 const OrthancWSI::ITiledPyramid& source,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
381 const OrthancWSI::ImagedVolumeParameters& volume)
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 // Extract the identifier of the Dimension Organization, if provided
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
384 std::string organization;
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
385 DcmItem* previous = OrthancWSI::DicomToolbox::ExtractSingleSequenceItem(dataset, DCM_DimensionOrganizationSequence);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
386
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
387 if (previous != NULL &&
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
388 previous->tagExists(DCM_DimensionOrganizationUID))
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
389 {
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
390 organization = OrthancWSI::DicomToolbox::GetStringTag(*previous, DCM_DimensionOrganizationUID);
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
391 }
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
392 else
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
393 {
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
394 // No Dimension Organization provided: Generate an unique identifier
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
395 organization = Orthanc::FromDcmtkBridge::GenerateUniqueIdentifier(Orthanc::ResourceType_Instance);
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
396 }
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
397
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
398
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
399 {
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
400 // 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
401 std::unique_ptr<DcmItem> item(new DcmItem);
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
402 OrthancWSI::DicomToolbox::SetStringTag(*item, DCM_DimensionOrganizationUID, organization);
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
403
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
404 std::unique_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_DimensionOrganizationSequence));
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
405
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
406 if (!sequence->insert(item.release(), false, false).good() ||
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
407 !dataset.insert(sequence.release(), true /* replace */, false).good())
0
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 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
410 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
411 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
412
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
413
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
414 {
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
415 // 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
416 std::unique_ptr<DcmItem> item(new DcmItem);
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
417 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
418 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
419 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
420
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
421 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
422 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
423 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
424 OrthancWSI::DicomToolbox::SetAttributeTag(*item2, DCM_DimensionIndexPointer, DCM_RowPositionInTotalImagePixelMatrix);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
425
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
426 std::unique_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_DimensionIndexSequence));
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
427
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
428 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
429 !sequence->insert(item2.release(), false, false).good() ||
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
430 !dataset.insert(sequence.release(), true /* replace */, false).good())
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
431 {
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
432 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
433 }
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
434 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
435
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
436
83
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
437 {
0cb3ac4f9159 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
438 // 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
439 std::unique_ptr<DcmItem> item(new DcmItem);
168
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
440
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
441 std::unique_ptr<DcmItem> item3(new DcmItem);
168
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
442 OrthancWSI::DicomToolbox::SetStringTag(*item3, DCM_OpticalPathIdentifier, opticalPathId);
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
443
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
444 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
445 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
446
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
447 if (!sequence3->insert(item3.release(), false, false).good() ||
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
448 !item->insert(sequence3.release(), false, false).good() ||
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
449 !sequence->insert(item.release(), false, false).good() ||
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
450 !dataset.insert(sequence.release(), true /* replace */, false).good())
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
451 {
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
452 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
d3aea0af03e1 attempt to fix issue 139
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 167
diff changeset
453 }
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
454 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
455 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
456
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
457
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
458 static void EnrichDataset(DcmDataset& dataset,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
459 const OrthancWSI::ITiledPyramid& source,
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
460 OrthancWSI::ImageCompression sourceCompression,
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
461 const OrthancWSI::DicomizerParameters& parameters,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
462 const OrthancWSI::ImagedVolumeParameters& volume)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
463 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
464 Orthanc::Encoding encoding = Orthanc::FromDcmtkBridge::DetectEncoding(dataset, Orthanc::Encoding_Latin1);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
465
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
466 if (sourceCompression == OrthancWSI::ImageCompression_Jpeg ||
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
467 parameters.GetTargetCompression() == OrthancWSI::ImageCompression_Jpeg)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
468 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
469 // Takes as estimation a 1:10 compression ratio
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
470 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_LossyImageCompression, "01");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
471 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_LossyImageCompressionRatio, "10");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
472 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_LossyImageCompressionMethod, "ISO_10918_1"); // JPEG Lossy Compression
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 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
475 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
476 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_LossyImageCompression, "00");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
477 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
478
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
479 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
480 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
481 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
482
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
483 std::unique_ptr<DcmItem> origin(new DcmItem);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
484 OrthancWSI::DicomToolbox::SetStringTag(*origin, DCM_XOffsetInSlideCoordinateSystem,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
485 boost::lexical_cast<std::string>(volume.GetOffsetX()));
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
486 OrthancWSI::DicomToolbox::SetStringTag(*origin, DCM_YOffsetInSlideCoordinateSystem,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
487 boost::lexical_cast<std::string>(volume.GetOffsetY()));
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
488
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
489 std::unique_ptr<DcmSequenceOfItems> sequenceOrigin(new DcmSequenceOfItems(DCM_TotalPixelMatrixOriginSequence));
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
490 if (!sequenceOrigin->insert(origin.release(), false, false).good() ||
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
491 !dataset.insert(sequenceOrigin.release(), false, false).good())
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 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
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
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 if (parameters.GetOpticalPath() == OrthancWSI::OpticalPath_Brightfield)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
498 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
499 if (dataset.tagExists(DCM_OpticalPathSequence))
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 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
502 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
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
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
505 std::string brightfield;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
506 Orthanc::EmbeddedResources::GetFileResource(brightfield, Orthanc::EmbeddedResources::BRIGHTFIELD_OPTICAL_PATH);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
507
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
508 Json::Value json;
226
4eefa34657f0 fix build
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
509 if (!ReadJsonWithoutComments(json, brightfield))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
510 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
511 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
512 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
513
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
514 std::unique_ptr<DcmElement> element(Orthanc::FromDcmtkBridge::FromJson(
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
515 Orthanc::DicomTag(DCM_OpticalPathSequence.getGroup(),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
516 DCM_OpticalPathSequence.getElement()),
177
ea62c89b264b fix due to change in the orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 175
diff changeset
517 json, false, encoding,
ea62c89b264b fix due to change in the orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 175
diff changeset
518 "" /* no private tag, thus no private creator */));
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
519 if (!dataset.insert(element.release()).good())
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 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
522 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
523 }
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
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
526 std::string profile;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
527 if (parameters.GetIccProfilePath().empty())
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
528 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
529 Orthanc::EmbeddedResources::GetFileResource(profile, Orthanc::EmbeddedResources::SRGB_ICC_PROFILE);
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 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
532 {
43
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 31
diff changeset
533 Orthanc::SystemToolbox::ReadFile(profile, parameters.GetIccProfilePath());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
534 }
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
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
537 DcmItem* opticalPath = OrthancWSI::DicomToolbox::ExtractSingleSequenceItem(dataset, DCM_OpticalPathSequence);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
538 if (opticalPath == NULL)
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 LOG(ERROR) << "No optical path specified";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
541 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
542 }
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 (!opticalPath->tagExists(DCM_ICCProfile))
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
545 {
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
546 std::unique_ptr<DcmOtherByteOtherWord> icc(new DcmOtherByteOtherWord(DCM_ICCProfile));
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
547
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
548 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
549 !opticalPath->insert(icc.release()).good())
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 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
552 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
553 }
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 const char* opticalPathId = NULL;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
556 if (!opticalPath->findAndGetString(DCM_OpticalPathIdentifier, opticalPathId).good() ||
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
557 opticalPathId == NULL)
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 LOG(ERROR) << "No identifier in the optical path";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
560 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
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 SetupDimension(dataset, opticalPathId, source, volume);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
564 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
565
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
566
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
567 static bool ParseParameters(int& exitStatus,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
568 OrthancWSI::DicomizerParameters& parameters,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
569 OrthancWSI::ImagedVolumeParameters& volume,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
570 int argc,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
571 char* argv[])
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
572 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
573 // Declare the supported parameters
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
574 boost::program_options::options_description generic("Generic options");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
575 generic.add_options()
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
576 (OPTION_HELP, "Display this help and exit")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
577 (OPTION_VERSION, "Output version information and exit")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
578 (OPTION_VERBOSE, "Be verbose in logs")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
579 (OPTION_THREADS,
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
580 boost::program_options::value<int>()->default_value(parameters.GetThreadsCount()),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
581 "Number of processing threads to be used")
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
582 (OPTION_OPENSLIDE, boost::program_options::value<std::string>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
583 "Path to the shared library of OpenSlide "
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
584 "(not necessary if converting from standard hierarchical TIFF)")
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
585 ;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
586
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
587 boost::program_options::options_description source("Options for the source image");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
588 source.add_options()
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
589 (OPTION_DATASET, boost::program_options::value<std::string>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
590 "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
591 (OPTION_SAMPLE_DATASET,
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
592 "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
593 (OPTION_REENCODE, boost::program_options::value<bool>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
594 "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
595 (OPTION_REPAINT, boost::program_options::value<bool>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
596 "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
597 (OPTION_COLOR, boost::program_options::value<std::string>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
598 "Color of the background (e.g. \"255,0,0\")")
298
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
599 (OPTION_TIFF_ALIGNMENT, boost::program_options::value<int>()->default_value(64),
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
600 "Add padding to plain TIFF images to align the width/height to multiples "
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
601 "of this value, very useful to enable deep zoom with IIIF (1 means no padding)")
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
602 ;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
603
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
604 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
605 cytomine.add_options()
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
606 (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
607 "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
608 (OPTION_CYTOMINE_PUBLIC_KEY, boost::program_options::value<std::string>(),
246
793b8f9c9d52 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 244
diff changeset
609 "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
610 (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
611 "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
612 (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
613 "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
614 (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
615 "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
616 "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
617 ;
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
618
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
619 boost::program_options::options_description pyramid("Options to construct the pyramid");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
620 pyramid.add_options()
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
621 (OPTION_PYRAMID, boost::program_options::value<bool>()->default_value(false),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
622 "Reconstruct the full pyramid (slow) (Boolean)")
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
623 (OPTION_SMOOTH, boost::program_options::value<bool>()->default_value(false),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
624 "Apply smoothing when reconstructing the pyramid "
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
625 "(slower, but higher quality) (Boolean)")
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
626 (OPTION_LEVELS, boost::program_options::value<int>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
627 "Number of levels in the target pyramid")
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
628 ;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
629
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
630 boost::program_options::options_description target("Options for the target image");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
631 target.add_options()
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
632 (OPTION_TILE_WIDTH, boost::program_options::value<int>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
633 "Width of the tiles in the target image")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
634 (OPTION_TILE_HEIGHT, boost::program_options::value<int>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
635 "Height of the tiles in the target image")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
636 (OPTION_COMPRESSION, boost::program_options::value<std::string>(),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
637 "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
638 (OPTION_JPEG_QUALITY, boost::program_options::value<int>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
639 "Set quality level for JPEG (0..100)")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
640 (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
641 "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
642 (OPTION_FOLDER, boost::program_options::value<std::string>(),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
643 "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
644 (OPTION_FOLDER_PATTERN,
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
645 boost::program_options::value<std::string>()->default_value("wsi-%06d.dcm"),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
646 "Pattern for the files in the output folder")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
647 ("orthanc", boost::program_options::value<std::string>()->default_value("http://localhost:8042/"),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
648 "URL to the REST API of the target Orthanc server")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
649 ;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
650
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
651 boost::program_options::options_description volumeOptions("Description of the imaged volume");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
652 volumeOptions.add_options()
279
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
653 (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
654 "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
655 (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
656 "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
657 (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
658 "Depth of the specimen (in mm)")
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
659 (OPTION_OFFSET_X, boost::program_options::value<float>()->default_value(20),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
660 "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
661 (OPTION_OFFSET_Y, boost::program_options::value<float>()->default_value(40),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
662 "Y offset the specimen, wrt. slide coordinates origin (in mm)")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
663 ;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
664
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
665 boost::program_options::options_description restOptions
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
666 ("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
667 OrthancWSI::ApplicationToolbox::AddRestApiOptions(restOptions);
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
668
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
669 boost::program_options::options_description advancedOptions("Advanced options");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
670 advancedOptions.add_options()
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
671 (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
672 "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
673 (OPTION_ICC_PROFILE, boost::program_options::value<std::string>(),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
674 "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
675 (OPTION_SAFETY, boost::program_options::value<bool>()->default_value(true),
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
676 "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
677 (OPTION_LOWER_LEVELS, boost::program_options::value<int>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
678 "Number of pyramid levels up to which multithreading "
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
679 "should be applied (only for performance/memory tuning)")
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
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
682 boost::program_options::options_description hidden;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
683 hidden.add_options()
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
684 (OPTION_INPUT, boost::program_options::value<std::string>(),
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
685 "Input file");
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
686 ;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
687
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
688 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
689 allWithoutHidden
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
690 .add(generic)
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
691 .add(source)
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
692 .add(cytomine)
125
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
693 .add(pyramid)
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
694 .add(target)
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
695 .add(volumeOptions)
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
696 .add(restOptions)
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
697 .add(advancedOptions);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
698
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
699 boost::program_options::options_description all = allWithoutHidden;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
700 all.add(hidden);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
701
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
702 boost::program_options::positional_options_description positional;
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
703 positional.add(OPTION_INPUT, 1);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
704
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
705 boost::program_options::variables_map options;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
706 bool error = false;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
707
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
708 try
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
709 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
710 boost::program_options::store(boost::program_options::command_line_parser(argc, argv).
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
711 options(all).positional(positional).run(), options);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
712 boost::program_options::notify(options);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
713 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
714 catch (boost::program_options::error& e)
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 LOG(ERROR) << "Error while parsing the command-line arguments: " << e.what();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
717 error = true;
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
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
720 if (!error &&
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
721 options.count(OPTION_SAMPLE_DATASET))
0
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 std::string sample;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
724 Orthanc::EmbeddedResources::GetFileResource(sample, Orthanc::EmbeddedResources::SAMPLE_DATASET);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
725
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
726 std::cout << std::endl << sample << std::endl;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
727
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
728 return false;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
729 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
730
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
731 // New in release 1.1
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
732 if (options.count(OPTION_CYTOMINE_URL) ||
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
733 options.count(OPTION_CYTOMINE_PUBLIC_KEY) ||
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
734 options.count(OPTION_CYTOMINE_PRIVATE_KEY) ||
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
735 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
736 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
737 if (!options.count(OPTION_CYTOMINE_URL))
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
738 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
739 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
740 "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
741 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
742
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
743 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
744 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
745 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
746 "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
747 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
748
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
749 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
750 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
751 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
752 "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
753 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
754
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
755 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
756 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
757 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
758 "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
759 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
760
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
761 if (!options.count(OPTION_CYTOMINE_COMPRESSION))
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
762 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
763 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
764 "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
765 }
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 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
768
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
769 OrthancWSI::ImageCompression compression;
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
770 if (s == "jpeg")
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
771 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
772 compression = OrthancWSI::ImageCompression_Jpeg;
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
773 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
774 else if (s == "png")
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 compression = OrthancWSI::ImageCompression_Png;
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
777 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
778 else
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
779 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
780 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
781 "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
782 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
783
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
784 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
785 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
786 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
787 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
788 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
789
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
790 if (!error &&
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
791 options.count(OPTION_HELP) == 0 &&
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
792 options.count(OPTION_VERSION) == 0 &&
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
793 options.count(OPTION_INPUT) != 1 &&
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
794 !parameters.IsCytomineSource())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
795 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
796 LOG(ERROR) << "No input file was specified";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
797 error = true;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
798 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
799
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
800 if (error || options.count(OPTION_HELP))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
801 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
802 std::cout << std::endl
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
803 << "Usage: " << argv[0] << " [OPTION]... [INPUT]"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
804 << std::endl
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
805 << "Orthanc, lightweight, RESTful DICOM server for healthcare and medical research."
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
806 << std::endl << std::endl
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
807 << "Create a DICOM file from a digital pathology image."
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
808 << std::endl;
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 std::cout << allWithoutHidden << "\n";
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 if (error)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
813 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
814 exitStatus = -1;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
815 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
816
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
817 return false;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
818 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
819
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
820 if (options.count(OPTION_VERSION))
8
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
821 {
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
822 OrthancWSI::ApplicationToolbox::PrintVersion(argv[0]);
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
823 return false;
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
824 }
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
825
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
826 if (options.count(OPTION_VERBOSE))
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 Orthanc::Logging::EnableInfoLevel(true);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
829 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
830
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
831 if (options.count(OPTION_OPENSLIDE))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
832 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
833 OrthancWSI::OpenSlideLibrary::Initialize(options[OPTION_OPENSLIDE].as<std::string>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
834 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
835
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
836 if (options.count(OPTION_PYRAMID) &&
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
837 options[OPTION_PYRAMID].as<bool>())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
838 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
839 parameters.SetReconstructPyramid(true);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
840 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
841
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
842 if (options.count(OPTION_SMOOTH) &&
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
843 options[OPTION_SMOOTH].as<bool>())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
844 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
845 parameters.SetSmoothEnabled(true);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
846 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
847
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
848 if (options.count(OPTION_SAFETY) &&
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
849 options[OPTION_SAFETY].as<bool>())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
850 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
851 parameters.SetSafetyCheck(true);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
852 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
853
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
854 if (options.count(OPTION_REENCODE) &&
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
855 options[OPTION_REENCODE].as<bool>())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
856 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
857 parameters.SetForceReencode(true);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
858 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
859
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
860 if (options.count(OPTION_REPAINT) &&
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
861 options[OPTION_REPAINT].as<bool>())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
862 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
863 parameters.SetRepaintBackground(true);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
864 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
865
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
866 if (options.count(OPTION_TILE_WIDTH) ||
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
867 options.count(OPTION_TILE_HEIGHT))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
868 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
869 int w = 0;
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
870 if (options.count(OPTION_TILE_WIDTH))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
871 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
872 w = options[OPTION_TILE_WIDTH].as<int>();
0
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
145
0b7e7be7d655 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 140
diff changeset
875 int h = 0;
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
876 if (options.count(OPTION_TILE_HEIGHT))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
877 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
878 h = options[OPTION_TILE_HEIGHT].as<int>();
0
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
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
881 if (w < 0 || h < 0)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
882 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
883 LOG(ERROR) << "Negative target tile size specified: " << w << "x" << h;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
884 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
885 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
886
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
887 parameters.SetTargetTileSize(w, h);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
888 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
889
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
890 if (!parameters.IsCytomineSource())
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
891 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
892 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
893 }
0
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_COLOR))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
896 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
897 uint8_t r, g, b;
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
898 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
899 parameters.SetBackgroundColor(r, g, b);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
900 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
901
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
902 if (options.count(OPTION_COMPRESSION))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
903 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
904 std::string s = options[OPTION_COMPRESSION].as<std::string>();
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
905 if (s == "none")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
906 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
907 parameters.SetTargetCompression(OrthancWSI::ImageCompression_None);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
908 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
909 else if (s == "jpeg")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
910 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
911 parameters.SetTargetCompression(OrthancWSI::ImageCompression_Jpeg);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
912 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
913 else if (s == "jpeg2000")
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 parameters.SetTargetCompression(OrthancWSI::ImageCompression_Jpeg2000);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
916 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
917 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
918 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
919 LOG(ERROR) << "Unknown image compression for the target image: " << s;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
920 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
921 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
922 }
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 if (options.count(OPTION_JPEG_QUALITY))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
925 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
926 parameters.SetJpegQuality(options[OPTION_JPEG_QUALITY].as<int>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
927 }
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 if (options.count(OPTION_LEVELS))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
930 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
931 parameters.SetPyramidLevelsCount(options[OPTION_LEVELS].as<int>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
932 }
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 if (options.count(OPTION_LOWER_LEVELS))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
935 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
936 parameters.SetPyramidLowerLevelsCount(options[OPTION_LOWER_LEVELS].as<int>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
937 }
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 if (options.count(OPTION_THREADS))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
940 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
941 parameters.SetThreadsCount(options[OPTION_THREADS].as<int>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
942 }
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 if (options.count(OPTION_MAX_SIZE))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
945 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
946 parameters.SetDicomMaxFileSize(options[OPTION_MAX_SIZE].as<int>() * 1024 * 1024);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
947 }
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 if (options.count(OPTION_FOLDER))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
950 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
951 parameters.SetTargetFolder(options[OPTION_FOLDER].as<std::string>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
952 }
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_FOLDER_PATTERN))
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.SetTargetFolderPattern(options[OPTION_FOLDER_PATTERN].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
125
7a3f4d580625 SSL is enabled by default for HTTPS transfers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 123
diff changeset
959 OrthancWSI::ApplicationToolbox::SetupRestApi(parameters.GetOrthancParameters(), options);
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 if (options.count(OPTION_DATASET))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
962 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
963 parameters.SetDatasetPath(options[OPTION_DATASET].as<std::string>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
964 }
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 if (options.count(OPTION_IMAGED_WIDTH))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
967 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
968 volume.SetWidth(options[OPTION_IMAGED_WIDTH].as<float>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
969 }
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 if (options.count(OPTION_IMAGED_HEIGHT))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
972 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
973 volume.SetHeight(options[OPTION_IMAGED_HEIGHT].as<float>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
974 }
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 if (options.count(OPTION_IMAGED_DEPTH))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
977 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
978 volume.SetDepth(options[OPTION_IMAGED_DEPTH].as<float>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
979 }
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 if (options.count(OPTION_OFFSET_X))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
982 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
983 volume.SetOffsetX(options[OPTION_OFFSET_X].as<float>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
984 }
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 if (options.count(OPTION_OFFSET_Y))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
987 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
988 volume.SetOffsetY(options[OPTION_OFFSET_Y].as<float>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
989 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
990
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
991 if (options.count(OPTION_OPTICAL_PATH))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
992 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
993 std::string s = options[OPTION_OPTICAL_PATH].as<std::string>();
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
994 if (s == "none")
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
995 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
996 parameters.SetOpticalPath(OrthancWSI::OpticalPath_None);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
997 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
998 else if (s == "brightfield")
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 parameters.SetOpticalPath(OrthancWSI::OpticalPath_Brightfield);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1001 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1002 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1003 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1004 LOG(ERROR) << "Unknown optical path definition: " << s;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1005 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
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 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1008
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
1009 if (options.count(OPTION_ICC_PROFILE))
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1010 {
129
806d1bb56918 cleaning up options in Dicomizer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 125
diff changeset
1011 parameters.SetIccProfilePath(options[OPTION_ICC_PROFILE].as<std::string>());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1012 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1013
298
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1014 if (options.count(OPTION_TIFF_ALIGNMENT))
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1015 {
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1016 int value = options[OPTION_TIFF_ALIGNMENT].as<int>();
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1017 if (value <= 0)
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1018 {
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1019 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1020 "TIFF alignment must be >= 1");
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1021 }
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1022 else
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1023 {
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1024 parameters.SetTiffAlignment(static_cast<unsigned int>(value));
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1025 }
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1026 }
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1027
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1028 return true;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1029 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1030
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1031
167
605247fc8758 Fix issue #144 (OrthancWSIDicomizer PhotometricInterpretation)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 166
diff changeset
1032
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1033 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
1034 OrthancWSI::ImagedVolumeParameters& volume,
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1035 const std::string& path,
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1036 const OrthancWSI::DicomizerParameters& parameters)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1037 {
244
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1038 if (parameters.IsCytomineSource())
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1039 {
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1040 // New in release 1.1
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1041 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
1042 << " from Cytomine server: " << parameters.GetCytomineServer().GetUrl();
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1043 sourceCompression = OrthancWSI::ImageCompression_Unknown;
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1044 return new OrthancWSI::CytomineImage(parameters.GetCytomineServer(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1045 parameters.GetCytominePublicKey(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1046 parameters.GetCytominePrivateKey(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1047 parameters.GetCytomineImageInstanceId(),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1048 parameters.GetTargetTileWidth(512),
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1049 parameters.GetTargetTileHeight(512));
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1050 }
4273518c2009 OrthancWSIDicomizer: Support importing of images from Cytomine
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 242
diff changeset
1051
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1052 LOG(WARNING) << "The input image is: " << path;
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 OrthancWSI::ImageCompression format = OrthancWSI::DetectFormatFromFile(path);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1055 LOG(WARNING) << "File format of the input image: " << EnumerationToString(format);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1056
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1057 switch (format)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1058 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1059 case OrthancWSI::ImageCompression_Png:
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1060 {
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1061 sourceCompression = OrthancWSI::ImageCompression_Unknown;
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1062 return new OrthancWSI::TiledPngImage(path,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1063 parameters.GetTargetTileWidth(512),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1064 parameters.GetTargetTileHeight(512));
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1065 }
0
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 case OrthancWSI::ImageCompression_Jpeg:
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1068 {
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1069 sourceCompression = OrthancWSI::ImageCompression_Unknown;
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1070 return new OrthancWSI::TiledJpegImage(path,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1071 parameters.GetTargetTileWidth(512),
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1072 parameters.GetTargetTileHeight(512));
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1073 }
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1074
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1075 case OrthancWSI::ImageCompression_Tiff:
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1076 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1077 try
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1078 {
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1079 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
1080 sourceCompression = tiff->GetImageCompression();
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1081 return tiff.release();
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1082 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1083 catch (Orthanc::OrthancException&)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1084 {
298
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1085 LOG(WARNING) << "This is not a standard hierarchical TIFF file, fallback to plain TIFF";
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1086 }
298
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1087
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1088 sourceCompression = OrthancWSI::ImageCompression_Unknown;
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1089 return new OrthancWSI::PlainTiff(path,
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1090 parameters.GetTargetTileWidth(512),
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1091 parameters.GetTargetTileHeight(512),
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1092 parameters.GetTiffAlignment(),
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1093 parameters.GetBackgroundColorRed(),
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1094 parameters.GetBackgroundColorGreen(),
fa734a851551 New option: "tiff-alignment" to control deep zoom of plain TIFF over IIIF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 289
diff changeset
1095 parameters.GetBackgroundColorBlue());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1096 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1097
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1098 default:
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1099 break;
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
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1102 try
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 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
1105 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
1106
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1107 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
1108 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
1109 parameters.GetTargetTileHeight(512)));
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1110
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1111 float volumeWidth, volumeHeight;
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1112 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
1113 {
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1114 if (!volume.HasWidth())
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1115 {
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1116 volume.SetWidth(volumeWidth);
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
1117 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
1118 }
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1119
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1120 if (!volume.HasHeight())
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1121 {
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1122 volume.SetHeight(volumeHeight);
281
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 279
diff changeset
1123 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
1124 }
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1125 }
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1126
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1127 return openslide.release();
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1128 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1129 catch (Orthanc::OrthancException&)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1130 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1131 LOG(ERROR) << "This file is not supported by OpenSlide";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1132 return NULL;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1133 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1134 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1135
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1136
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1137 int main(int argc, char* argv[])
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1138 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1139 OrthancWSI::ApplicationToolbox::GlobalInitialize();
93
14146ecd1688 Display version of the framework in the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 84
diff changeset
1140 OrthancWSI::ApplicationToolbox::ShowVersionInLog(argv[0]);
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 int exitStatus = 0;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1143
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1144 try
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1145 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1146 OrthancWSI::DicomizerParameters parameters;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1147 OrthancWSI::ImagedVolumeParameters volume;
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 if (ParseParameters(exitStatus, parameters, volume, argc, argv))
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1150 {
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1151 OrthancWSI::ImageCompression sourceCompression;
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1152 std::unique_ptr<OrthancWSI::ITiledPyramid> source;
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1153
279
77afef2cf64b automated extraction of the imaged volume if using OpenSlide
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 254
diff changeset
1154 source.reset(OpenInputPyramid(sourceCompression, volume, parameters.GetInputFile(), parameters));
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1155 if (source.get() == NULL)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1156 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1157 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1158 }
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1159
289
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1160 // 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
1161 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
1162 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
1163 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
1164 {
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1165 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
1166 << "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
1167 << OPTION_IMAGED_HEIGHT << " options: " << pixelSpacingX << " vs. " << pixelSpacingY;
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1168 }
5f783bf882fe add warning about anisotropic pixel spacing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 282
diff changeset
1169
57
91fc9583b2de big refactoring to support sparse tiling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 43
diff changeset
1170 LOG(WARNING) << "Compression of the individual source tiles: " << OrthancWSI::EnumerationToString(sourceCompression);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1171
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1172 // 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
1173 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
1174 EnrichDataset(*dataset, *source, sourceCompression, parameters, volume);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1175
199
a1c265cb2174 replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 192
diff changeset
1176 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
1177 Recompress(*output, *source, *dataset, parameters, volume, sourceCompression);
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1178 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1179 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1180 catch (Orthanc::OrthancException& e)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1181 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1182 LOG(ERROR) << "Terminating on exception: " << e.What();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1183 exitStatus = -1;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1184 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1185
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1186 OrthancWSI::ApplicationToolbox::GlobalFinalize();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1187
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1188 return exitStatus;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1189 }