Chap2 灰度变换与空间滤波

灰度变换函数

imadjust 和 stretchlim

函数imadjust是一个基本的图像处理函数工具箱函数,语法格式为:

1
g = imadjust(f,[low_in high_in], [low_out high_out], gamma

将处在[low_out high_out]区间的灰度值直接映射,其余值在区间端点截断

eg:明暗反转

1
g1 = imadjust(f,[0,1],[1 0])

有时能够自动地使用函数imadjust而不必关心上面讨论的低参数或者高参数是非常有用的。这时可使用函数strechlim,其基本语法为

1
2
Low_High = strechlim(f)
% 返回一个二元向量,用于实现对比度拉伸,增强原图对比度

对数及对比度拉伸变换

对数和对比度拉伸变换是动态范围运算基本工具。对数变换通过如下表达式实现:

1
g = c * log(1 + f)

主要应用是压缩动态范围。例如当傅里叶频谱的取值区间为[0,10e6]或更高时,高值部分占优势,低灰度值的可见细节部分易丢失,通过计算对数让其变得更易处理

执行对数变换时,我们希望使得压缩值出现在显示的完整范围内,例如8bit:

1
gs = im2uint8(mat2gray(g));

matgray()限制到区间[0,1],im2uint8先知道[0,255]

sigmoid函数是对比度拉伸变换函数 \[ s = T(r) = \frac{1}{1 + (\frac{m}{r})^E} \]

  • r为输入图像的灰度
  • s是输出图像的相应灰度值
  • E来控制该函数的斜率

实现:

1
2
g = im2uint8(mat2gray(log(1 + double(f))));
imshow(g)

指定任意灰度变换

设T()是一个列向量,表示变换函数

1
g = interp1(z,T,f);

f为输入图像,g为输出图像,T为前述列向量,z是一个长度与T相同的列向量,形成方式如下:

1
2
z = linspace(0,1,numel(T));
%该函数在a,b(前两个参数构成的区间)进行线性间隔取值

对f中的一个像素值,interp1先寻找横坐标值z,然后寻找T中的相应值,并将找到的内插值输出到g

test

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!