【数字图像处理+MATLAB】解决 imshow 函数图像显示亮度异常问题:自动调整亮度范围使图像能正确显示
问题描述
在MATLAB中,使用imshow
函数进行图像显示时,图片亮度显示异常。
imshow(im_avg);
执行上述代码后,得到的图片亮度异常,如下图所示:
原因分析
在MATLAB中,imshow
函数的亮度显示规则是基于图像数据的类型来决定的。如果在调用imshow
函数时,未明确指定亮度范围,那么函数会根据图像数据的类型,采用默认的亮度范围。
- 对于
uint8
(无符号8位整数)类型的图像数据,imshow
默认的亮度范围是0到255。 - 对于
uint16
(无符号16位整数)类型的图像数据,imshow
默认的亮度范围是0到65535。 - 对于
double
或single
类型的图像数据,imshow
默认的亮度范围是0.0到1.0。
当图像数据的实际亮度范围与imshow
的默认范围不一致时,就可能出现图片显示过亮或过暗的情况。例如,对于一个double
类型的图像,其像素值的范围是0到255,如果直接使用imshow(I)
进行显示,由于imshow
会将所有大于1的像素值都显示为白色,因此图片会显示过亮。在这种情况下,应使用imshow(image, [])
来自动调整亮度范围,使图像能够正确显示。
解决方案
在调用imshow
函数时,添加第二个参数[]
,以自动调整亮度范围。修改后的代码如下:
imshow(im_avg, []);
执行修改后的代码,图片能够正常显示,如下图所示: