第二章 图像的点运算

图像的点运算主要用于改变一副图像的灰度分布范围。操作对象是单个像素值,输出像素值只与输入像素值有关。

灰度直方图

横坐标表示图像的灰度值,取值为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版)》左飞著,电子工业出版社。此为学习笔记。

你可能感兴趣的:(第二章 图像的点运算)