14 #ifndef BRAINRAT_UTILITY_IMAGEPROCESSOR_H
15 #define BRAINRAT_UTILITY_IMAGEPROCESSOR_H
17 #define BRAINRAT_IMAGE_PROCESSOR 1
18 #define BRAINRAT_NEW_EXTRACTORS 1
20 #include <cartobase/object/object.h>
21 #include <cartobase/type/converter.h>
22 #include <cartobase/smart/rcptr.h>
23 #include <aims/data/data.h>
24 #include <aims/roi/maskIterator.h>
25 #include <aims/utility/channel.h>
26 #include <aims/utility/progress.h>
27 #include <aims/border/borderfiller.h>
31 #include <aims/connectivity/structuring_element.h>
45 #ifdef BRAINRAT_IMAGE_PROCESSOR
53 template<
class T,
class U>
59 virtual void get(AimsData<T> &in,
61 const carto::rc_ptr<aims::MaskIterator> mask = carto::rc_ptr<aims::MaskIterator>()) = 0;
62 virtual U
get(AimsData<T> &in,
const Point3dl & p) = 0;
65 template<
class T,
class U,
class C>
71 virtual void get(AimsData<T> &in,
73 const carto::rc_ptr<aims::MaskIterator> mask = carto::rc_ptr<aims::MaskIterator>()) = 0;
74 virtual U
get(AimsData<T> &in,
const Point3dl & p) = 0;
83 template<
class T,
class U>
89 virtual void get(AimsData<T> &in,
91 const carto::rc_ptr<aims::MaskIterator> mask = carto::rc_ptr<aims::MaskIterator>()) = 0;
92 virtual U
get(AimsData<T> &in,
const Point3dl & p) = 0;
95 inline virtual void convert(T &in, T &out) { out = in; }
103 template<
class T,
class U,
class C = T>
109 virtual void get(AimsData<T> &in,
111 const carto::rc_ptr<aims::MaskIterator> mask = carto::rc_ptr<aims::MaskIterator>());
112 virtual U
get(AimsData<T> &in,
const Point3dl & p);
116 ChannelSelector<C, U> _selector;
119 template<
class T,
class U>
125 virtual void get(AimsData<T> &in,
127 const carto::rc_ptr<aims::MaskIterator> mask = carto::rc_ptr<aims::MaskIterator>());
128 virtual U
get(AimsData<T> &in,
const Point3dl & p);
131 carto::rc_ptr<aims::StructuringElement> _vse;
138 carto::Object _options;
141 template<
class T,
class U>
145 const carto::rc_ptr<aims::MaskIterator> mask = carto::rc_ptr<aims::MaskIterator>(),
146 const std::string &
procids =
"rgbm",
147 const carto::Object options = carto::none(),
154 virtual U
get(
const Point3dl & p,
const int32_t pi);
155 virtual AimsData<U>
get(
const int32_t pi);
163 carto::rc_ptr<aims::MaskIterator> _mask;
164 carto::Object _options;
165 std::vector<AimsData<U> > _data;
166 std::vector<int32_t> _ptypes;
167 std::vector<carto::rc_ptr<ImageProc<T, U> > > _procs;
169 std::string _procids;
174 #ifdef BRAINRAT_NEW_EXTRACTORS
177 std::string
timeString(std::string format =
"%d-%m-%Y %H:%M:%S");
180 template<
class T,
class U>
183 ColorExtractor(
const carto::rc_ptr<aims::MaskIterator> mask = carto::rc_ptr<aims::MaskIterator>(),
184 const std::string &
extract =
"rgbm",
185 const bool forceGray =
false,
186 const int & featureOffset = 0);
197 virtual void extract(
const carto::VolumeRef<T> &vol);
207 carto::VolumeRef<double> _gray;
208 carto::VolumeRef<U> _features;
209 carto::rc_ptr<aims::MaskIterator> _mask;
210 std::string _extract;
215 bool _isSameColorSpace;
216 bool _hasGraySpaceFeature;
218 carto::Object _dictFeat;
224 NeighbourExtractor(
const carto::rc_ptr<aims::MaskIterator> mask = carto::rc_ptr<aims::MaskIterator>(),
225 const int amplitude = 1,
226 const std::string modes =
"M",
227 const std::string shape =
"D",
228 const std::vector<int> layers = std::vector<int>(),
229 const int featureOffset = 0);
238 virtual void extract(
const carto::VolumeRef<double> &vol);
244 carto::VolumeRef<double>
const & grayImage,
245 aims::strel::Shape & disk);
248 carto::VolumeRef<float> _features;
249 carto::rc_ptr<aims::MaskIterator> _mask;
251 std::string _extract;
253 std::vector<int> _layers;
256 carto::rc_ptr<aims::strel::Shape> _structuringElement;
257 carto::Object _dictFeat;
263 GaborExtractor(
const carto::rc_ptr<aims::MaskIterator> mask = carto::rc_ptr<aims::MaskIterator>(),
264 const std::vector<double> sigma = std::vector<double>(),
265 const std::vector<double> theta = std::vector<double>(),
266 const std::vector<double> lambda = std::vector<double>(),
267 const std::vector<double> psi = std::vector<double>(),
268 const std::vector<double> gamma = std::vector<double>(),
269 const std::vector<int> real = std::vector<int>(),
270 const int featureOffset = 0);
280 virtual void extract(
const carto::VolumeRef<double> &vol);
287 carto::VolumeRef<double> _gray;
288 carto::VolumeRef<float> _features;
289 carto::rc_ptr<aims::MaskIterator> _mask;
291 std::vector<double> _sigma;
292 std::vector<double> _theta;
293 std::vector<double> _lambda;
294 std::vector<double> _psi;
295 std::vector<double> _gamma;
296 std::vector<int> _real;
298 std::vector<aims::GaborFilter<double> > _filters;
301 carto::Object _dictFeat;
302 carto::Object _dictGabor;
308 TextureExtractor(
const carto::rc_ptr<aims::MaskIterator> mask = carto::rc_ptr<aims::MaskIterator>(),
309 const std::string tex_chara =
"N",
310 const std::vector<int> tex_HTA = std::vector<int>(),
311 const std::string tex_lbp =
"N",
312 const int featureOffset = 0);
321 virtual void extract(
const carto::VolumeRef<double> &vol);
328 virtual void computeLBP(
const carto::VolumeRef<double> &vol);
333 carto::VolumeRef<float> _features;
334 carto::rc_ptr<aims::MaskIterator> _mask;
337 std::vector<carto::VolumeRef<double> > _coomat;
338 carto::VolumeRef<double> _lbpImage;
339 carto::VolumeRef<double> _haralickImage;
340 carto::VolumeRef<double> _tamuraImage;
342 std::string _tex_chara;
343 std::string _tex_lbp;
344 std::vector<int> _tex_HTA;
349 carto::Object _dictFeat;
350 aims::strel::SquareXY _haralickStructuringElement;
Class used to get channel value in image.
virtual U get(AimsData< T > &in, const Point3dl &p)
virtual ~ChannelImageProc()
virtual void get(AimsData< T > &in, AimsData< U > &out, const carto::rc_ptr< aims::MaskIterator > mask=carto::rc_ptr< aims::MaskIterator >())
ChannelImageProc(uint8_t channel=4)
virtual ~ConvertibleImageProc()
virtual U get(AimsData< T > &in, const Point3dl &p)=0
virtual void convert(T &in, T &out)
virtual void get(AimsData< T > &in, AimsData< U > &out, const carto::rc_ptr< aims::MaskIterator > mask=carto::rc_ptr< aims::MaskIterator >())=0
virtual U get(AimsData< T > &in, const Point3dl &p)=0
virtual ~ConvertibleImageProc()
virtual void convert(T &in, C &out)
carto::ShallowConverter< T, C > _converter
virtual void get(AimsData< T > &in, AimsData< U > &out, const carto::rc_ptr< aims::MaskIterator > mask=carto::rc_ptr< aims::MaskIterator >())=0
virtual U get(AimsData< T > &in, const Point3dl &p)=0
virtual void get(AimsData< T > &in, AimsData< U > &out, const carto::rc_ptr< aims::MaskIterator > mask=carto::rc_ptr< aims::MaskIterator >())=0
virtual void initialize()
virtual ~ImageProcessors()
ImageProcessors(const AimsData< T > &in, const carto::rc_ptr< aims::MaskIterator > mask=carto::rc_ptr< aims::MaskIterator >(), const std::string &procids="rgbm", const carto::Object options=carto::none(), const int32_t mode=OnDemand)
virtual std::string procids()
static std::string expandprocids(const std::string procids)
virtual AimsData< U > get(const int32_t pi)
virtual U get(const Point3dl &p, const int32_t pi)
virtual void get(AimsData< T > &in, AimsData< U > &out, const carto::rc_ptr< aims::MaskIterator > mask=carto::rc_ptr< aims::MaskIterator >())
virtual U get(AimsData< T > &in, const Point3dl &p)
virtual ~MorphoImageProc()
MorphoImageProc(const carto::Object options)
ImageProcessors<AimsRGB, double> p(data, mask, "rgbm", options, ImageProcessorMode::Init); ImageProce...
std::string timeString(std::string format="%d-%m-%Y %H:%M:%S")