// images must have same size
static int[] sumOfBinaryImages(L<? extends IBinaryImage> images) {
  int n = l(images);
  if (n == 0) null;
  var it = iterator(images);
  var img = it.next();
  int w = img.getWidth(), h = img.getHeight();
  int[] pixels = new[w*h];
  int nBytes = (w*h+7)/8;
  var pingSource = pingSource();
  
  while (true) {
    ping(pingSource);
    Image2B realizedImage = img.toImage2B();
    byte[] imgPixels = realizedImage.pixels;
    int j = 0;
    for i to nBytes: {
      int b = imgPixels[i];
      for bit to 8: {
        pixels[j++] += b & 1;
        b >>= 1;
      }
    }
    
    if (!it.hasNext()) break;
    img = it.next();
  }
  
  ret pixels;
}