dicom 0.9.5 → 0.9.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/{CHANGELOG.rdoc → CHANGELOG.md} +50 -30
- data/{CONTRIBUTING.rdoc → CONTRIBUTING.md} +16 -16
- data/Gemfile.lock +47 -0
- data/README.md +152 -0
- data/dicom.gemspec +11 -10
- data/lib/dicom.rb +30 -11
- data/lib/dicom/anonymizer.rb +654 -649
- data/lib/dicom/audit_trail.rb +0 -2
- data/lib/dicom/d_client.rb +1 -1
- data/lib/dicom/d_library.rb +45 -15
- data/lib/dicom/d_object.rb +18 -18
- data/lib/dicom/d_read.rb +28 -4
- data/lib/dicom/d_write.rb +49 -26
- data/lib/dicom/dictionary/{elements.txt → elements.tsv} +0 -0
- data/lib/dicom/dictionary/{uids.txt → uids.tsv} +0 -0
- data/lib/dicom/element.rb +6 -7
- data/lib/dicom/elemental.rb +1 -0
- data/lib/dicom/elemental_parent.rb +64 -0
- data/lib/dicom/extensions/array.rb +57 -0
- data/lib/dicom/extensions/hash.rb +31 -0
- data/lib/dicom/extensions/string.rb +126 -0
- data/lib/dicom/{constants.rb → general/constants.rb} +29 -38
- data/lib/dicom/{deprecated.rb → general/deprecated.rb} +0 -0
- data/lib/dicom/{logging.rb → general/logging.rb} +0 -0
- data/lib/dicom/{variables.rb → general/methods.rb} +0 -22
- data/lib/dicom/general/variables.rb +29 -0
- data/lib/dicom/{version.rb → general/version.rb} +1 -1
- data/lib/dicom/image_item.rb +0 -2
- data/lib/dicom/image_processor.rb +2 -0
- data/lib/dicom/item.rb +1 -13
- data/lib/dicom/link.rb +2 -1
- data/lib/dicom/parent.rb +34 -86
- data/lib/dicom/sequence.rb +1 -13
- data/lib/dicom/stream.rb +94 -114
- data/rakefile.rb +1 -1
- metadata +73 -36
- data/README.rdoc +0 -149
- data/lib/dicom/ruby_extensions.rb +0 -249
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NDBiM2UzMTdiODE5YzU1MThmYzVmYjkwY2NkMWRlMDgyZDA4OTMyMA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
OThhOTYwZTA5NjY0MTQ0ZDczNDM2NGMyYTA4M2M4OGM1YjMzZTM0OA==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MWY5ODI2NTgyOTQ3ZDgwODBiNjVjZTE1MThmYTIwYjU4YTYxODI0MmNmMjk3
|
10
|
+
NzIyYzQ5YmY1Y2M1NTk4ODE4OGU5ZDY1MzQyM2VjMjdhZjJmMGE3MjIwYTRk
|
11
|
+
YzdiYzg0Nzk4ZmI2ZWQ1OWJlNWY4MTU5ZTZmMDQ5MzAzNmRmMWE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MGY0YjBlZTI3ZDk3YzNkYmE3NzI1ZjFhYmYwZDcyZmE2NDJhNjIzZDEzNjI5
|
14
|
+
NzQ3ZjY5N2FjZTVlODQyNGNiN2VhMmQ1NTQ2YjRmMmJjYzRkYjYzYjQ0ZWIw
|
15
|
+
ZmJlZjAwYWMyZWZhN2UwZjg2MjcwYWYxMjMwOTE3YzQ0NTExNTA=
|
@@ -1,6 +1,26 @@
|
|
1
|
-
|
1
|
+
# 0.9.6
|
2
2
|
|
3
|
-
|
3
|
+
## 20th June, 2014
|
4
|
+
|
5
|
+
* Fixed an issue where role negotiation in the network code would cause an exception.
|
6
|
+
* Fixed an issue where a C-Move request could terminate instead of properly waiting for a receipt.
|
7
|
+
* Fixed an issue where network code would hang waiting for a response when it doesn't get any.
|
8
|
+
* Automatically load RMagick/mini_magick when using the image methods, to avoid confusing exceptions.
|
9
|
+
* Made json and yaml gem dependencies, to avoid unexpected exceptions when using the #to_json and #to_yaml methods.
|
10
|
+
* Give a warning instead of raising an error when Parent#delete and #value gets an obviously invalid argument.
|
11
|
+
* Introduced Parent#representation, giving a description of the parent objects Sequence, Item & DObject.
|
12
|
+
* Refactored various methods for improved code simplicity.
|
13
|
+
* Upgraded specification to use RSpec 3.
|
14
|
+
* Changed information files from RDoc to Markdown format.
|
15
|
+
* Performance improvement when writing DICOM string segments.
|
16
|
+
* Changed element and uid dictionaries from .txt to .tsv.
|
17
|
+
* Bumped required Ruby version to 1.9.3.
|
18
|
+
* Replaced the custom encoding/decoding of big endian numbers with the Ruby standard library implementation.
|
19
|
+
|
20
|
+
|
21
|
+
# 0.9.5
|
22
|
+
|
23
|
+
## 26th March, 2013
|
4
24
|
|
5
25
|
* DICOM module:
|
6
26
|
* Use hyphen instead of underscore in ruby-dicom application title.
|
@@ -42,9 +62,9 @@
|
|
42
62
|
* Added Anonymizer :encryption option, which allows the simulatenous preservation of privacy and key/value relations in the audit file.
|
43
63
|
|
44
64
|
|
45
|
-
|
65
|
+
# 0.9.4
|
46
66
|
|
47
|
-
|
67
|
+
## 10th September, 2012
|
48
68
|
|
49
69
|
* Converted the documentation format from RDOC to YARD.
|
50
70
|
* Removed deprecated remove_* methods (use the delete_* versions instead).
|
@@ -64,9 +84,9 @@
|
|
64
84
|
* Refactored read and write code to get rid of the 'private' DRead and DWrite classes.
|
65
85
|
|
66
86
|
|
67
|
-
|
87
|
+
# 0.9.3
|
68
88
|
|
69
|
-
|
89
|
+
## 6th May, 2012
|
70
90
|
|
71
91
|
* Deprecated all #remove* methods (replaced with #delete*) to increase consistency with Ruby.
|
72
92
|
* Changed preferred DObject variable name from obj to dcm for all examples.
|
@@ -83,9 +103,9 @@
|
|
83
103
|
* Optimizations and code cleanups allowed by the introduced Ruby 1.9 requirement.
|
84
104
|
|
85
105
|
|
86
|
-
|
106
|
+
# 0.9.2
|
87
107
|
|
88
|
-
|
108
|
+
## 10th Oct, 2011
|
89
109
|
|
90
110
|
* Enabled the use of lower case tag letters in methods which previously required the use of upper case letters.
|
91
111
|
* Added new DObject class methods to offload DObject#new:
|
@@ -99,16 +119,16 @@
|
|
99
119
|
* Supports information levels, logging to file, and more as available in the Ruby Logger.
|
100
120
|
|
101
121
|
|
102
|
-
|
122
|
+
# 0.9.1
|
103
123
|
|
104
|
-
|
124
|
+
## 27th May, 2011
|
105
125
|
|
106
126
|
* Fixed a regression in 0.9 where ruby-dicom would cause a Rails application to crash.
|
107
127
|
|
108
128
|
|
109
|
-
|
129
|
+
# 0.9
|
110
130
|
|
111
|
-
|
131
|
+
## 17th May, 2011
|
112
132
|
|
113
133
|
* Fixed an issue where data elements added to a DObject didn't get their endianness updated.
|
114
134
|
* Added the ability to encode/decode 32 bit pixel data.
|
@@ -164,9 +184,9 @@
|
|
164
184
|
* Various bug fixes.
|
165
185
|
|
166
186
|
|
167
|
-
|
187
|
+
# 0.8
|
168
188
|
|
169
|
-
|
189
|
+
## 1st August, 2010
|
170
190
|
|
171
191
|
* Overall changes:
|
172
192
|
* A complete rewrite of data element handling has resulted in a substantially different syntax and significantly cleaner and simpler code.
|
@@ -219,9 +239,9 @@
|
|
219
239
|
* Properly receives and responds to a C-ECHO-RQ.
|
220
240
|
|
221
241
|
|
222
|
-
|
242
|
+
# 0.7
|
223
243
|
|
224
|
-
|
244
|
+
## 28th February, 2010
|
225
245
|
|
226
246
|
* Added set_image() and set_image_narray() methods to write pixel data to the DICOM object, complementing set_image_magick().
|
227
247
|
* Added method get_image() which retrieves pixel data to a standard Ruby Array.
|
@@ -251,9 +271,9 @@
|
|
251
271
|
* Various "under the hood" improvements and code cleanups.
|
252
272
|
|
253
273
|
|
254
|
-
|
274
|
+
# 0.6.1
|
255
275
|
|
256
|
-
|
276
|
+
## 23rd August, 2009
|
257
277
|
|
258
278
|
* Fixed a bug (introduced in version 0.6) where the creation of new data elements caused an error.
|
259
279
|
* Fixed a bug (introduced in version 0.6) where compressed pixel data were no longer detected correctly.
|
@@ -262,9 +282,9 @@
|
|
262
282
|
* Fixed a bug where retrieving a RMagick image from DICOM files containing two sets of image data failed.
|
263
283
|
|
264
284
|
|
265
|
-
|
285
|
+
# 0.6
|
266
286
|
|
267
|
-
|
287
|
+
## 13th August, 2009
|
268
288
|
|
269
289
|
* Complete rewrite of encoding/decoding to reduce code duplication and simplify the code.
|
270
290
|
* General optimizations to improve speed and reduce code complexity.
|
@@ -275,9 +295,9 @@
|
|
275
295
|
* The new DServer class presents the ability to set up a simple storage server (Service Class Provider).
|
276
296
|
|
277
297
|
|
278
|
-
|
298
|
+
# 0.5
|
279
299
|
|
280
|
-
|
300
|
+
## 4th May, 2009
|
281
301
|
|
282
302
|
* Several small changes have been made to achieve compatibility with both Ruby versions 1.8 and 1.9.
|
283
303
|
* Implemented a change in syntax for several methods with a goal of simplification.
|
@@ -295,9 +315,9 @@
|
|
295
315
|
* Fixed a bug where exception folders where ignored in the Anonymizer class.
|
296
316
|
|
297
317
|
|
298
|
-
|
318
|
+
# 0.4
|
299
319
|
|
300
|
-
|
320
|
+
## 3rd February, 2009
|
301
321
|
|
302
322
|
* Change of syntax: Options are now supplied as hash.
|
303
323
|
* Method below() renamed to children().
|
@@ -320,9 +340,9 @@
|
|
320
340
|
to offer a fairly powerful and customizable tool for anonymizing your DICOM files.
|
321
341
|
|
322
342
|
|
323
|
-
|
343
|
+
# 0.3
|
324
344
|
|
325
|
-
|
345
|
+
## 12th October, 2008
|
326
346
|
|
327
347
|
* The DRead class is now able to keep track of the position of the tags inside the hierarchy of sequences and items.
|
328
348
|
* DObject class has seen a number of improvements to allow taking advantage of this hierarchy awareness:
|
@@ -335,9 +355,9 @@
|
|
335
355
|
* Method print_properties() have been updated to display more information about the DICOM object.
|
336
356
|
|
337
357
|
|
338
|
-
|
358
|
+
# 0.2
|
339
359
|
|
340
|
-
|
360
|
+
## 10th August, 2008
|
341
361
|
|
342
362
|
* Data dictionary has been upgraded and is now compliant to the official standard.
|
343
363
|
* New DLibrary class which handles all interaction with the dictionary.
|
@@ -347,9 +367,9 @@
|
|
347
367
|
* Added option to load DICOM object in verbose or silent mode.
|
348
368
|
|
349
369
|
|
350
|
-
|
370
|
+
# 0.1
|
351
371
|
|
352
|
-
|
372
|
+
## 20th July, 2008
|
353
373
|
|
354
374
|
First public release.
|
355
375
|
The library does have several known issues and lacks some features I would like it to have, but it does
|
@@ -1,12 +1,12 @@
|
|
1
|
-
|
1
|
+
# Contributing Code
|
2
2
|
|
3
|
-
So you want to contribute to ruby-dicom? That's great
|
3
|
+
So you want to contribute to ruby-dicom? That's great, thank you! If you are a
|
4
4
|
first time committer however, you must to take a moment to read these instructions.
|
5
5
|
|
6
6
|
The preferred method, by far, is to convey your code contribution in the form
|
7
|
-
of a
|
7
|
+
of a [github](https://github.com/dicom/ruby-dicom) pull request.
|
8
8
|
|
9
|
-
|
9
|
+
## Committer's Recipe
|
10
10
|
|
11
11
|
* Fork the repository (for bonus points, use a topical branch name).
|
12
12
|
* Execute the specification (rspec tests) to verify that all spec examples pass
|
@@ -16,23 +16,23 @@ of a pull request on {github}[https://github.com/dicom/ruby-dicom].
|
|
16
16
|
* Alter the code to make the new spec example(s) pass.
|
17
17
|
* Keep it simple! One issue per pull request. Mixing two or more independent
|
18
18
|
issues in the same pull request will complicate the review of your request and
|
19
|
-
may result in a rejection (even if
|
20
|
-
* Don't modify the version or
|
19
|
+
may result in a rejection (even if individual components of the commit are sound).
|
20
|
+
* Don't modify the version string or the Changelog.
|
21
21
|
* Push to your fork and submit a pull request.
|
22
22
|
* Wait for feedback (this shouldn't take too long). The pull request may be accepted right
|
23
23
|
away, it may be rejected (with a reason specified), or it may spark a discussion where
|
24
24
|
changes/improvements are suggested in order for the pull request to be accepted.
|
25
25
|
|
26
|
-
|
26
|
+
## Guidelines
|
27
27
|
|
28
28
|
In order to increase the chances of your pull request being accepted,
|
29
29
|
please follow the project's coding guidelines. Ideally, your contribution must not
|
30
|
-
add
|
30
|
+
add [technical debt](http://en.wikipedia.org/wiki/Technical_debt) to the project.
|
31
31
|
|
32
32
|
* Provide thorough documentation. It should follow the format used by this project
|
33
33
|
and give information on parameters, exceptions and return values where relevant.
|
34
34
|
Provide examples for non-trivial use cases.
|
35
|
-
* Read the excellent
|
35
|
+
* Read the excellent [Github Ruby Styleguide](https://github.com/styleguide/ruby)
|
36
36
|
if you are new to collaborative Ruby development. Do note though, that we actually
|
37
37
|
don't follow all styles listed yet (perhaps we should?!).
|
38
38
|
* Some sample patterns of ours:
|
@@ -42,9 +42,9 @@ add {technical debt}[http://en.wikipedia.org/wiki/Technical_debt] to the project
|
|
42
42
|
* Assignment: a = b and not a=b
|
43
43
|
* In general: Follow the conventions you see used in the source code already.
|
44
44
|
|
45
|
-
|
45
|
+
## Contribution Agreement
|
46
46
|
|
47
|
-
ruby-dicom is licensed under the
|
47
|
+
ruby-dicom is licensed under the [GPL v3](http://www.gnu.org/licenses/gpl.html),
|
48
48
|
and to be in the best position to enforce the GPL, the copyright status of ruby-dicom
|
49
49
|
needs to be as simple as possible. To achieve this, contributors should only provide
|
50
50
|
contributions which are their own work, and either:
|
@@ -58,26 +58,26 @@ b) Disclaim copyright on it and thus put it in the public domain
|
|
58
58
|
Copyright assignment (a) is the preferred and encouraged option for larger
|
59
59
|
code contributions, and is assumed unless otherwise is specified.
|
60
60
|
|
61
|
-
Please see the
|
61
|
+
Please see the [GNU FAQ](http://www.gnu.org/licenses/gpl-faq.html#AssignCopyright)
|
62
62
|
for a fuller explanation of the need for this.
|
63
63
|
|
64
|
-
|
64
|
+
## Credits
|
65
65
|
|
66
66
|
All contributors are credited, with full name and link to their github account,
|
67
67
|
in the README file. If such an accreditation is not wanted (for whatever reason),
|
68
68
|
please let me know so, either in the pull request or in private.
|
69
69
|
|
70
70
|
|
71
|
-
|
71
|
+
# Other ways to contribute
|
72
72
|
|
73
|
-
|
73
|
+
Not ready to get your hands dirty with source code and git? Don't worry,
|
74
74
|
there are other ways in which you can contribute to the project as well!
|
75
75
|
|
76
76
|
* Create an issue on github for feature requests or bug reports.
|
77
77
|
* Weigh in with your opinion on existing issues.
|
78
78
|
* Write a tutorial.
|
79
79
|
* Answer questions, or tell the community about your exciting ruby-dicom projects in the
|
80
|
-
|
80
|
+
[mailing list](http://groups.google.com/group/ruby-dicom).
|
81
81
|
* Academic works: Properly reference ruby-dicom in your work and tell us about it.
|
82
82
|
* Spread the word: Tell your colleagues about ruby-dicom.
|
83
83
|
* Make a donation.
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
dicom (0.9.6)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://www.rubygems.org/
|
8
|
+
specs:
|
9
|
+
diff-lcs (1.2.5)
|
10
|
+
metaclass (0.0.4)
|
11
|
+
mini_magick (3.7.0)
|
12
|
+
subexec (~> 0.2.1)
|
13
|
+
mocha (1.1.0)
|
14
|
+
metaclass (~> 0.0.1)
|
15
|
+
narray (0.6.0.8)
|
16
|
+
rake (10.3.2)
|
17
|
+
redcarpet (3.1.2)
|
18
|
+
rmagick (2.13.2)
|
19
|
+
rspec (3.0.0)
|
20
|
+
rspec-core (~> 3.0.0)
|
21
|
+
rspec-expectations (~> 3.0.0)
|
22
|
+
rspec-mocks (~> 3.0.0)
|
23
|
+
rspec-core (3.0.1)
|
24
|
+
rspec-support (~> 3.0.0)
|
25
|
+
rspec-expectations (3.0.1)
|
26
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
27
|
+
rspec-support (~> 3.0.0)
|
28
|
+
rspec-mocks (3.0.1)
|
29
|
+
rspec-support (~> 3.0.0)
|
30
|
+
rspec-support (3.0.0)
|
31
|
+
subexec (0.2.3)
|
32
|
+
yard (0.8.7.3)
|
33
|
+
|
34
|
+
PLATFORMS
|
35
|
+
x86-mingw32
|
36
|
+
|
37
|
+
DEPENDENCIES
|
38
|
+
bundler (~> 1.6)
|
39
|
+
dicom!
|
40
|
+
mini_magick (~> 3.7)
|
41
|
+
mocha (~> 1.1)
|
42
|
+
narray (~> 0.6.0.8)
|
43
|
+
rake (~> 10.3)
|
44
|
+
redcarpet (~> 3.1)
|
45
|
+
rmagick (~> 2.13.2)
|
46
|
+
rspec (~> 3.0)
|
47
|
+
yard (~> 0.8.7)
|
data/README.md
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
# RUBY DICOM
|
2
|
+
|
3
|
+
Ruby DICOM is a small and simple library for handling DICOM in Ruby. DICOM (Digital Imaging
|
4
|
+
and Communications in Medicine) is a standard for handling, storing, printing,
|
5
|
+
and transmitting information in medical imaging. It includes a file format definition
|
6
|
+
and a network communications protocol. Ruby DICOM supports reading from, editing
|
7
|
+
and writing to this file format. It also features basic support for select network
|
8
|
+
communication modalities like querying, moving, sending and receiving files.
|
9
|
+
|
10
|
+
|
11
|
+
## INSTALLATION
|
12
|
+
|
13
|
+
gem install dicom
|
14
|
+
|
15
|
+
|
16
|
+
## REQUIREMENTS
|
17
|
+
|
18
|
+
* Ruby 1.9.3 (if you are still on Ruby 1.8, gems up to version 0.9.1 can be used)
|
19
|
+
|
20
|
+
|
21
|
+
## BASIC USAGE
|
22
|
+
|
23
|
+
### Load & Include
|
24
|
+
|
25
|
+
require 'dicom'
|
26
|
+
include DICOM
|
27
|
+
|
28
|
+
### Read, modify and write
|
29
|
+
|
30
|
+
# Read file:
|
31
|
+
dcm = DObject.read("some_file.dcm")
|
32
|
+
# Extract the Patient's Name value:
|
33
|
+
dcm.patients_name.value
|
34
|
+
# Add or modify the Patient's Name element:
|
35
|
+
dcm.patients_name = "Anonymous"
|
36
|
+
# Remove a data element from the DICOM object:
|
37
|
+
dcm.pixel_data = nil
|
38
|
+
# Write to file:
|
39
|
+
dcm.write("new_file.dcm")
|
40
|
+
|
41
|
+
### Modify using tag strings instead of dictionary method names
|
42
|
+
|
43
|
+
# Extract the Patient's Name value:
|
44
|
+
dcm.value("0010,0010")
|
45
|
+
# Modify the Patient's Name element:
|
46
|
+
dcm["0010,0010"].value = "Anonymous"
|
47
|
+
# Delete a data element from the DICOM object:
|
48
|
+
dcm.delete("7FE0,0010")
|
49
|
+
|
50
|
+
### Extracting information about the DICOM object
|
51
|
+
|
52
|
+
# Display a short summary of the file's properties:
|
53
|
+
dcm.summary
|
54
|
+
# Print all data elements to screen:
|
55
|
+
dcm.print
|
56
|
+
# Convert the data element hierarchy to a nested hash:
|
57
|
+
dcm.to_hash
|
58
|
+
|
59
|
+
### Handle pixel data
|
60
|
+
|
61
|
+
# Retrieve the pixel data in a Ruby Array:
|
62
|
+
dcm.pixels
|
63
|
+
# Load the pixel data to an numerical array (NArray):
|
64
|
+
dcm.narray
|
65
|
+
# Load the pixel data to an RMagick image object and display it on screen (X):
|
66
|
+
dcm.image.normalize.display
|
67
|
+
|
68
|
+
### Transmit a DICOM file
|
69
|
+
|
70
|
+
# Send a local file to a server (PACS) over the network:
|
71
|
+
node = DClient.new("10.1.25.200", 104)
|
72
|
+
node.send("some_file.dcm")
|
73
|
+
|
74
|
+
### Start a DICOM server
|
75
|
+
|
76
|
+
# Initiate a simple storage provider which can receive DICOM files of all modalities:
|
77
|
+
s = DServer.new(104, :host_ae => "MY_DICOM_SERVER")
|
78
|
+
s.start_scp("C:/temp/")
|
79
|
+
|
80
|
+
### Log settings
|
81
|
+
|
82
|
+
# Change the log level so that only error messages are displayed:
|
83
|
+
DICOM.logger.level = Logger::ERROR
|
84
|
+
# Setting up a simple file log:
|
85
|
+
l = Logger.new('my_logfile.log')
|
86
|
+
DICOM.logger = l
|
87
|
+
# Create a logger which ages logfile daily/monthly:
|
88
|
+
DICOM.logger = Logger.new('foo.log', 'daily')
|
89
|
+
DICOM.logger = Logger.new('foo.log', 'monthly')
|
90
|
+
|
91
|
+
|
92
|
+
### IRB Tip
|
93
|
+
|
94
|
+
When working with Ruby DICOM in irb, you may be annoyed with all the information
|
95
|
+
that is printed to screen, regardless if you have set verbose as false. This is because
|
96
|
+
in irb every variable loaded in the program is automatically printed to the screen.
|
97
|
+
A useful hack to avoid this effect is to append ";0" after a command.
|
98
|
+
Example:
|
99
|
+
|
100
|
+
dcm = DObject.read("some_file.dcm") ;0
|
101
|
+
|
102
|
+
|
103
|
+
## RESOURCES
|
104
|
+
|
105
|
+
* [Official home page](http://dicom.rubyforge.org/)
|
106
|
+
* [Discussion forum](http://groups.google.com/group/ruby-dicom)
|
107
|
+
* [Documentation](http://rubydoc.info/gems/dicom/frames)
|
108
|
+
* [Tutorials](http://dicom.rubyforge.org/tutorials.html)
|
109
|
+
* [Source code repository](https://github.com/dicom/ruby-dicom)
|
110
|
+
|
111
|
+
|
112
|
+
## COPYRIGHT
|
113
|
+
|
114
|
+
Copyright 2008-2014 Christoffer Lervåg
|
115
|
+
|
116
|
+
This program is free software: you can redistribute it and/or modify
|
117
|
+
it under the terms of the GNU General Public License as published by
|
118
|
+
the Free Software Foundation, either version 3 of the License, or
|
119
|
+
(at your option) any later version.
|
120
|
+
|
121
|
+
This program is distributed in the hope that it will be useful,
|
122
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
123
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
124
|
+
GNU General Public License for more details.
|
125
|
+
|
126
|
+
You should have received a copy of the GNU General Public License
|
127
|
+
along with this program. If not, see http://www.gnu.org/licenses/ .
|
128
|
+
|
129
|
+
|
130
|
+
## ABOUT THE AUTHOR
|
131
|
+
|
132
|
+
* Name: Christoffer Lervåg
|
133
|
+
* Location: Norway
|
134
|
+
* Email: chris.lervag [@nospam.com] @gmail.com
|
135
|
+
|
136
|
+
Please don't hesitate to email me if you have any feedback related to this project!
|
137
|
+
|
138
|
+
|
139
|
+
## CONTRIBUTORS
|
140
|
+
|
141
|
+
* [Christoffer Lervåg](https://github.com/dicom)
|
142
|
+
* [John Axel Eriksson](https://github.com/johnae)
|
143
|
+
* [Kamil Bujniewicz](https://github.com/icdark)
|
144
|
+
* [Jeff Miller](https://github.com/jeffmax)
|
145
|
+
* [Donnie Millar](https://github.com/dmillar)
|
146
|
+
* [Björn Albers](https://github.com/bjoernalbers)
|
147
|
+
* [Felix Petriconi](https://github.com/FelixPetriconi)
|
148
|
+
* [Greg Tangey](https://github.com/Ruxton)
|
149
|
+
* [Cian Hughes](https://github.com/cian)
|
150
|
+
* [Steven Bedrick](https://github.com/stevenbedrick)
|
151
|
+
* [Lars Benner](https://github.com/Maturin)
|
152
|
+
* [Brett Goulder](https://github.com/brettgoulder)
|