docs: def assembleimage(patches, pmasks, gridids):
          r"""
          Assemble an image from a number of patches, patch masks and their grid ids.
          
          Parameters
          ----------
          patches : sequence
              Sequence of patches.
          pmasks : sequence
              Sequence of associated patch masks.
          gridids
              Sequence of associated grid ids.
              
          Returns
          -------
          image : ndarray
              The patches assembled back into an image of the original proportions.
              
          Examples
          --------
          Two-dimensional example:
          >>> import numpy
          >>> from medpy.iterators import CentredPatchIterator
          >>> arr = numpy.arange(0, 25).reshape((5,5))
          >>> arr
          array([[ 0,  1,  2,  3,  4],
                 [ 5,  6,  7,  8,  9],
                 [10, 11, 12, 13, 14],
                 [15, 16, 17, 18, 19],
                 [20, 21, 22, 23, 24]])
          >>> patches, pmasks, gridids, _ = zip(*CentredPatchIterator(arr, 2))
          >>> result = CentredPatchIterator.assembleimage(patches, pmasks, gridids)
          >>> numpy.all(arr == result)
          True
          
          Five-dimensional example:
          >>> arr = numpy.random.randint(0, 10, range(5, 10))
          >>> patches, pmasks, gridids, _ = zip(*CentredPatchIterator(arr, range(2, 7)))
          >>> result = CentredPatchIterator.assembleimage(patches, pmasks, gridids)
          >>> numpy.all(arr == result)
          True            
          """
          for d in range(patches[0].ndim):
              groups = {}
              for patch, pmask, gridid in zip(patches, pmasks, gridids):
                  groupid = gridid[1:]
                  if not groupid in groups:
                      groups[groupid] = []
                  groups[groupid].append((patch, pmask, gridid[0]))
              patches = []
              gridids = []
              pmasks = []
              for groupid, group in list(groups.items()):
                  patches.append(numpy.concatenate([p for p, _, _ in sorted(group, key=itemgetter(2))], d))
                  pmasks.append(numpy.concatenate([m for _, m, _ in sorted(group, key=itemgetter(2))], d))
                  gridids.append(groupid)
          objs = find_objects(pmasks[0])
          if not 1 == len(objs):
              raise ValueError('The assembled patch masks contain more than one binary object.')
          return patches[0][objs[0]]