文章目录
数字图像处理
数字图像基础
图像内插
用于图像放大、缩小、旋转、几何校正等任务。首先确定变换前后的坐标对应关系,用src表示转换前的图像尺寸,dst表示转换后的图像尺寸,src’表示转换后图像对应于原图像的坐标。对于图像缩放,缩放系数 t = s r c / d s t t=src/dst t=src/dst,则dst对应在src中的坐标为 s r c ′ = d s t ∗ t src'=dst*t src′=dst∗t。考虑到转换后图像未处在原图像中间的情况,将公式修正为 s r c ′ = ( d s t + 0.5 ) ∗ t − 0.5 src'=(dst+0.5)*t-0.5 src′=(dst+0.5)∗t−0.5。对于旋转、矫正等使用相关公式计算src’后使用以下内插方法进行像素赋值。
|
|
- 最近邻内插
将距离src’最近的src像素赋值给src’。 - 双线性内插
利用src’最近的2*2个src像素确定赋值大小。
其中各式分母均为1。
参考资料:三十分钟理解:线性插值,双线性插值Bilinear Interpolation算法
- 双三次插值
利用src’最近的 4 × 4 4\times4 4×4个src像素值确定赋值大小。计算每个像素值到src’的距离,根据分段函数(这里选用BiCubic基函数)确定像素值的权值,对 4 × 4 4\times4 4×4个像素值进行加权求和得到src’。
例如对于点src’(1.5,1.5),距离最近的4*4坐标为(0,0),(0,1)···(3,3),对于点(0,0),X方向距离为1.5,Y方向距离为1.5,根据BiCubic基函数得到对应的权值 w ( 0 , 0 ) x w_{(0,0)}^{x} w(0,0)x(这里上标表示坐标方向不是乘方)和 w ( 0 , 0 ) y w_{(0,0)}^{y} w(0,0)y,则(0,0)点对于src’的贡献为该点处的灰度值 i × w ( 0 , 0 ) x × w ( 0 , 0 ) y i\times w_{(0,0)}^{x} \times w_{(0,0)}^{y} i×w(0,0)x×w(0,0)y。依次求得各点的贡献值后求和得到最终的src’。
参考资料:图像缩放之双三次插值法 - Lanczos插值(兰索斯插值)
基本思路与双三次插值类似,但是改变了基函数类型,并且使用的邻域范围不固定,可自由选择。Lanczos插值函数为:
插值公式为:
其中a为参数大小,x,y为待带插值位置,i,j为当前采样位置。可以设置不同的参数大小得到不同的效果。a取2适合于缩小插值,3适合于放大插值。在opencv中默认取4。
参考资料:Lanczos插值滤波器
几种插值算法对比研究
以上几种插值方法效果依次更好,但同时复杂度也依次提升。
像素距离度量
对于点A(x1,y1)与点B(x2,y2)有如下距离度量
- 欧氏距离
D e ( A , B ) = [ ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 ] 1 2 D_{e}(A,B)=[(x_{1}-x_{2})^{2}+(y_{1}-y_{2})^{2}]^{\frac{1}{2}} De(A,B)=[(x1−x2)2+(y1−y2)2]21与A距离小于r的点在半径为r的圆内。 - 城区距离(曼哈顿距离)
D 4 ( A , B ) = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ D_{4}(A,B)=\left |x_{1}-x_{2} \right |+\left |y_{1}-y_{2} \right | D4(A,B)=∣x1−x2∣+∣y1−y2∣与A距离小于r的点在半径为r的菱形内。 - 棋盘距离
D 8 ( A , B ) = m a x ( ∣ x 1 − x 2 ∣ , ∣ y 1 − y 2 ∣ ) D_{8}(A,B)=max(\left |x_{1}-x_{2} \right |,\left |y_{1}-y_{2} \right |) D8(A,B)=max(∣x1−x2∣,∣y1−y2∣)与A距离小于r的点在半径为r的正方形内。
灰度变换与空间滤波
基本的灰度变换函数
- 图像反转
对于灰度级为L-1的图像,反转定义为 d s t = L − 1 − s r c dst=L-1-src dst=L−1−src - 对数变换
d s t = c ∗ log ( 1 + s r c ) , 其 中 c 为 常 数 , s r c ≥ 0 dst =c*\log (1+src),其中c为常数,src\geq 0 dst=c∗log(1+src),其中c为常数,src≥0。对数变换扩展低像素值,压缩高灰度值。对数变换的一个重要作用是压缩图像动态范围,例如傅里叶频谱的图像显示通常经过了对数变换。 - 幂律( γ \gamma γ)变换
d s t = c ∗ s r c γ , 其 中 c 和 γ 为 正 常 数 dst=c*src^{\gamma},其中c和\gamma为正常数 dst=c∗srcγ,其中c和γ为正常数。又叫做伽马校正,通常用于设备产生的伽马响应的校正。当 γ < 1 \gamma<1 γ<1时可以扩展灰度级,用于处理整体偏暗的图片; γ > 1 \gamma>1 γ>1时可以压缩灰度级,用于处理整体偏亮的图片。
- 分段线性变换函数
对比度拉伸:通过设定不同的变换函数拉伸特定灰度范围内的图像。
灰度级分层:将特定范围内的灰度值设为给定值以突出特定灰度的图像。
比特平面分层:将灰度值用2进制表示,如256灰度级图像可表示为8位二进制数,将每一个像素同位的二进制数组成一幅图像(该图像只包含0和1),可得到8幅图像,即原图像的比特平面分层。其中层数越高对原图像灰度值的决定性越。可以根据分层后的图像重建原图像,并且不一定要使用所有图像,例如只使用最高的4层重建图像得到的图像丢失信息较少,单可以减少一半的存储空间。
直方图处理
直方图:统计图像中每个灰度值包含的像素点个数,绘制横轴为 0 ∼ L − 1 0\sim L-1 0∼L−1,纵轴为对应的像素点个数的柱状图称为直方图。将直方图纵轴除以图像总像素点数得到归一化直方图,反映每种灰度出现的概率。
- 直方图均衡化
输入图像s,求s的归一化直方图(由于灰度值为离散变量,可用数组表示为r[i]),再求其累计直方图s[i],则对于灰度i,转换公式为i’=(L-1)*s[i]。直方图均衡化的目的是为了扩展动态范围,使变换后的灰度概率接近均匀分布。例如:
项目 | - | - | - | - | - | - |
---|---|---|---|---|---|---|
原始灰度值 | 0 | 1 | 2 | 3 | 4 | 5 |
像素比例 | 0.3 | 0.4 | 0.2 | 0 | 0 | 0.1 |
累计比例 | 0.3 | 0.7 | 0.9 | 0.9 | 0.9 | 1 |
变换后灰度值=累计比例*最大灰度值 | 2(1.5) | 4(3.5) | 5(4.5) | 5(4.5) | 5(4.5) | 5(5) |
变换后比例 | 0 | 0 | 0.3 | 0 | 0.4 | 0.3 |
- 直方图规范化(匹配)
输入图像s和规定图像z,分别求s和z的直方图均衡化的灰度映射记为s->T(S)和z->T(z),令T(S)=T(z),则可建立s->T(s)=T(z)->z的映射关系。当T(z)->z的对应关系不唯一时,通常选择较小的作为映射结果。例如:
项目 | - | - | - | - | - | - |
---|---|---|---|---|---|---|
灰度值 | 0 | 1 | 2 | 3 | 4 | 5 |
输入像素比例 | 0.3 | 0.4 | 0.2 | 0 | 0 | 0.1 |
输入累计比例 | 0.3 | 0.7 | 0.9 | 0.9 | 0.9 | 1 |
变换后灰度值=累计比例*最大灰度值 | 2(1.5) | 4(3.5) | 5(4.5) | 5(4.5) | 5(4.5) | 5 |
规定像素比例 | 0 | 0.1 |