public FilterSizeElongationSparcityFloat32(FeatureGeneratorElementNode3DFloat32 generator, float[,] features,
                                                   float MinSize, float MaxSize,
                                                   float MinElongation, float MaxElongation,
                                                   float MinSparcity, float MaxSparcity)
        {
            this.filtered_nodes = new HashSet <int>();

            for (int node_index = 0; node_index < features.GetLength(0); node_index++)
            {
                float size       = features[node_index, generator.IndexSize];
                float elongation = features[node_index, generator.IndexElongation];
                float sparcity   = features[node_index, generator.IndexSparceness];
                if ((size < MinSize) || (MaxSize < size))
                {
                    this.filtered_nodes.Add(node_index);
                }
                else if ((elongation < MinElongation) || (MaxElongation < elongation))
                {
                    this.filtered_nodes.Add(node_index);
                }
                else if ((sparcity < MinSparcity) || (MaxSparcity < sparcity))
                {
                    this.filtered_nodes.Add(node_index);
                }
            }
        }
 public MaxTreeFloat3DFeaturesFloat(IImageRaster <IRaster3DInteger, float> image, FeatureGeneratorElementNode3DFloat32 generator)
     : this(image, generator, null)
 {
 }
 public MaxTreeFloat3DFeaturesFloat(IImageRaster <IRaster3DInteger, float> image, FeatureGeneratorElementNode3DFloat32 generator, IProgressReporter reporter)
 {
     this.raster         = image.Raster;
     this.inner_max_tree = new MaxTreeBuilderSingleQueue <float>().BuildMaxTree(image.GetElementValues(false), new ComparerNatural <float>(), new TopologyElementRaster3D6Connectivity(image.Raster), image.Raster.ElementCount);
     if (generator != null)
     {
         this.features = new float[inner_max_tree.NodeCount, generator.FeatureCount];
         generator.GenerateFeaturesTree(raster, inner_max_tree.BottomLevelNode, features);
     }
     else
     {
         this.features = null;
     }
 }