|
|
Line 59: |
Line 59: |
| ==Digital communications in medicine (DICOM)== | | ==Digital communications in medicine (DICOM)== |
| There is a DICOM package hosted on sourceforge: [[dicom | more information]]. | | There is a DICOM package hosted on sourceforge: [[dicom | more information]]. |
|
| |
| At an early development stage. [http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/extra/dicom/ octave-forge svn]
| |
| *Maintainer: Andy Buckle [http://sourceforge.net/sendmessage.php?touser=1760416contact]
| |
| *Currently worked on by: Kris Thielemans
| |
|
| |
| ===Supporting library===
| |
| [http://sourceforge.net/apps/mediawiki/gdcm/index.php?title=Main_Page GCDM]. You can usually get this via your package manager,e 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: [http://www.slproweb.com/products/Win32OpenSSL.html 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. nasty bug in SQ loading)
| |
| *dicomlookup (keyword <-> tag)
| |
| *dicomread (load pixel data, 2D or 3D int types. Does not yield colormaps, yet.)
| |
| *dicomwrite (only does some 2D int types, ATM. No metadata control, yet)
| |
|
| |
| ===Todo===
| |
|
| |
| *dicomanon
| |
| *dicomuid
| |
|
| |
| ===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). Therefore, 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: skip it or give error? I was wondering about turning the tag into a variable name, something like Tag_3243_0010. (Matlab 6.5 (2002): Private__3243_0010)
| |
| *dicominfo: Items in sequences are not necessarily the same, so cannot be stored in arrays of structs. (Matlab 6.5 (2002): makes nested structs like dcm.RTDoseROISequence?.Item_1.DoseUnits?)
| |
|
| |
|
| == Fixed point toolbox == | | == Fixed point toolbox == |