annotate Applications/Dicomizer.cpp @ 331:cf828b381bc9

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