Mercurial > hg > orthanc-book
annotate Sphinx/source/faq/matlab.rst @ 103:af1e13dac7e6
raw dicom in matlab
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 13 Jun 2017 20:35:14 +0200 |
parents | 5ffea09f47a3 |
children | 86e92d0cc53e |
rev | line source |
---|---|
34 | 1 Interfacing with Matlab and Octave |
2 ================================== | |
3 | |
4 Thanks to the REST API of Orthanc, it is easy to access DICOM images | |
5 from Matlab or Octave, as depicted in the following sample image: | |
6 | |
7 .. image:: ../images/Matlab.png | |
8 :align: center | |
9 :width: 470px | |
10 | |
11 Both Matlab and Octave have access to HTTP servers thanks to their | |
12 built-in `urlread() function | |
13 <http://nl.mathworks.com/help/matlab/ref/urlread.html>`__. Once must | |
14 simply install a Matlab/Octave library to decode JSON files. The | |
66 | 15 `JSONLab toolkit <https://github.com/fangq/jsonlab>`__ works perfectly |
16 to this end. | |
34 | 17 |
18 .. highlight:: matlab | |
19 | |
20 Using JSONlab, the following code will download and display a DICOM image:: | |
21 | |
22 SERIES = 'ae164c84-e5bd0366-ba937a6d-65414092-f294d6b6'; | |
66 | 23 URL = 'http://demo.orthanc-server.com/'; |
34 | 24 |
25 # Get information about the instances in this DICOM series | |
26 instances = loadjson(urlread([ URL '/series/' SERIES '/instances' ])); | |
27 | |
28 # Select one slice from the series | |
102 | 29 instance = instances{1}.ID |
34 | 30 |
31 # Decode the slice with Orthanc thanks to the "/matlab" URI | |
32 slice = eval(urlread([ URL '/instances/' instance '/matlab' ])); | |
33 | |
34 # Compute the maximum value in this slice | |
35 max(max(slice)) | |
36 | |
37 # Display the slice | |
38 imagesc(slice) | |
39 | |
40 # Annotate the graph with the patient name and ID | |
41 tags = loadjson(urlread([ URL '/instances/' instance '/tags?simplify' ])); | |
42 title([ 'This is a slice from patient ' tags.PatientID ' (' tags.PatientName ')' ]) | |
103
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
43 |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
44 |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
45 Opening the raw DICOM file |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
46 -------------------------- |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
47 |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
48 Here is another sample Matlab/Octave script explaining how to download |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
49 the raw DICOM file corresponding to one given instance stored in |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
50 Orthanc, then decode this DICOM file using Matlab/Octave:: |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
51 |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
52 SERIES = 'ae164c84-e5bd0366-ba937a6d-65414092-f294d6b6'; |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
53 URL = 'http://demo.orthanc-server.com/'; |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
54 |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
55 # Get information about the instances in this DICOM series |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
56 instances = loadjson(urlread([ URL '/series/' SERIES '/instances' ])); |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
57 |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
58 # Select one slice from the series |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
59 instance = instances{1}.ID |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
60 |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
61 # Download the raw DICOM file and store it as a file named "instance.dcm" |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
62 urlwrite([ URL '/instances/' instance '/file' ], 'instance.dcm'); |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
63 |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
64 if exist('OCTAVE_VERSION', 'builtin') ~= 0 |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
65 # If running Octave instead of Matlab, load the "dicom" package from Octave Forge |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
66 pkg load image |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
67 pkg load dicom |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
68 endif |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
69 |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
70 # Decode the downloaded DICOM file |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
71 im = dicomread('instance.dcm'); |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
72 imagesc(im) |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
73 |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
74 .. highlight:: bash |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
75 |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
76 **Note:** If running Octave, you will have to manually install the |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
77 `dicom package from Octave Forge |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
78 <https://octave.sourceforge.io/dicom/index.html>`__. Download the |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
79 source code of the package, make sure the ``libgdcm2-dev`` and |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
80 ``octave-image`` packages are installed (for Ubuntu 16.04), then type |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
81 the following command to install the ``dicom`` package:: |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
82 |
af1e13dac7e6
raw dicom in matlab
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
102
diff
changeset
|
83 $ octave --no-gui --eval "pkg install ./dicom-0.2.0.tar.gz" |