I have two recommendations for you:
Read the image data in Python in chunks:
with open('path/to/image-data.tif', 'rb') as tif:
while True:
chunk = tif.read(4096)
if not chunk:
break
Consider using NumExpr for your processing: https://github.com/pydata/numexpr
... , NumExpr , chunked-read, . NumPy, .
, , .