一幅图像可以定义成一个二维函数,其中x和y是空间坐标(平面),而在任何一对空间坐标(x,y)处的幅值f成为图像在该点处的强度或者灰度,当x,y和灰度值f是有限的离散数值时, 我们成为该图像为数字图像。
灰度是表明图像明暗的数值,即黑白图像中点的颜色深度,范围一般从0到255,白色为255 ,黑色为0,故黑白图片也称灰度图像。灰度值指的是单个像素点的亮度。灰度值越大表示越亮。
图像形成模型
- 0 < f(x, y) < ∞
函数f(x, y)可以由两个分量来表示:入射分量和反射分量,分别表示为i(x,y),r(x,y),f(x, y) = i(x,y)r(x,y)
0 < i(x, y) < ∞
0 < r(x, y) < 1
单色图像在任何坐标(x0, y0)处的强度(灰度)表示为:
- ι = f(x0, y0)
由上式得取值范围:
- Lmin ≤ ι ≤ Lmax
区间[Lmin, Lmax]成为灰度级(强度级), 实际情况常常令该区域为[0,L-1],其中ι=0为黑色,ι=L-1在灰度级中为白色。所有中间值是从黑色到白色之间变化的灰度色调。
python-opencv示例:
1 | IN[1]: import numpy as np |
图像内插
从根本上看,内插是用已知数据来估计未知位置的数值的处理。比如调整图像的大小(收缩和放大),这是基本的图像重取样方法。
- 最近邻内插法
比如一幅图由500x500放大到750x750,先创建一个750x750的网格,然后缩小和原图像匹配,显然收缩后的750x750网格像素间隔要小于原图像的像素间隔。然后我们在原图像中寻找最接近的像素,并把该像素的灰度赋给750x750网格的新像素。当我们完成对网格中所有点的灰度赋值后,就把图像扩展到原来规定的大小,得到图像。
这种方法把原图像中最近邻的灰度赋给了每个新位置。
- 双线性内插
我们使用4个最近邻去估计给定位置的灰度,由v(x,y)来表示灰度值,公式为
v(x,y) = ax + by + cxy + d
双三次内插
使用16个最近邻点,公式为:
- v(x,y) = ∑(3 i=0)∑(3 j=0)a(ij)x^i*y^j
双三次内插在保持细节方面比双线性内插要好,商业图像编辑软件标准内插方法,比如Adobe Photoshop
在matplotlib.pylot.imshow的一个选项中,interpolation是选择内插方法