> -----Original Message----- > From: carandr...@gmail.com [mailto:carandr...@gmail.com] On Behalf Of > Carnë Draug > Sent: 24 November 2011 12:42 > To: Andy Buckle > Cc: Kris Thielemans; octave-dev@lists.sourceforge.net > Subject: Re: [OctDev] experimental dicom support: changing code for > multiple elements and byteorder etc > > On 24 November 2011 09:34, Andy Buckle <andybuc...@gmail.com> wrote: > > On 23 November 2011 23:05, Kris Thielemans > <kris.f.thielem...@gmail.com> wrote: > >> Hi > >> > >> I'm modifying octave-forge/extra/dicom/src/dicominfo.cpp to handle > data > >> which are arrays, i.e. VM>1. I realize that not many people will know > DICOM, > >> let alone GDCM, but I'd appreciate any feedback in any case. (There's > some > >> generic octave questions at the end) > >> > >> Also, it would be good if someone could test the current dicominfo on > >> systems with different byteorders. I suspect that it'll only work when the > >> byteorder of the dicom file is the same as the one of the machine you're > >> running it on. > >> > >> I had a look at gdcm example code and it seems to me that we cannot > really > >> use memcpy to get from the dicom raw data to octave data. This > presumably > >> wouldn't work when byteswapping is needed (or other "transfer > syntax"). In > >> any case, I wouldn't know if memcpy would work with arrays (I'm not sure > if > >> it's guaranteed by DICOM that the subsequent members are stored > >> consecutively, although it's very likely of course). In an attempt to handle > >> this (and avoid horrible code repetition) I came up with the following > >> modification for element2value() in dicominfo.cpp: > >> > >> ------------------ current code ------------------- > >> if (vr & gdcm::VR::US) {// unsigned short > >> uint16_t usval ; > >> memcpy(&usval, elem->GetByteValue()->GetPointer(), 2); > >> *ov=usval; > >> if(chatty) octave_stdout << '[' << usval << "]\n"; > >> } else ... > >> // almost repeated for lots of VRs and types > >> return DICOM_OK; > >> -------------------- new code ----------------- > >> if (vr & gdcm::VR::US) {// unsigned short > >> return element2intvalueHelper<gdcm::VR::US>(ov, elem, chatty); > >> } else ... > >> // repeated for lots of VRs > >> > >> ---------------------- new function definition (in dicominfo.cpp) > >> --------------------- > >> template <gdcm::VR::VRType vrtype> > >> int element2intvalueHelper(octave_value *ov, const gdcm::DataElement > * elem, > >> const int chatty) { > >> if( !elem->IsEmpty() ) { > >> // find type that corresponds to this VR > >> typedef typename gdcm::VRToType<vrtype >::Type actual_type; > >> gdcm::Element<vrtype,gdcm::VM::VM1_n> el; > >> el.Set( elem->GetValue() ); > >> intNDArray<octave_int<actual_type> > val(dim_vector > (el.GetLength(),1)); > >> for (unsigned i=0; i<el.GetLength(); ++i) > >> val(i) = el.GetValue(i); > >> *ov=val; > >> if(chatty) octave_stdout << '[' << val << "]\n"; > >> return DICOM_OK; > >> } > >> else > >> { > >> return DICOM_NOTHING_ASSIGNED; > >> } > >> } > >> ------------------------------------------------------------------------- > >> > >> This seems to work. It might be somewhat inefficient though, as we're > >> creating a temporary array, copying to an octave_value, and then getting > rid > >> of it. I'm not sure how to avoid this, or even if it's an issue. > >> Also, it's annoying that I need to have 2 separate code sets for ints and > >> floats (as I need intNDArray<octave_int<short> > etc because of missing > >> constructors in octave_value). > >> > >> Any suggestions for improvements? > >> > >> Thanks > >> > >> Kris Thielemans > >> Algorithms and Software Consulting Ltd > >> Honorary Lecturer at Imperial College London > > > > It's really nice to see someone else working on the dicom package. > > > > Have you timed it on your system? How much slower is it? > > > > It did occur to me that memcpy may cause problems. Do you have a > > system where it does? I have used it on a few and it always works. I > > guess having someone with different types of mac to have a try might > > be useful. > > > > Do you have write acces to sf.net svn? If not please can this be > > granted. Carnë, is that your remit now? > > > > Driver issues with my linux system are still consuming my spare time, > > so I have not actually tried your code yet. I would not actually > > commit this yet unless; > > - The timed performance degradation is tiny, or, > > - We have confirmation of our suspicion that it does cause a problem > > on some systems. > > > > -- > > /* andy buckle */ > > Hi Kris > > do you have any experience with svn? If so, I can give you write > access to the repo as requested by Andy. You'll need a sourceforge > account for that (you can use openID such as your google account to > create one). > > Carnë
Hi I have used CVS a lot. SVN is a bit newer to me, but I guess I'll manage. My SF account is krthie. Thanks! Kris ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity, and more. Splunk takes this data and makes sense of it. IT sense. And common sense. http://p.sf.net/sfu/splunk-novd2d _______________________________________________ Octave-dev mailing list Octave-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/octave-dev