- 直方图变换
- 灰度变换
- 点运算
- 几何变换
直方图变换
1.灰度直方图
灰度直方图:数字图像中每一灰度级像素出现的频次(该灰度级的像素数目)(也可以标准化到概率的表示)
灰度直方图性质
- 无空间信息。(一种值的统计,丢弃位置信息)
- 直方图与图像一对多的关系
- 可叠加性(全图=子图叠加)
直方图反映图像的清晰程度,直方图均匀分布时,图像最清晰。
判定一幅图像是否清晰,查看是否合理的利用了全部允许的灰度级。
一幅图像应该尽可能利用全部的灰度级
2.直方图均衡化
直方图修正:通过灰度映射函数$G_{new} = T(G_{old})$,将原灰度直方图改造成所希望的直方图。
直方图均衡化是一种最常用的直方图修正,把直方图分布改造成均匀直方图分布,均衡化后,图像直方图是平直的,即各灰度级出现频数相同,图像看起来更清晰了。
直方图均衡化灰度映射函数
-
连续灰度级情况:概率密度函数为P(r),0<= r <= 1,代表灰度级。
变换函数s=T(r),使直方图变平直。
要求:
- [0,1]范围内,T(r)是单增函数,且T的值域为[0,1]
- 反变换函数为单减函数,值域也为[0,1]。
-
数字图像的直方图均衡化:设总像素n个,分L个灰度级,第k个灰度级出现的概率P(Rk)=Nk/N,Nk表示第k个灰度级出现的频数。
变换函数:连续变换函数离散化,概率求和。公式如下,图3
Matlab处理
- i2 = histeq(i1),对i1直方图均衡化
- imhist(i2) ,绘制i2的直方图
- i2 = adapthisteq(i1),改进的直方图均衡化效果,针对空间信息做了改进。
3.直方图规定化(直方图匹配)
修改一幅图像的直方图,使得它与另一幅图像的直方图匹配或具有一种预先规定的函数情况。
目标:突出感兴趣的灰度范围,改善图像质量。
场景:上一小节,我们将灰度分布不均的图像通过均衡化转换为灰度理论均匀(分布概率密度曲线平直)的图像,增强了图像效果,但是实际场景,我们可能要突出某一些部分,又或是我们发现灰度在靠近0和1的部分太暗或太亮会导致细节模糊甚至丢失,自然的我们想到类似于均衡变换,将不均的概率分布曲线转换成我们特定的预设的一种灰度分布上(如高斯分布),以实现我们需要的增强效果。
方法:1)直接通过f到g的映射,f为原函数,g为变换后的函数,但过程可能很复杂。2)通过均衡变换为中介,将原图灰度分布f1和预设的直方图分布f2都做一个变换到均衡分布,分布使用映射函数s和t,那么对原图做s变换,再做t的反变换就得到了f2的分布。过程简单。
步骤如图6所示:
预设分布:规定化的效果较好,但是前提是需要知道图像的变换的较好的预设分布,这里需要根据具体情况分析,比如根据图中的场景,能分析该图主要应该呈现两种色调,那么对预设的分布,我们可以给出一种“双峰”的灰度分布,那么处理后的图像就会趋于呈现两种色调。
特例:二值图,双峰分布图中间添加阈值。
灰度变换
场景:曝光不足或过度等原因,产生对比度不足,使图像细节分辨不清。
方法:使用灰度变换方法解决这些问题。
对比度:简单讲就是最白与最黑的亮度单位的相除值,体现的是灰度级的max和min的极差。
灰度级变换:空间域点运算,通过某个变换函数有:g(x,y)=T(f(x,y)),T即为变换函数。也可以写作R = T(r)
1.线性灰度变换
变换函数T为线性函数。
-
加常数:会缩小动态范围,降低对比度,调节整体亮度,可能会损失某一部分灰度等级。如下图所示,图7
(特例)图像反转:g(x,y)=255-f(x,y),简单理解为"黑白颠倒".
乘常数:g(x,y)=Cf(x,y).改变动态范围。
-
分段线性变换:变换函数采用分段的线性函数,突出感兴趣的部分。
(特例)削波,cliping。
(特例)阈值化,thresholding。二值图。
(特例)灰度窗口变换,将某一区间的灰度级和其他部分(背景)分开。
非线性灰度变换
- 对数变化,低灰度区扩展,高灰度区压缩
- 之所变化,高灰度区扩展,低灰度区抑制。
- 幂函数。
- LUT变换,Look Up Table,查找表。一种映射表。
Matlab处理
- bc = imcomplement(b),图像反转
- th = imadjust(t,[],[],0.5),用于进行图像的灰度变换
图像运算
1.算术运算:加减乘除
- 加法:C(x,y)=A(x,y)+B(x,y)。去除“叠加性”噪音;生成图像叠加效果。
- 减法:与加法类似。
- 乘法:C(x,y)=A(x,y)*B(x,y)。局部显示;二值蒙版图像与原图像做乘法。
- 除法:不常用
2.逻辑运算:与或非
3.比较运算:如,取平均,最大,最小
图像几何变换
几何失真分为系统失真和非系统失真,系统失真是有规律的、能预测的,非系统失真则是随机的。
- 镜头畸变
- 遥感图像矫正:飞行器和地球相对运动造成呈现扫描不规整。
- 图像配准:工业生产、医院中装置定位。
几何变换是图像中物体的空间变换,可以看成是图像内各物体在图像内移动的过程,如转动、扭曲、倾斜、拉伸。
1.基本几何变换的定义
原图为f(x,y),变换为,x'=T1(x,y),y'=T2(x,y),几何变换仅对x,y坐标做变换,灰度值不变。(注意:这里的变换不简单为单个变量的变换,如x'的变换实际上同时涉及变量x和y)
目标图像为g(x,y)=f(T1(x,y),T2(x,y))
2.常用的几何变换
-
平移变换。g(x,y)=f(x+tx,y+ty),原图平移向量为(tx,ty)。(这里需要注意计算机呈像中的坐标选取,是左上角为坐标原点的,理论研究中采用常用的数学坐标)。写做矩阵形式为,图8
-
镜像:水平镜像和垂直镜像
-
水平镜像:沿Y轴翻转。g(x,y)=f(width-x,y),矩阵形式为图9
-
垂直镜像:沿x轴翻转。g(x,y)=f(x,heigh-y),矩阵形式为图10
-
水平镜像:沿Y轴翻转。g(x,y)=f(width-x,y),矩阵形式为图9
-
转置:x,y坐标对换。与旋转是不同的,事实上,转置后的图与旋转90度后的图是水平镜像关系。矩阵表示如图11
-
旋转变换:绕原点旋转a度,(注:逆时针为正向角度)。旋转后画布变大,图像增大。数学关系用极坐标表示较为方便。如图12
通常的做法,是以图像中心做旋转,方法:
- 图像中心平移到原点
- 顺时针以原点做旋转
- 图像中心平移回原坐标
以上三个变换可以写成三种变换的矩阵相乘的形式,就可以一步到位。
问题:旋转中会出现锯齿、网纹、断裂。
- 像素的方向是固定的,纵横。旋转的时候并不会按某一个旋转角度分布像素,这样旋转后像素点就会有交错,不规整,错位。像素排列不完全按照原有的相邻关系。
- 计算过程中,xy的映射涉及到三角函数,会进行浮点数取整,最终造成某些点空洞(没有取值),漏点。
问题的本质都是应为像素值填充不是连续的。
解决办法:插值填充。
-
缩放变换:缩小的时候要满足采样定理,否则会发生信息丢失;放大的时候需要对空位填入适当的新值,是信息的估计。矩阵表示如下图13.
-
拉伸变换:混合的几何变换,或者说是几何变换的一般形式。如下图14
3.灰度级差值
解决的问题:旋转中出现的漏点、放大中新增的空点、拉伸中的空点,都存在未知像素值的点。
解决方法:插值法,利用邻域的像素来估计新的像素值。
a)最邻近插值:重复最临近点,取最近点的像素值。简单,但效果一般,放大倍数太大时会出现马赛克现象。
b)双线性插值:根据该空点上下左右4个点进行两次插值。f(x,y)=ax+by+cxy+d。(xy两个方向上都取线性变换值)
c)三次立方插值(立方卷积插值):差值函数为S(x)(是一个拟合的正弦差值函数,sinx/x,这是信息论中已知的优秀的差值算法,认为图像中的任何两个连续点的灰度值不是线性变换,而是一种sinx/x的函数,故采用拟合该函数的一个立方差值函数来代替计算),如下图15
待求像素的灰度值由周围16个点的灰度值加权内插得到,计算量大,效果较好。矩阵表示为图16
实践任务
Matlab和Python分别实现下列任务
- 加载图像
- 预备任务:彩色图像到灰度图像的变换(因为之后的学习大多处理灰度图,所有需要将彩色图变换到灰度图)
- 实践1:灰度图及其灰度直方图,和均衡化后的图及其直方图,4个subplot做对比呈现
- 实践2:灰度图按高斯分布和双峰分布做直方图匹配,给出4个subplot对比呈现
- 实践3:图像旋转,及插值处理。
- 实践4:图像高倍放大,及插值算法处理比较。