图像点运算
点运算又称为对比度增强、对比度拉伸或灰度变换,是一种通过对图像中的每一个像素值进行运算的图像处理方式。它将输入图像映射为输出图像,输出图像每个像素点的灰度值仅由对应的输入像素点的灰度值决定,运算结果不会改变图像内像素点之间的空间关系。简而言之,点运算仅仅改变了图像像素点的灰度值。
其运算的数学关系式为:
B(x,y)=f [A(x,y)]
根据灰度变换的数学关系,点运算可以分为线性灰度变换、分段线性灰度变换和非线性灰度变换3种。
1、线性灰度变换
假定原图像A(x,y)的灰度变换范围为[a,b],处理后的图像B(x,y)的灰度扩展为[c,d],线性灰度变换运算的数学表达式为:
B(x,y)=[(d-c)/(b-a)][A(x,y)-a]+c
MATLAB实现–imadjust()函数
示例:
% 将低对比度灰度图像读入工作区并显示
I=imread('G:\picture\Fig0230(a)(dental_xray).tif');
subplot(1,3,1); imshow(I);
% 调整图像对比度,imadjust 对所有像素值中最低的 1% 和最高的 1% 进行饱和处理并显示
J=imadjust(I);
subplot(1,3,2); imshow(J);
% 在指定对比度限制情况下调整灰度图像对比度
K=imadjust(I,[0.3,0.7],[]);
subplot(1,3,3); imshow(K);
运行结果:
2、分段线性灰度变换
为了突出图像中感兴趣的目标或者灰度区间,可采用分段线性法,将需要的图像细节灰度拉伸、对比度增强。
MATLAB实现
示例:
% 读入原图像并显示
I=imread('G:\picture\Fig0226(galaxy_pair_original).tif');
I=im2double(I);
subplot(1,2,1); imshow(I);
[M,N]=size(I); %获得灰度图像I的行数M和列数N
J=zeros(M,N);
%对灰度图像I进行分段处理
for x=1:M
for y=1:N
if (I(x,y)<=0.3)
J(x,y)=I(x,y)*2;
else if(I(x,y)>0.3&&I(x,y)<=0.7)
J(x,y)=I(x,y)+0.2;
else(I(x,y)>0.7)
J(x,y)=I(x,y);
end
end
end
end
subplot(1,2,2); imshow(J);
运行结果:
3、非线性灰度变换
当输出图像的像素点灰度值和输入图像的像素点灰度值不满足线性关系时,这种灰度变换称为非线性灰度变换。
MATLAB实现
示例:
% 读入原图像并显示
I=imread('G:\picture\Fig0226(galaxy_pair_original).tif');
I=im2double(I);
subplot(1,2,1); imshow(I);
J=(log(I+1))/2; %进行基于常用对数的非线性灰度变换
subplot(1,2,2); imshow(J);
运行结果: