Dicom package: Difference between revisions
(→Questions: minor updates to clarify current implementation as answers) |
(added section with aim of the package) |
||
Line 2: | Line 2: | ||
*Maintainer: Andy Buckle [http://sourceforge.net/sendmessage.php?touser=1760416contact] | *Maintainer: Andy Buckle [http://sourceforge.net/sendmessage.php?touser=1760416contact] | ||
*Currently worked on by: Kris Thielemans | *Currently worked on by: Kris Thielemans | ||
=== What is the aim of this package? === | |||
DICOM ('Digital Imaging and Communication in Medicine') is a standard for transfering and storing medical data. See http://medical.nema.org/ for more info. | |||
This package provides functions to read and (eventually) write DICOM files. The functions in the package are intended to have similar usage as | |||
the dicom functions in the Matlab Image Processing Toolbox. | |||
===Supporting library=== | ===Supporting library=== | ||
[http://sourceforge.net/apps/mediawiki/gdcm/index.php?title=Main_Page GCDM]. You can usually get this via your package manager, | [http://sourceforge.net/apps/mediawiki/gdcm/index.php?title=Main_Page GCDM]. You can usually get this via your package manager, e.g. on Ubuntu | ||
sudo apt-get install libgdcm2.0 | sudo apt-get install libgdcm2.0 |
Revision as of 23:43, 20 December 2011
At an early development stage. octave-forge svn
- Maintainer: Andy Buckle [1]
- Currently worked on by: Kris Thielemans
What is the aim of this package?
DICOM ('Digital Imaging and Communication in Medicine') is a standard for transfering and storing medical data. See http://medical.nema.org/ for more info.
This package provides functions to read and (eventually) write DICOM files. The functions in the package are intended to have similar usage as the dicom functions in the Matlab Image Processing Toolbox.
Supporting library
GCDM. You can usually get this via your package manager, e.g. on Ubuntu
sudo apt-get install libgdcm2.0
Alternatively, build it yourself. Get the source with subversion.
svn co https://gdcm.svn.sourceforge.net/svnroot/gdcm/branches/gdcm-2-0
cmake and g++ are required. create a gdcmbin directory parallel to the gdcm-2-0 directory. Change to gdcmbin and then run cmake (Linux/cygwin).
> mkdir gdcmbin > ls gdcmbin gdcm-2-0 > cd gdcmbin > cmake -DGDCM_BUILD_SHARED_LIBS=ON ../gdcm-2-0/
This creates a Makefile in your gdcmbin directory. You can easily edit cmake options with "make edit_cache", for example to build applications like gdcmdump. "make help" is also very useful.
make install
On my system, I also had to add this to my ~/.bashrc.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
Mingw32 is similar. Get openSSL: Win32 Openssl v1.0.0a Light
cmake -G "MinGW Makefile" -DGDCM_BUILD_SHARED_LIBS=ON ..\gdcm-2-0 mingw32-make all
Features
All of these still need work, but they exist, and are usable to some extent.
- dicomdict (load different dict - file follows same format as Matlab's)
- dicominfo (load metadata into octave struct. possible bug in SQ loading)
- dicomlookup (keyword <-> tag)
- dicomread (load pixel data, 2D or 3D int types. Does not yield colormaps, yet.)
Todo
- dicomanon
- dicomuid
- dicomwrite
- isdicom
Questions
I don't have a Matlab license available. I would like to make this package compatible with the dicom functions in Matlab's image processing toolbox, as far as possible.
- Octave (and Matlab) stores images (y,x) and DICOM is intrinsically (x,y). Does Matlab transpose images when it loads them?
- matlab reads the data from the dicom file as if it's a raw block of numbers (and then converts if necessary). We think that current Octave/dicom behaviour is compatible with matlab.
- I would like people to try m-files that worked with Matlab to let me know of problems.
- (not necessarily) Matlab related: I need examples of odd DICOM files. I have plenty with complex metadata, but I need some with unusual images.
- More than one sample per pixel
- Colour
- Float types
- DA (date) VR: does Matlab turn them into a string?
- if the user supplies metadata (eg HighBit?, BitsStored?) that describe the type of the pixels and this is not in agreement with the type of the image matrix supplied, does Matlab
- silently convert the image pixel type to match the metadata?
- silently convert the metadata to match the pixel type?
- error and do nothing?
- What does dicominfo do when a tag is not in its dictionary. Answer: assign to a field like Private_3243_0010 (as Matlab)
- dicominfo: Items in sequences are not necessarily the same, so are stored as nested structs like dcm.RTDoseROISequence?.Item_1.DoseUnits?(as Matlab)