-
Notifications
You must be signed in to change notification settings - Fork 1
/
README
334 lines (227 loc) · 13 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
* JNLP install *
1. set environment variables:
export CERT_ALIAS="<insert alias here>"
export CERT_KEYSTORE="<insert path to keystore (.p12) here>"
export CERT_PASS="<insert keystore password here>"
2. build singed jar:
ant sign
3. build demo-server
cd demo-server
mvn clean install
4. Run jar web server:
java -jar target/demo-server-0.0.1-SNAPSHOT.jar
20170228. DAC.g
This is the PixelMed Publishing pure Java DICOM toolkit. All the
class and supporting files are included in a single jar file,
pixelmed.jar.
Installation.
A JRE of 1.7.0 or more recent is required.
The following additional jar files from other freely available packages
may be required, depending on which components of the toolkit are used.
For your convenience, these are available packaged together in the
"dependencies" file of the current release, to be used in combination
with the "binaries" and/or "source" release file.
The dependencies are:
slf4j-api-1.7.22.jar
slf4j-simple-1.7.22.jar
All logging of errors, warning, information, debugging and
tracing is now performed using the com.pixelmed.slf package,
which is a very thin wrapper around a subset of the SLF4J
facade classes and methods, rather than the previous approach
of sending everything directly to System.err (stderr). All
constructors and methods with "debugLevel" arguments have
been deprecated and all "debugLevel" command line arguments
have been removed.
slf4j-api-*.jar is required at compilation time, but may be
omitted at run time if no SLF implementation is used, and
com.pixelmed.slf will log to System.err.
A logging implementation of some kind may be supplied at runtime;
the minimal approach is to supply slf4j-simple-*.jar, which
also sends everything to stderr.
The default log level for slf4j is INFO, but either the default
for all classes can be changed by adding:
-Dorg.slf4j.simpleLogger.defaultLogLevel=debug
in the java command line invocation, or per class, e.g.,:
-Dorg.slf4j.simpleLogger.log.com.pixelmed.doseocr.OCR=trace
Other options are useful for logging background processes, e.g.:
-Dorg.slf4j.simpleLogger.showDateTime=true
-Dorg.slf4j.simpleLogger.dateTimeFormat="EEE MMM dd HH:mm:ss zzz yyyy"
-Dorg.slf4j.simpleLogger.dateTimeFormat="yyyy-MM-dd'T'HH:mm:ss.SSSZ"
See:
http://www.slf4j.org/
http://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.html
https://github.com/qos-ch/slf4j/blob/master/slf4j-simple/src/test/resources/simplelogger.properties
Even if slf4j-api-*.jar and an slf implementation are not supplied
at runtime, a subset of the slf4j properties are still used (i.e.,
com.pixelmed.slf reuses the same properties as slf4j rather than
defining its own). Specifically, the following properties (only)
are supported by the com.pixelmed.slf implementation:
org.slf4j.simpleLogger.defaultLogLevel (default logging detail level for all instances, default is info)
org.slf4j.simpleLogger.log.xxxxx (logging detail level for a logger instance named "xxxxx")
org.slf4j.simpleLogger.showDateTime (default is false)
org.slf4j.simpleLogger.dateTimeFormat (default is ms since start)
pixelmed_codec.jar
Required for compilation but currently only required at runtime
when selective redaction of baseline JPEG blocks is needed (e.g.,
when this feature of DicomCleaner or DicomImageBlackout or
DeidentifyAndRedact is needed).
Available from the PixelMed software site at:
"http://www.dclunie.com/pixelmed/software/codec/"
junit-4.8.1.jar
Required for compilation but currently only required at runtime
for the tests related to the dose packages (doseocr and test);
however, future versions of the toolkit will likely make more
extensive use of junit for unit testing.
hsqldb.jar
The HypersonicSQL database. The recommended version is
2.3.3 or later.
See "http://hsqldb.org/".
Required at runtime for applications that use a database (such
as DicomImageViewer, DicomCleaner, DoseUtility and the various servers).
Required for building from source.
commons-compress-1.12.jar
A pure Java implementation of the bzip2 compression algorithm. Primarily
used to support a private PixelMed compression transfer syntax, if
available at runtime regardless. It is available from the Apache project:
"http://commons.apache.org/proper/commons-compress/"
It was formerly part of the Apache Jakarta Avalon Excalibur project
as a component, was then folded into the Ant distribution, before
being migrated into the commons family, together with other codecs.
Required at runtime for applications that want to support bzip2
transfer syntaxes ... absence will be detected dynamically and
these transfer syntaxes will not be offered or accepted.
Not required for building from source.
vecmath1.2-1.14.jar
The computation of geometric information (such as for posting localizers
and reporting 3D cursor positions) for cross-sectional images depends
on the Java 3D API, and since this isn't available for all platforms,
the code makes use of the routines in this free 3rd party implementation
of the vector math (only) parts of the 3D API written by Kenji Hiranabe:
"http://objectclub.esm.co.jp/vecmath/"
The official Sun Java 3D implementation also works, if it is available
for your hardware platform.
Required at runtime for applications that want use 3D localization, such
as DicomImageViewer.
Required for building from source unless Java3D installed.
commons-codec-1.3.jar
Contains encoding of person name using phonetic mechanisms such as Soundex
and Metaphone; used for person name matching in database queries. See:
"http://jakarta.apache.org/commons/codec/"
Required at runtime for applications that want to support phonetic matching;
absense will result in trapped exceptions and default use of canonical as
phonetic name (i.e., the exceptions are harmless).
Not required for building from source.
commons-net-ftp-2.0
Contains ftp and secure ftp clients.
For use with IHE REM Dose Information Reporter transaction for transfer to
registry (which is via ftp over TLS (RFC 4217) rather than DICOM).
jmdns.jar
Contains support for Multicast DNS (mDNS) and DNS Self Discovery (DNS-SD)
used for zeroconf network configuration (aka. Apple's Bonjour):
"http://sourceforge.net/projects/jmdns/"
"http://jmdns.sourceforge.net/"
Tested with version jmdns-3.4.1 from sourceforge unmodified (2.x versions
will no longer work, since some 3.x API changes and features are now used).
Required at runtime for all DICOM network applications that want to perform
self discovery ... absence will be detected dynamically and self discovery
will not be performed.
Required for building from source.
javax.json-1.0.4.jar
javax.json-api-1.0.jar
Contains support for JSON parsing:
"https://jsonp.java.net/"
"https://jsonp.java.net/download.html" and look for the "non-Maven" links
javax.json-1.0.4.jar is required at runtime for com.pixelmed.app package
tools that use JSON files as input to describe DICOM attributes and
values
javax.json-api-1.0.jar is required for building from source.
jpedalSTD.jar
Contains support for reading and rendering PDF:
"http://www.jpedal.org/"
Tested with 2007/06/14 GPL version.
Note that there are also commercial (non-GPL) versions that should work.
Also, additional jar files are available from the JPedal site, including
the BouncyCastle cryptography provider (bcprov-jdk14-119.jar, which is open
source) and the jdom XML provider (jdom.jar, also open source); neither of
these appear to be necessary for decoding PDF files as used in the
pixelmed toolkit,given the faciities of contemporary JVMs.
There is also at the JPedal site a jar file that is not open source but is
free for non-commercial use (only), which provides support for rendering of
embedded fonts (pjes.jar); this is not necessary for the function of the
tools, but may improve the quality of the rendering.
******** GPL Alert ********
NB. JPedal is GPL - PixelMed is not - consider this with respect to using
and or distributing PixelMed-based source and/or binary code that depends
on the JPedal functionality - the only thing that will not work if JPedal
is not included is rendering of PDF (com.pixelmed.dicom.PDFToDicomImage)
Not required for building from source (reflection is used to detect if
present at runtime when necessary).
NOT INCLUDED IN PIXELMED DISTRIBUTION - DOWNLOAD IT YOURSELF AS REQUIRED.
AiViewer
Though not a dependency per se, the web server does support the use of
Takahiro Katoji's AiViewer open source GPL Java applet from Akira Iwata's
laboratory at the Nagoya Institute of Technology with the web server.
It is available from "http://mars.elcom.nitech.ac.jp/dicom".
To use it, make sure that the class files are in the "dicomviewer" folder
in the root of the web server folder (where the stylesheet is), as specified
in the web server properties. The DICOM dictionary is not necessary but can
be put in the same location. Then set the RequestTypeToUseForInstances
web server property to APPLETDISPLAY. Alternatively, include a jar file
in the classpath that contains the dicomviewer/*.class files.
Alternatively, one could modify the AppletDisplayTemplate.tpl template to
directly get the class files from the Nagoya site, but then the local
java security policy file would need to be changed to allow the applet
to access images from a different server than that from which the class
files were obtained.
Not required for building from source.
Java Image I/O
Support for reading and displaying images with compressed transfer syntaxes
depends on the availability of native or pure Java Image I/O (JIIO) codecs.
Conversion from consumer formats (com.pixelmed.dicom.ImageToDicom) also
depends on the JIIO codecs.
The JRE has only a limited set of codecs (baseline JPEG, GIF, PNG and BMP),
and additional pure Java codecs (JPEG 2000, TIFF, more robust baseline JPEG,
PNM) and native codecs (faster JPEG 2000, extended 12 bit lossy JPEG, lossless
JPEG, JPEG-LS) can be found in the Java Advanced Imaging Image I/O Tools
(JAI IIO).
Binary builds are available from:
http://web.archive.org/web/20150318212755/http://download.java.net/media/jai-imageio/builds/release/1.1/
These can be used by either installing them into the JRE, or by including
the jar files in the classpath (and the native libraries in the path).
Native libraries are not available on the Mac, but you can extract the
jai_imageio.jar file from one of the Unix distributions and use it in
the classpath. This has already been extracted and supplied in the
"dependencies" file of the current release.
Not required for building from source.
For further documentation of the capabilities of the codecs, see:
http://web.archive.org/web/20150318212755/http://download.java.net/media/jai-imageio/builds/release/1.1/jai_imageio-1_1-doc.zip
Fonts and Internationalization
To support some international character sets, you need to be sure that your
JRE is installed with the charsets.jar file, which is optional on some
platforms. Make sure that during JRE install that you select the "custom
installation" and select the "Support for additional locales" feature. See:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6329080
If you fail to do this, you may get an java.io.UnsupportedEncodingException.
As far as fonts are concerned, see the discussion in section 4.2.6 Fonts
of the docs/DicomImageViewer/UserManual.pdf user guide.
Invocation.
One the various jar files have been assembled, applications in the DICOM toolkit can be
invoked as follows, using the com.pixelmed.display.DicomImageViewer as an example:
java -Xmx512m -Xms512m -cp "./pixelmed.jar:./lib/additional/hsqldb.jar:./lib/additional/commons-compress-1.12.jar:./lib/additional/vecmath1.2-1.14.jar:./lib/additional/jmdns.jar:./lib/additional/commons-codec-1.3.jar:./lib/additional/jai_imageio.jar" com.pixelmed.display.DicomImageViewer
Note that for practical display or processing of large DICOM images a lot of heap
space is necessary, hence the "-Xmx512m -Xms512m".
On some Windows Java installations, the Direct3D drivers (e.g., Nvidia) are buggy,
and adding "-Dsun.java2d.d3d=false" will help; this can also be set from an
environment variable "_JAVA_OPTIONS" ; see also
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6762839
http://java.sun.com/j2se/1.5.0/docs/guide/2d/flags.html
Development Documentation.
To use the toolkit for your own applications, read the documentation of the classes
provided, both as traditional Javadoc (see docs/javadoc/index.html) and as Doxygen
(see docs/doxygen/html/index.html).
Acknowledgements.
Development of block selective redaaction of lossy JPEG files supported by funding
from MDDX Research and Informatics.
Localization of DicomCleaner, DicomImageBlackout, ApplicationEntityConfigurationDialog
and NetworkApplicationConfigurationDialog funded by GE Healthcare and localization
performed by SDL plc.