11 #ifndef BRAINRAT_UTILITY_UTILITY_D_H 12 #define BRAINRAT_UTILITY_UTILITY_D_H 20 #include <aims/data/data_g.h> 21 #include <aims/io/writer.h> 22 #include <aims/io/reader.h> 23 #include <aims/utility/channel.h> 24 #include <aims/utility/converter_g.h> 25 #include <aims/utility/progress.h> 27 #include <aims/roi/roiIterator.h> 28 #include <aims/roi/maskIterator.h> 29 #include <aims/connectivity/connectivity.h> 30 #include <aims/connectivity/component.h> 31 #include <aims/resampling/linearInterpolator.h> 33 #include <cartodata/volume/volume.h> 35 #include <soma-io/allocator/allocator.h> 37 #include <cartobase/stream/fileutil.h> 38 #include <cartobase/smart/rcptr.h> 39 #include <cartobase/type/string_conversion.h> 53 AimsData<int16_t>
getBrainMask(
const AimsData<T> &image, byte channel)
55 int dx = image.dimX();
56 int dy = image.dimY();
57 int dz = image.dimZ();
60 ChannelSelector< AimsData<T>, AimsData<double> > selector;
61 AimsData<double> G = selector.select(image, channel);
65 AimsData<int16_t> thImage = em.
bin(G);
69 AimsBucket<Void> component;
70 AimsData<int16_t> C2(dx, dy, dz);
71 C2 = aims::AimsLabeledConnectedComponent(
74 aims::Connectivity::CONNECTIVITY_6_XYZ,
84 AimsData <int> fond (component.size());
86 for (
int z = 0; ((z < bordure) && (z < dz)) ; z++)
87 for (
int y = 0; ((y < bordure) && (y < dy)); y++)
88 for (
int x = 0; ((x < bordure) && (x < dx)); x++)
90 fond(C2(x, y, z)) ++ ;
91 fond(C2(dx - 1 - x, dy - 1 - y, dz - 1 - z)) ++ ;
95 for (
int icomp = 0; icomp < component.size(); icomp++){
96 ifond = (fond (ifond) > fond (icomp)) ? ifond : icomp;
102 for (
int icomp = 0; icomp < component.size(); icomp++){
103 std::list<AimsBucketItem<Void> > CC = component[icomp];
106 max_taille = CC.size();
109 max_taille = (max_taille > CC.size()) ? max_taille : CC.size();
115 AimsData<int16_t> brainMask (dx, dy, dz);
116 brainMask.volume()->header() = image.volume()->header();
119 for (
int icomp = 0; icomp < component.size(); icomp++){
120 std::list<AimsBucketItem<Void> > CC = component[icomp];
121 if ( (icomp != ifond) && (CC.size() >= 0.001 * max_taille) ) {
122 std::list<AimsBucketItem<Void> >::iterator itel, itele = CC .end();
123 for (itel = CC.begin(); itel != itele; ++itel){
124 AimsBucketItem<Void> pixel = *itel;
125 brainMask(pixel.location()) = 1;
AimsData< U > bin(const AimsData< T > &image)
AimsData< int16_t > getBrainMask(const AimsData< T > &image, byte channel=GreenChannel)