I know this is old, but I'm bored and don't mind talking to ghosts.
Most image processing tools expect image data to be scaled correctly according to the standard data range for the image class. For floating point classes, this is [0 1]. For integer classes, it's the numeric range supported by the class (e.g. [0 65535] for uint16). What you have are incorrectly scaled images. You have uint8 data in a uint16 image. This is what happens when you do
uint16(myuint8image) % only casts
instead of
im2uint16(myuint8image) % casts and rescales accordingly
As far as everything is concerned, the image is essentially black, since 255 is a lot closer to 0 (black) than it is to 65535 (white).
Just recast your images to the appropriate class:
myimage = uint8(myimage);
