Hi I discovered that Andy Buckle has made some routines available for DICOM support in Octave. See also http://wiki.octave.org/wiki.pl?CategoryDicom. Thanks Andy!
I've made some changes to the files currently in svn (octave-forge/extra/dicom/). However, I don't have write access to the svn, so I've attached them to this email as a patch. I'd be very happy if this would be committed. This code works fine for me on Ubuntu 11.04 and allows me to read GE Dicom PET and CT images, and GE raw data, which was a very pleasant surprise. With this update, I think this dicom package is much closer to being ready and compatible with matlab. I haven't looked at dicomwrite though. Also, there's a TODO in dicominfo.cpp related to error handling if a dictionary is not found. I also have some doubts if the code properly handles different endianness, but am not familiar enough with gdcm to know for sure (and don't seem to have the data to check it). Note that I'm rather new to octave, so I'm sure that the C++ code can be improved. Also, I'm not quite sure about conventions to be used for the texinfo documentation (e.g.: how do you write an argument that's a string?) so somebody should/could correct this. Here's a summary of the changes ------------------------------------------------------------ All files: changed include of gdcm files to use gdcm-2.0/ path, which is I think how it should be done. That also meant I don't have to add an include flag anymore after installing the gdcm package on Ubuntu. dicomread.cpp: - support usage where 1st argument is a structure with a field Filename (such as returned by dicominfo) for matlab compatibility. dicomdict.cpp: - make sure that 'get' and 'set' behaviour works correctly. To do that, there's now a static variable storing the current dictionary name and a function get_current_dict() to access it. I didn't remove Andy's disabled code for using a dictionary object, but I don't think it's necessary as we can get away with a string. - updated doc-string dicomdict.h: - moved declaration of load_dict() here to make it accessible in the other routines - declare new function get_current_dict() dicominfo.cpp: - support usage dicominfo(filename, 'dictionary', dictname) - support FL, FD and SL VRs, which means that many more fields are now read correctly from the dicom file. - check if the VR in the file is the same as the one in the dictionary. If not, issue a warning but use the VR from the file. - assign values to private dicom fields - changed convention for private fields to use lower-case for the hexadecimal numbers to be compatible with Matlab - if an entry is not in the dictionary, determine its VR from the file (if possible) and assign anyway. - updated doc-string Makefile: - set include flag empty - removed a few gdcm components that aren't installed with the gdcm ubuntu package (do they still exist?) and aren't necessary anyway. -------------------------------------------------------- Finally, a comment for the wiki at http://wiki.octave.org/wiki.pl?CategoryDicom Question: Octave (and Matlab) stores images (y,x) and DICOM is intrinsically (x,y). Does Matlab transpose images when it loads them? Answer: 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 hope this is useful for someone. Andy's code (and Octave!) was certainly useful for me. Kris Thielemans Algorithms and Software Consulting Ltd (http://asc.uk.com)
dicom.patch
Description: Binary data
------------------------------------------------------------------------------ RSA(R) Conference 2012 Save $700 by Nov 18 Register now http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________ Octave-dev mailing list Octave-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/octave-dev