图像的感知和获取
我们感兴趣的多数图像都是用“照射 ”源和形成图像的场景元素对光能的反射或吸收而产生的。
通过将输入电能和对特殊类型检测能源敏感的传感器材料组合,把输入能源转变为电压。输出电压波形是传感器的相应,通过把传感器响应数据化,从每一个传感器得到一个数字量。

简单图像形成模型
我们用形如f(x,y) f(x,y)的二维函数来表示图像。 在空间坐标(x,y) (x,y)出,f f的值或幅度是一个证的标量,其物理意义有图像源决定。当一副图像由物理过程产生时,其亮度值正比于物理源(x线)所辐射的能量。

入射到被观察场景的光源照射量
场景中物体所反射的光照总量
图像的取样,量化
图形的采样和量化是连续图像的离散化。
图形的采样: 这个应该是空间分辨率的概念,单位距离内采样的点的间隔。
图像的量化: 像素分辨率的概念。 简单的说就是灰度级。 普通量化灰度级是0~256。
《数字图像处理》中有一个图形很好的说明的采样和量化的概念。

数字图像的表示


图像的大小
s=M∗N∗k s=M∗N∗k M,N是图像的大小,相当于矩阵的行列的大小。 k是灰度级的指数。 k是灰度级的指数。
灰度级L=2 k L=2k
空间内插
内插:是用已知数据来估计未知位置的处理。
最近邻域插值法
// 图像放大 *2
int x = 0,
y = 0,
i = 0,
j = 0;
for(int y = 0; y < 256; y++)
{
for(int x = 0; x < 256; x++)
{
i = y * 2;
j = x * 2;
OutputArray[i][j] = InputArray[y][x];
}
}
// 最近邻内插值法
//从x轴开始
for(int y = 0; y < 512; y++)
{
for(int x = 0; x < 512; x+=2)
{
for(int m = 1; m < 2; m++)
{
Outputarray[y][x-m] = Outputarray[y][x];
}
}
}
//y轴进行插值
for(int x = 0; x < 512; x++)
{
for(int y = 0; y < 512; y+=2)
{
for(int m = 1; m < 2; m++)
{
Outputarray[y-m][x] = Outputarray[x][y];
}
}
}
最近邻内插法:直边缘会严重失真。
双线性内插
OutputArray(x,,y)=ax+by+cxy+d OutputArray(x,,y)=ax+by+cxy+d
其中 4个系数可由4个用(x,y) (x,y)点最近邻点写出的未知方程确定. 这个是《数字图像处理》上面的一段话。读的很是不明白, 所以就在网上找了一下相关的博客。
线性插值
已知数据(x 0 ,y 0 ) (x0,y0)与数据(x 1 ,y 1 ) (x1,y1)要计算[x 0 ,x 1 ] [x0,x1]区间内某一位置x x在直线上的值,
y−y 0 x−x 0 =y 1 −y 0 x 1 −x 0 y−y0x−x0=y1−y0x1−x0 这个公式是直线方程的两点式
y=x 1 −xx 1 −x 0 y 0 +x−x 0 x 1 −x 0 y 1 y=x1−xx1−x0y0+x−x0x1−x0y1
这个公式其实就是用x x到,x 1 x1的距离作为一个权重,用于y 0 y0和y 1 y1的加权。双线性插值本质就是在两个方向上做线性插值。
双线性插值
在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。

假如我们想得到未知函数f f在点上的值,假设我们已知函数f f在四个点的值。最常见的情况,f f就是一个像素点的像素值。
首先在方向进行线性插值,得到
f(R 1 )≈x 2 −xx 2 −x 1 f(Q 11 )+x−x 1 x 2 −x 1 f(Q 21 ) f(R1)≈x2−xx2−x1f(Q11)+x−x1x2−x1f(Q21) where R 1 =(x,y 1 ) R1=(x,y1)
f(R 2 )≈x 2 −xx 2 −x 1 f(Q 12 )+x−x 1 x 2 −x 1 f(Q 22 ) f(R2)≈x2−xx2−x1f(Q12)+x−x1x2−x1f(Q22) where R 2 =(x,y 2 ) R2=(x,y2)
然后在Y Y方向进行线性插值
综合起来就是双线性插值最后结果:
f(x,y)≈f(Q 11 )(x 2 −x 1 )(y 2 −y) (x 2 −x)(y 2 −y)+f(Q 21 )(x 2 −x 1 )(y 2 −y) (x 2 −x)(y 2 −y)+f(Q 12 )(x 2 −x 1 )(y 2 −y) (x 2 −x)(y 2 −y)+f(Q 22 )(x 2 −x 1 )(y 2 −y) (x 2 −x)(y 2 −y) f(x,y)≈f(Q11)(x2−x1)(y2−y)(x2−x)(y2−y)+f(Q21)(x2−x1)(y2−y)(x2−x)(y2−y)+f(Q12)(x2−x1)(y2−y)(x2−x)(y2−y)+f(Q22)(x2−x1)(y2−y)(x2−x)(y2−y)
由于图像双线性插值只会用相邻的4个点,因此上述公式的分母都是1.
例如:如果选择一个坐标系统使得 f 的四个已知点坐标分别为 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那么插值公式就可以化简为
f(x,y)≈f(0,0)(1−x)(1−y)+f(1,0)x(1−y)+f(0,1)(1−x)y+f(1,1)xy f(x,y)≈f(0,0)(1−x)(1−y)+f(1,0)x(1−y)+f(0,1)(1−x)y+f(1,1)xy.
值得注意的是坐标系的选择问题,或者说源图像和目标图像之间的对应问题。
源图像和目标图像的原点(0,0) (0,0)均选择左上角,然后根据插值公式计算目标图像每点像素,假设你需要将一副5×5 5×5的图像缩小成3×3 3×3,那么源图像和目标图像各个像素之间的对应关系如下 :
image 1
从图中可以很明显的看到,如果选择右上角为原点(0,0) (0,0),那么最右边和最下边的像素实际并没有参与计算,而且目标图像的每个像素点计算出灰度值也相对于源图像偏左偏上。
那么,让坐标加1或者选择右下角为原点怎么样呢? 很不幸,还是一样的效果,不过这次得到的图像将偏右偏下。
最好的方法就是,两个图像的几何中心重合,并且目标图像的每个像素之间都是等间隔的。并且都和两边有一定的边距。
image 2
int x = (i + 0.5) * (m/a) - 0.5 //(m/a)(n/b) 是源图像和目标图像的行列之比
int y = (j + 0.5) * (n/b) - 0.5
//替换下面公式
int x = i * (m/a);
int y = j * (n/b);
图像缩小(down sampled) 下采样或者降采样。 目的:
1、使得图像符合显示区域的大小;2、生成对应图像的缩略图。
图像放大(up sampled)上采样或者图像插值。
主要目的:放大原图像,从而可以显示在更高分辨率的显示设备上。
对图像的缩放操作并不能带来更多关于该图像的信息, 因此图像的质量将不可避免地受到影响。然而,确实有一些缩放方法能够增加图像的信息,从而使得缩放后的图像质量超过原图质量。
2.6.2线性操作和非线性操作
iamge 1
image 2
本文详细介绍了图像采样和量化的过程,包括空间分辨率和像素分辨率的概念,并深入探讨了最近邻域插值法和双线性插值法的具体实现方式及优缺点。
1万+

被折叠的 条评论
为什么被折叠?



