点运算
点运算又称为对比度增强、对比度拉伸或灰度变换,是一种通过图像中的每一个像素值(即像素点上的灰度值)进行运算的图像处理方式。它将输入图像映射为输出图像,输出图像每个像素点的灰度值仅由对应的输入像素点的灰度值决定,运算结果不会改变图像内像素点之间的空间关系。
点运算可以扩展所需部分的灰度信息的对比度,使之占据显示灰度级范围的更大一部分。点运算以预定的方式改变一幅图像的灰度直方图。除了灰度级的改变是根据某种特定的灰度变换函数进行之外,点运算可看作是“从像素到像素”的复制操作。点运算产生的输出图像,其图像中每个像素点的灰度值仅由相应输入点的灰度值确定。
线性点运算
点运算从数学上可以分为线性点运算和非线性点运算两类。
线性点运算是指输入图像的灰度级与输出图像的灰度级呈线性关系。
其函数形式为:
t=as+b (4.1)
其中,s为输入图像各像素点的灰度值,t为相应输出图像各像素点的灰度值。
(1)如果a=1且b=0,则t=s,即输入图像与输出图像相同。如果a=1且b≠0,则输出图像的灰度值上移或下移,整个图像在显示会更亮或更暗。
(2)如果a>1,则输出图像对比度增大,输出图像显示效果较输入图像会更亮。
(3)如果a<1,则输出图像对比度降低,输出图像显示效果较输入图像会更暗。
(4)如果a<0,即a为负值,则原输入图像的暗区域将变亮,亮区域将变暗。
程序示例
%线性点运算MATLAB示例程序如下:
I = imread('rice.png'); %读取输入图像
I = im2double(I); %函数im2double将输入换成double
类型。
%如果输入图像是unit8,unit16或者是二值的logical类型,则
函数im2double将其值归一化到0~1之间。
a = 2.5;b=-70;
J = a.*I+b/255; %增加对比度
c = 0.7;d=-30;
K = c.*I+d/255; %减小对比度
e = 1;f = 70;
L = e.*I+f/255; %线性增加亮度
g = -1;h = 255;
P = g.*I+h/255; %图像反色
subplot(2,3,1),imshow(I);title('原图像');
subplot(2,3,2),imshow(J);title('增加对比度');
subplot(2,3,3),imshow(K),title('减小对比度');
subplot(2,3,4),imshow(L),title('线性平移增加亮度');
subplot(2,3,5),imshow(P),title('图像反色');
图像效果