The function double() only converts the specified array to a variable of type double, keeping the same values. The function im2double() also normalises to an interval of [0, 1], which is convenient when working with e.g., imshow().
When you give int8() a value that is greater than 127, then it "saturates" and returns 127. A lot of your input values are greater than 127 so they are "saturating" at 127.
The same kind of thing happens for uint8 if you give it a value greater than 255: it saturates at 255.
Best Answer