From a31d25701d89e531bf4126997b4a63975b1ee4d4 Mon Sep 17 00:00:00 2001 From: guigues Date: Mon, 23 Feb 2009 14:33:56 +0000 Subject: [PATCH] Added ultrasonix RF image support --- src2/CMakeLists.txt | 1 + src2/creaImageIOImageReader.cpp | 2 + src2/creaImageIORFImageReader.cpp | 173 ++++++++++++++++++++++++++++++ src2/creaImageIORFImageReader.h | 40 +++++++ 4 files changed, 216 insertions(+) create mode 100644 src2/creaImageIORFImageReader.cpp create mode 100644 src2/creaImageIORFImageReader.h diff --git a/src2/CMakeLists.txt b/src2/CMakeLists.txt index 29c67a1..777742b 100644 --- a/src2/CMakeLists.txt +++ b/src2/CMakeLists.txt @@ -20,6 +20,7 @@ SET( SRCS creaImageIOAbstractImageReader creaImageIOVtkImageReader creaImageIODicomImageReader + creaImageIORFImageReader creaImageIOImageReader creaImageIOMultiThreadImageReader diff --git a/src2/creaImageIOImageReader.cpp b/src2/creaImageIOImageReader.cpp index 96dec59..6ac29f6 100644 --- a/src2/creaImageIOImageReader.cpp +++ b/src2/creaImageIOImageReader.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -43,6 +44,7 @@ namespace creaImageIO Register(new VtkImageReader(vtkMetaImageReader::New(),"MHD",".mhd")); // Register(new VtkImageReader(vtkGESignalReader::New())); Register(new DicomImageReader); + Register(new RFImageReader); /* std::cout << "## Registered file extensions : "< +#include +#include +#include "boost/filesystem/path.hpp" + +namespace creaImageIO +{ +#define HEADER_SIZE 19 + + void read_header_rf_file(FILE *rf_file,int *w,int *h,int *n_frame) + { + int *header=(int*)malloc(sizeof(int)*HEADER_SIZE); + fread(header,sizeof(int),HEADER_SIZE,rf_file); + *n_frame=header[1]; + *w=header[2]; + *h=header[3]; + free(header); + } + + //===================================================================== + RFImageReader::RFImageReader() + { + SetName("rf"); + } + //===================================================================== + + //===================================================================== + RFImageReader::~RFImageReader() + { + } + //===================================================================== + + //===================================================================== + struct rf_header + { + // frames, width, height + int frame,width,height; + }; + //===================================================================== + + + //===================================================================== + bool ReadHeader( FILE *rf_file, rf_header& h ) + { + int *header=(int*)malloc(sizeof(int)*HEADER_SIZE); + fread(header,sizeof(int),HEADER_SIZE,rf_file); + h.frame = header[1]; + h.width = header[2]; + h.height = header[3]; + free(header); + return true; + } + //===================================================================== + + //===================================================================== + bool RFImageReader::CanRead(const std::string& filename) + { + bool ok = false; + FILE *rf_file=fopen(filename.c_str(),"rb"); + if (rf_file) + { + rf_header h; + ok = ReadHeader(rf_file,h); + } + fclose(rf_file); + return ok; + } + //===================================================================== + + //===================================================================== + vtkImageData* RFImageReader::ReadImage(const std::string& filename) + { + FILE *rf_file=fopen(filename.c_str(),"rb"); + if (!rf_file) return false; + rf_header h; + if (!ReadHeader(rf_file,h)) + { + fclose(rf_file); + return 0; + } + + long im_size = h.height * h.width * h.frame; + short* data = (short*)malloc(sizeof(short)*im_size); + + long frame_size = h.height * h.width * sizeof(short); + short* ptr = data; + for (int k=0; k& v) + { + v.push_back("rf"); + } + //===================================================================== + + + + //===================================================================== + void RFImageReader::ReadAttributes(const std::string& filename, + std::map& attr) + { + // std::cout << "RFImageReader::ReadDicomInfo '"<::iterator i; + if ( (i = attr.find("FullFileName")) != attr.end()) + { + // boost::filesystem::path full_path(filename); + // std::string f = full_path.leaf(); + i->second = filename; + } + if ( (i = attr.find("D0004_1500")) != attr.end()) + { + boost::filesystem::path full_path(filename); + std::string f = full_path.leaf(); + i->second = f; + } + if ( (i = attr.find("D0028_0010")) != attr.end()) + { + i->second = rows; + } + if ( (i = attr.find("D0028_0011")) != attr.end()) + { + i->second = cols; + } + + if ( (i = attr.find("D0028_0012")) != attr.end()) + { + i->second = planes; + } + + GimmickMessage(2,"Attributes map:"< + + +namespace creaImageIO +{ + + + /** + * \ingroup IO + */ + + //===================================================================== + /// Concrete image reader for ultrasonix 'rf' files + class RFImageReader : virtual public AbstractImageReader + { + public: + RFImageReader(); + + virtual ~RFImageReader(); + + virtual void PushBackExtensions(std::vector&); + virtual bool CanRead(const std::string& filename); + virtual vtkImageData* ReadImage(const std::string& filename); + virtual void ReadAttributes(const std::string& filename, + tree::AttributeMapType& attr); + + }; + //===================================================================== + + + +} // namespace creaImageIO + + + +#endif // #ifndef __creaImageIORFImageReader_h_INCLUDED__ -- 2.45.1