在MATLAB中,imshow(A) 默认显示的是0~255,imshow(A,[]) 显示的是min(A)~max(A)。
文档中对于imshow(A,[])的解释IMSHOW(I,[LOW HIGH]) displays the grayscale image I, specifying the display range for I in [LOW HIGH]. The value LOW (and any value less than LOW) displays as black, the value HIGH (and any value greater than HIGH) displays as white. Values in between are displayed as intermediate shades of gray, using the default number of gray levels. If you use an empty matrix ([]) for [LOW HIGH], IMSHOW uses [min(I(:)) max(I(:))]; that is, the minimum value in I is displayed as black, and the maximum value is displayed as white.
所以,imshow(A,[])在MATLAB中的原理就是b=uint((a-min(a(:)))./(max(a(:))-min(a(:)))*255);
这样做的直接意义就是使得显示的图像的临近像素点的梯度变大,即各像素点间区分度变大,这样就能更加明显地区分出差异效果。
例如,图片A的灰度值都在20以下,但确实又有灰度变化,如果你直接imshow,那么看起来几乎都是黑的。而采用imshow(A,[])后会从最小到最大拉伸显示。
如图1所示显示是对Lena图进行聚类之后的结果,上面的是没有拉升显示的,下面的进行了拉升显示的。可以明显看出拉升显示后的图像的亮度和对比度较原图有明显变化。
在Python中如何翻译imshow(A, [])呢?I_stretch = ((I-I.min())/(I.max()-I.min())*255).astype(uint8)
可以看出,这其实就是一个归一化的操作。
作者水平有限,暂时就写到这里。更深入的思考,留待下一次更新。