This is because you dividing a uint8 image. When you divide your image (which has a range of values between 0 and 255) by 64 you will end up with an image with values 0, 1, 2, 3 and 4. When you multiply it back, you will get 0, 64, 128, 192, and 255, instead of the full range of values you initially had.
Check this out: imshow(b/64*64)
. THis will show you the same artifact.
Now check this: imshow(uint8(double(b)/64*64))
. This will show you the original image. You are able to recover the values in this case because the operations are performed on doubles rather than uint8.