参考书:数字图像处理的MATLAB实现(第二版)冈雷萨斯
Chapter 2
image = imread(file);
2.2 灰度变换函数(Intensity Transformation Functions)
s = T ( r ) s = T(r) s=T(r)
2.2.1 函数:imadjust and stretchlim
g = imadjust(image,[low_in high_in],[low_out high_out],gamma)
整体函数表达意思
- 图像将根据设置的参数进行调整
- 1:将要调整的图像,实际传入的是图像的灰度值范围
- 将[low_in,high_in]范围内的值映射到[low_ou t,high_out]
- [0,low_in]和[high_in,255]的值将会被截去----低于low_in的都会置为0,高于high_in的都会置为1,即比目标值亮的,直接设置为最亮,比目标值黑的,直接设置为最黑,可以将除了需要部位意外的地方调到最大对比度。
- 整体范围都在[0,1]内
- gamma表示映射时曲线的形状,gamma默认为1(线性映射);gamma<1,映射被加权至较亮输出值,gamma>1,映射被加权至较暗输出值。
举个栗子
原图像图下:
例1. 图像反转
g = imadjust(image,[0 1],[1 0]);
或
g = imcomplement(image);
得到结果如下:
例子2. 加强部分区域灰度,以展示感兴趣区域
g = imadjust(image,[0.5 0.75],[0 1]);
对于灰度在[0.5,0.75]之间的像素,将其等比例映射到[0,1]范围内,低于0.5的都会置为0,高于0.75的都会置为1.
得到效果如下:
Low_high = stretchlim(image);
g = imadjust(f,stretchlim(image),[ ]);
stretchlim可以通过压缩灰度图像的低端和拓展高端,产生效果和上述例2类似。
效果图:
stretchlim(image)实际返回的就是[low_in high_in],且它默认返回的是image中像素饱和度底部和顶部的1%,故和例2的[0.5,0.75]相比,图像显得暗了很多。
stretchlim通用语法格式:
stretchlim(image,tol)
tol默认值为[0.01 0.99],当tol为某单个标定值value,则image参数中的[low_in high_in]值分别为[value 1-value];如果指定tol为0,则image为像素饱和度会设置为[min(f(😃),max(f(😃)]