annotate Applications/Dicomizer.cpp @ 323:429c4efa1fde

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