imshow() only automatically resizes the figure if the current axes is in the "default" position that would occur if the axes were the only thing in the figure.
imshow() never resizes just an axes by itself.
If you want to fit an axes around an image, then set the InnerPosition to be the same size as image (watch out that X is columns not rows), and set the axes DataAspectRatio to [1 1 1]. This will probably leave a gap around the axes for small images, and will probably cause the axes to overlap your other controls if you display a large enough image.
Best Answer