This is why your images come out white.
imgs(:,:,jj) = double(imread(fname, jj, 'Info', info));
The image data in a file is usually an integer class. For example, if the image is uint8 and spans the entire range [0 255], then when you import it and cast it as double, it still spans the same range. It's just not integer anymore. The problem is that everything that handles images expects floating point images to be normalized [0 1]. Because of that, all the data is out of range. If you have IPT, you can just do im2double() instead of double(). That will cast the data and rescale it appropriately for the output class. If you don't have IPT, you can do
double(imread(fname, jj, 'Info', info))/255
double(imread(fname, jj, 'Info', info))/65535
The fact that you have to rescale the image data significantly after using uint16 suggests that the image is either uint8 or simply isn't scaled to fit the range available (a lot of medical/technical images aren't).
If you want to know whether the images are uint8 or uint16 or something else because you're doing manual conversions like above without IPT, you can read the image into a temporary array, check class(mytempimg), and then cast/rescale it accordingly.