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<int16_t>(
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;
carto::VolumeRef< U > bin(const carto::VolumeRef< T > &image)
AimsData< int16_t > getBrainMask(const AimsData< T > &image, byte channel=GreenChannel)