IntegralImage with ~2 bytes per pixel (instead of 4) -- doesn't work... probably need column and row high bytes instead. complicated It can almost be done (the actual feasible byte count is 3.03125) Image itself: 2 bytes per pixel (just cut off and interpret as signed integer) Helper structure: For every 8*8 block, store the missing highest byte of pixel in top-left corner (Explanation: In an 8*8 block, the pixel sum is at most 8*8*255=16320 which is < the signed int range.) So additional bytes needed per pixel: 1/64 (for small images) 1/32 (for big images) => Total bytes per pixel: between 2.01562 and 2.03125 Cost for a pixel lookup: three fixed shifts, an AND, an array lookup and an addition