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;