class_docstr: !
  @brief Class represents segmentation algorithm syncsegm. 
  @details syncsegm is a bio-inspired algorithm that is based on double-layer oscillatory network that uses modified Kuramoto model.
           Algorithm extracts colors and colored objects. It uses only CCORE (C++ implementation of pyclustering) parts to implement the algorithm.
  
           CCORE option is True by default to use sync network in the pyclustering core - C/C++ shared library for processing that significantly increases performance.
  
  Example:
  @code
      # create oscillatory for image segmentaion - extract colors (radius 128) and objects (radius 4), 
      # and ignore noise (segments with size that is less than 10 pixels)
      algorithm = syncsegm(128, 4, 10);
      
      # extract segments (colors and objects)
      analyser = algorithm(path_to_file);
      
      # obtain segmentation results (only colors - from the first layer)
      color_segments = analyser.allocate_colors(0.01, 10);
      draw_image_mask_segments(path_to_file, color_segments);
      
      # obtain segmentation results (objects - from the second layer)
      object_segments = analyser.allocate_objects(0.01, 10);
      draw_image_mask_segments(path_to_file, object_segments);
  @endcode
docstr: !
  @brief Performs object segmentation by the second layer.
  
  @param[in] image_source (string): Path to image file that should be processed.
  @param[in] color_analyser (syncnet_analyser): Analyser of color segmentation results.
  @param[in] collect_dynamic (bool): If 'True' then whole dynamic of the first layer of the network is collected.
  
  @return (map) Analysers of object segments.
docstr_tok: ["!","@","brief","Performs","object","segmentation","by","the","second","layer",".","@","param","[","in","]","image_source","(","string",")",":","Path","to","image","file","that","should","be","processed",".","@","param","[","in","]","color_analyser","(","syncnet_analyser",")",":","Analyser","of","color","segmentation","results",".","@","param","[","in","]","collect_dynamic","(","bool",")",":","If","'True","'","then","whole","dynamic","of","the","first","layer","of","the","network","is","collected",".","@","return","(","map",")","Analysers","of","object","segments","."]
code: def __analyse_objects(
      self, image_source, color_analyser, collect_dynamic
  ):
      """!
      @brief Performs object segmentation by the second layer.
  
      @param[in] image_source (string): Path to image file that should be processed.
      @param[in] color_analyser (syncnet_analyser): Analyser of color segmentation results.
      @param[in] collect_dynamic (bool): If 'True' then whole dynamic of the first layer of the network is collected.
  
      @return (map) Analysers of object segments.
  
      """
  
      # continue analysis
      pointer_image = Image.open(image_source)
      image_size = pointer_image.size
  
      object_analysers = []
  
      color_segments = color_analyser.allocate_clusters()
  
      for segment in color_segments:
          object_analyser = self.__analyse_color_segment(
              image_size, segment, collect_dynamic
          )
          if object_analyser is not None:
              object_analysers.append(
                  {
                      "color_segment": segment,
                      "analyser": object_analyser,
                  }
              )
  
      pointer_image.close()
      return object_analysers
  
imports: from math import floor
  from PIL import Image
  from pyclustering.cluster.syncnet import syncnet
  from pyclustering.core.wrapper import ccore_library
  from pyclustering.nnet import solve_type, initial_type
  from pyclustering.nnet.sync import sync_visualizer
  from pyclustering.utils import read_image
label_desc: Use image node_id 4 for calling the syncsegm obj's underlying member method code with example usage: obj.__analyse_objects(image_source, color_analyser, collect_dynamic) and returns: object_analysers