MATLAB图像点运算
1、线性点运算
图像成像设备以及图像记录设备的动态范围太窄等原因,会导致图像成像曝光率不足或者过度,这时就会用到点运算将灰度图像的线性范围进行拓展,线性点运算是指灰度变换函数为线性函数时的运算
示例1:对图像进行线性点运算
编写对应m文件如下:
clear all;
a=imread('coins.png');
a1=a+30;%%图像灰度值增加30%%
a2=1.5*a;%%图像对比度增加1.5倍%%
a3=0.5*a;%%图像对比度减少为原来的0.5%%
subplot(2,2,1)
imshow(a);
title('原始图像');
subplot(2,2,2)
imshow(a1);
title('灰度值增加图像');
subplot(2,2,3)
imshow(a2);
title('对比度增加图像');
subplot(2,2,4)
imshow(a3);
title('对比度减少图像');
程序运行结果如下图:
2、非线性点运算
非线性点运算是指输出灰度值和输入灰度值成非线性函数关系,非线性点运算对应非线性的灰度映射函数,典型的非线性函数有平方函数,值域函数,多值量化函数等,之所以需要非线性点运算,是因为在成像时成像设备本身可能存在非线性失衡,需要对其进行校正。
示例:对图像进行非线性点运算
编写对应的m文件如下:
clear all;
a=imread('cameraman.tif');
subplot(1,3,1)
imshow(a);
title('原始图像');
x=1:255;
y=x+x.*(255-x)/255;%%绘制曲线图%%
subplot(1,3,2)
plot(x,y);
title('函数曲线图');
b=double(a)+double(a).*(255-double(a))/255;
subplot(1,3,3)
imshow(uint8(b));
title('非线性点运算处理图像');
程序运行结果如下图:
3、直方图与点运算
直方图是多种空间域处理技术的基础,直方图能够有效用于图像的增强,直方图在软件中也可以很方便的进行计算,是实时图像处理的一个重要工具,matlab中使用imhist函数来产生直方图,其调用格式如下:
imhist(I);
I表示图像矩阵,返回一幅图像,显示I的直方图
线性点运算只是将图像的直方图拉伸后平移,形状基本不发生变化,超过灰度边界的积累在边界上,非线性点运算其直方图的形状会发生明显的变化
示例:点运算对直方图的影响
编写对应的m文件如下:
a=imread('cameraman.tif');
subplot(1,2,1)
imhist(a);
title('原始图像')
b=1.5*double(a)+0.5;%%对直方图进行变换%%
subplot(1,2,2)
imhist(uint8(b));
title('变换后的图像');
程序运行结果如下图:
4、直方图均衡化是指对图像进行非线性拉伸,重新分配图像元值,是一定灰度范围内像素元值大致相同,matlab中histeq用于直方图均衡化,该函数调用格式如下:
J=histeq(I);
I表示原图像,J表示直方图均衡化后的图像
示例:对图像进行直方图均衡化
编写对应m文件如下:
a=imread('peppers.png');
subplot(2,2,1)
imshow(a);
title('原始图像');
b=rgb2gray(a);
subplot(2,2,2)
imhist(b);
title('原始图像直方图');
b1=histeq(b);
subplot(2,2,3)
imshow(b1);
title('直方图均衡化后图像');
subplot(2,2,4)
imhist(b1);
title('均衡化后图像直方图');
程序运行结果如下图:
5、另外函数adapthisteq函数首先对图像进行直方图均衡化,然后利用双线性插值法把各个小块进行拼接,以消除局部块造成的边界。该函数调用格式如下:
J=adapthisteq(I);
其中I表示原图像,J表示均衡化后的图像
示例:使用函数adapthisteq函数对图像进行直方图均衡化
编写对应m文件如下:
a=imread('eight.tif');
subplot(1,2,1)
imshow(a);
title('原始图像');
b=adapthisteq(a);
subplot(1,2,2)
imshow(b);
title('adapthisteq均衡化图像');
程序运行结果如下图:
6、直方图规定化
直方图规定化就是通过一个灰度函数,将原来的灰度图改造为我们所需要的灰度图像
示例:利用直方图规定化对图像进行处理:
编写对应的m文件如下:
a=imread('tire.tif');
subplot(2,2,1)
imshow(a);
title('原始图像');
subplot(2,2,2)
imhist(a);
title('原始图像直方图')
y=20:1:200;%%规定化函数%%
b=histeq(a,y);
subplot(2,2,3)
imshow(b);
title('规定化后图像')
subplot(2,2,4)
imhist(b);
title('规定化后图像的直方图');
程序运行结果如下: