图像的点运算主要用于改变一副图像的灰度分布范围。操作对象是单个像素值,输出像素值只与输入像素值有关。
灰度直方图
横坐标表示图像的灰度值,取值为0~255
纵坐标表示出现次数的多少货概率的高低。
matlab中,函数imhist()来获得灰度直方图。imhist(I, n) n可指定灰度级数。
[counts1, x] = imhist(…)
返回值counts为直方图的数据向量,counts(i)表示第i个灰度区间中的像素数目。
stem()函数绘制针形图。
图像灰度化方法
- 平均值法:每个像素的值为RGB三个分量的平均值
- 最大值法:每个像素的值为RGB三个分量的最大值
- 加权平均值法:基于红绿蓝三个分量不同的权值,然后相加。
R=G=B=0.299R+0.587G+0.114B为最合理的灰度图像
利用r = a(:,:,1);即可提取出R色彩灰度图。GB同理。
灰度线性变换
灰度线性变换,就是将图像的像素值通过指定的线性函数进行变换,以此增强或者减弱图像的灰度。
g(x,y) = k·f(x,y) + d
- k>1时
此时用于增加图像对比度,图像的像素值在变换后全部增大,整体显示效果增强。 - k=1时
此时用于调节图像亮度。通过改变d值来达到增加或者减少图像亮度的目的。 - 0
此时效果与k>1时恰恰相反,图像的对比度和整体效果都被削弱了。 - k<0时
这种情况下,原始图像中较亮的区域会变暗,较暗的区域变量,若k=-1, d=255则可以实现反色效果。
matlab对于矩阵计算有着先天的优势,如果换一种环境,则需要优化处理方法。由于256中取值只对应256种变换结果,可使用灰度映射表的方法,对所有灰度取值提前进行变换运算,并将结果保存在一个大小为256的数组中,提高效率。
灰度非线性变换
灰度对数变换
基本形式为:
y=log(1+x)/b
函数图见p43
对数变换扩展低灰度值而压缩高灰度值,让图像灰度分布更加符合人的视觉特征。可以增加图像暗部的细节。
灰度幂次变换
基本表达式为:
y = cx^r
当指数稍大时,如r>=2时,变换曲线趋近于一条垂直线,产生的图像近乎全黑,故实际引用时会是它们取值在0和1之间。
y=255c(x/255)^r 修改变换公式,使x和y取值在0~255之间
- r<1时,扩展低灰度值,压缩高灰度值,图像变亮
- r>1时,扩展高灰度级,压缩低灰度级,图像变暗
幂次宾欢常用于显示设备的伽玛校正中。
matlab自带灰度变换基本函数imadjust()
%将low_in到high_in之间的值映射到low_out到high_out之间的值。
%默认均为[0 1],如果取为[0 1],[1 0]即可实现反色效果.
%gamma用于调整曲线形状,见p46
灰度指数变换
基本表达式为
y = b^(c(x-a))-1
指数变换扩展图像高灰度级,压缩低灰度级。
灰度拉伸
灰度拉伸为改变图像对比度的常用方法。
其与线性变换类似,不过采用的是分段线性变换。
通常用两个控制点(x1,y1),(x2,y2)分三段实现灰度拉伸。
中间线段斜率大于1,可以提高图像的对比度;小于1降低对比度。
若x1=x2,y1=0,y2=255,将产生一个二值图像。
见p51
由此观之,imadjust()的两个参数,low_in与high_in即为x1,x2; low_out与high_out即为y1,y2。用此函数可以轻松实现灰度拉伸。
灰度均衡
对于连续的灰度密度函数,均衡公式为:
离散型的灰度均衡公式为
DB表示转化后的灰度值,DA是转化前的灰度值,Hi表示第i级的像素个数,A0为像素总数。
matlab中用histeq()函数实现灰度均衡化
直方图的规定化
规定化即为获得具有制定直方图的输出图像。又称直方图匹配。
实现过程为现将原图做均衡化,
再将匹配图像也做均衡处理,两者便相等,再求得反函数,可得:
z = F-1(s)=F-1[T(r)]
带入原图像素r即可获得输出图像。
matlab中应用J = histeq(I, hgram)来实现。
可将J变为以hgram为直方图的图像。
以上内容来自《数字图像处理:原理与实践(matlab版)》左飞著,电子工业出版社。此为学习笔记。