1,847
edits
Carandraug (talk | contribs) (added octaveforge category) |
(Unified layout. Revisit links https.) |
||
(26 intermediate revisions by 9 users not shown) | |||
Line 1: | Line 1: | ||
The {{Forge|dicom}} package is part of the [[Octave Forge]] project. The package is at an early development stage and it is maintained by Andy Buckle with contributions by Judd Storrs and Kris Thielemans. | |||
===Supporting library | == What is the aim of this package? == | ||
[http://sourceforge.net/ | Digital communications in medicine (DICOM) is an information standard. Originally created for image transfer, the standard now deals with an large range of 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. In Octave they are separate: most image package users will not use dicom, and its dependency might be considered troublesome. | |||
== Platforms == | |||
{{Warning|The information of this section needs be reviewed (June 2019).}} | |||
*Linux. Tested on OpenSuSE 11.4 and Ubuntu. No known issues. GDCM is required: see below. | |||
*mingw | |||
**Ben Lindner's Octave 3.2.4 and the mingw build environment (gcc 4.4.0): dicom package 0.1.1 does not build against this older version of the Octave API. | |||
**Tatsuro/Nitzan's Octave 3.4.3 and mingw build environment (gcc 4.5.2): gdcm and dicom package build OK. Get segfault in ntdll.dll when one of the dicom*.oct files calls something from a gdcm*.dll. | |||
**mxe-octave: dicom and gdcm distributed as part of the installed package. | |||
*Cygwin: Panic when oct file called (or maybe when oct file uses gdcm dll). Need to try rebaseall | |||
==Supporting library== | |||
[http://gdcm.sourceforge.net/wiki/index.php/Main_Page GDCM]. 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 | ||
Alternatively, build it yourself. Get the source with | Alternatively, build it yourself. Get the source with git. | ||
git clone https://git.code.sf.net/p/gdcm/gdcm | |||
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). | 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). | ||
Line 33: | Line 47: | ||
mingw32-make all | mingw32-make all | ||
===Features | On Cygwin gdcm 2.0.18 (and maybe some other versions) may have a problem with newer cmake. This kludge persuades cmake to define WIN32. | ||
cmake -DGDCM_BUILD_SHARED_LIBS=ON -DCMAKE_CXX_COMPILER=g++.exe -DCMAKE_LEGACY_CYGWIN_WIN32=1 ../gdcm-2.0.18/ | |||
==Features== | |||
All of these still need work, but they exist, and are usable to some extent. | 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) | *dicomdict (load different dict - file follows same format as Matlab's) | ||
*dicominfo (load metadata into octave struct. | *dicominfo (load metadata into octave struct. possible bug in SQ loading) | ||
*dicomlookup (keyword <-> tag) | *dicomlookup (keyword <-> tag) | ||
*dicomread (load pixel data, 2D or 3D int types. Does not yield colormaps, yet.) | *dicomread (load pixel data, 2D or 3D int types. Does not yield colormaps, yet.) | ||
*dicomwrite ( | *dicomwrite (write pixel data to a DICOM format file) | ||
*dicomuid (generate a DICOM unique id) | |||
*isdicom (verify if a file is a DICOM formatted file) | |||
==Todo== | |||
*dicomanon | *dicomanon | ||
==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. | 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? | *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). | **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. | *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. | *(not necessarily) Matlab related: I need examples of odd DICOM files. I have plenty with complex metadata, but I need some with unusual images. | ||
Line 61: | Line 80: | ||
**silently convert the metadata to match the pixel type? | **silently convert the metadata to match the pixel type? | ||
**error and do nothing? | **error and do nothing? | ||
[[ | == Answered == | ||
[[Category: | *dicominfo: Items in sequences are not necessarily the same, so are stored as nested structs like dcm.RTDoseROISequence.Item_1.DoseUnits(as Matlab) | ||
*What does dicominfo do when a tag is not in its dictionary? Answer: assign to a field like Private_3243_0010 (as Matlab) | |||
== See also == | |||
* {{Forge|dicom}} at [[Octave Forge]]. | |||
* [https://sourceforge.net/projects/gdcm/ Grassroots DICOM]. | |||
[[Category:Octave Forge]] |