图像几何变换

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3 章 图像的几何变换
与原图比较, 有位置,角度 偏差
待测印鉴
标准印鉴
点 击 图 片 播 放 视 频
三维的平移
近朱者赤
图像的几何变换
图像的几何变换包括了图像的形状变换和
图像的位置变换。

图像的形状变换是指图像的放大、缩小与错切。 图像的位置变换是指图像的平移、镜像与旋转。 图像的仿射变换描述。 图像的变形及几何畸变校正
放大 5 倍
图 按最近邻域法放大五倍的图像
双线性内插(bilinear interpolation approach)
1-p p
a
b
f1=(1-p)×f([x],[y]) +p×f([x]+1,[y])
([x] , [y])
([x]+1 , [ y]) q x ,y 1- q
f(x,y)=(1-q)×f1+q×f2
}
效果图示例
几何变换方法
1)向前映射法
x1
通过输入图像像素位置, 计算输出 图像对应像素位置; 将该位置像素的灰度值按某种方 式分配到输出图像相邻四个像素.
x 象 素 移y 交 映 射
y1
f(x1,y1) (x1,y1)整型
f(x,y) (x,y)非整型
存在问题
p q r p r
2 向后映射法
图像的垂直镜像
示例:
1 1 2 3
2
3 -1
1
2
3
0
1
2
row 3
2 1 0
-2
-3
实现程序
for i=1:row for j=1:col m=row+1-i; n=j; B(i,j)=A(m,n); end end
% A:输入图像数据 B:输出图像数据 % row:图像宽度,高度,行数 col: 图像长度,列数
图像放大

图像放大从字面上看,是图像缩小的逆操作, 但是,从信息处理的角度来看,则难易程度完 全不一样。 图像缩小是从多个信息中选出所需要的信息, 而图像放大则是需要对多出的空位填入适当的 值,是信息的估计。

图像放大
—— 实现思路

最简单的思想是,如果需要将原图像放大为k 倍,则将原图像中的每个像素值,填在新图像 中对应的k*k大小的子块中。
双线性插值代码
/*-----------scale---图像缩放------A:输入图像数据 B:输出图像数据
row:图像宽度,高度,行数 col:图像长度,列数
zi: i 放大倍数(竖直) zj: j 放大倍数(水平) --------------------------------*/
for i=1:row*zi for j=1:col*zj m=floor(i/zi); n=floor(j/zj); p=i/zi-m; q=j/zj-n; if m>=1&&n>=1&&m<row&&n<col B(i,j)=(1-q)*((1-p)*A(m,n)+p*A(m+1,n)) +q*((1-p)*A(m,n+1)+p*A(m+1,n+1)); end end end
图像的旋转
图像的旋转计算公式如下:
i' i * cos j * sin j ' i * sin j * cos
• 这个计算公式计算出的值为小数,而坐标值为正整数。 • 这个计算公式计算的结果值所在范围与原来的值所在 的范围不同。
• 因此需要前期处理:扩大画布,取整处理,平移处理 。
([x] , [y]+1 ) p
([x]+1 , [ y]+1 ) 1- p

线性插值法示意图
f2=(1-p)×f([x],[y]+1 )+p×f([x]+1,[y]+1)
计算公式
f(x,y)=
(1-q){ ( 1-p)×f ([x ],[y ])+p×f ([ x ]+1 ,[y ])}
+q{(1-p)×f([x],[y]+1)+p×f([x]+1,[y]+1)}
图像缩小
—— 例题
Y
1 7 13 19 25 31 2 8 14 20 26 32 3 9 15 21 27 33 4 10 16 22 28 34 5 11 17 23 29 35 6 12 18 24 30 36 K1=0.6, k2=0.75 7 13 25 31 9 15 27 33 10 16 28 34 11 17 29 35 12 18 30 36
图像示例
图像的位置变换

所谓图像的位置变换是指图像的大小和形状 不发生变化,只是将图像进行平移、镜像和
旋转。

图像的位置变换主要是用于目标识别中的目
标配准。
图像的平移

图像的平移非常简单,所用到的是中学学
过的直角坐标系的平移变换公式:
x' x x y ' y y
图像的镜像

所谓的镜像,通俗地讲,是指在镜子中所 成的像。其特点是左右颠倒或者是上下颠 倒。

镜像分为水平镜像和垂直镜像。
图像的水平镜像

水平镜像计算公式如下(图像大小为M*N)
i' i { j' j
-3 -2 -1 0 1 2 3

因为表示图像的矩阵坐标不能为负,因此需要在进 行镜像计算之后,再进行坐标的平移。

计算出i’和j’的最大、最小值,即i’min、i’max和
j’min,j’max。

画布大小为: i’max – i’min、 j’max –j’min。
i=[1,6], j=[1,6].
x=[1,6*0.6]=[1,4],
y=[1,6*0.75]=[1,5].
x=[1/0.6,2/0.6,3/0.6,4/0.6]=[1.67,3.33,5,6.67]=[i2,i3,i5,i6],
y=[1/0.75,2/0.75,3/0.75,4/0.75,5/0.75]=[j1,j3,j4,j5,j6].
{ i' ' i j ' ' j 'col 1 col 1 j
图像的水平镜像
示例:
1 1 2 3 2 3 1 2 3 -1 -2 -3 3 2 1
col 3
1
2 3
实现程序
for i=1:row for j=1:col m=i; n=col+1-j; B(i,j)=A(m,n); end end
for i=1:row*zi for j=1:col*zj m=ceil(i/zi); n=ceil(j/zj); B(i,j)=A(m,n); end end
较大倍数图
图像放大
—— 思考问题
思考一个问题: 如果放大倍数太大,按照前面的方法处 理会出现马赛克效应。如果这个问题交 给你,有没有办法解决?或者想办法至 少使之有所改善?
最近邻点法代码
/*-----------scale_near---图像缩放-----A:输入图像数据 B:输出图像数据
row:图像宽度,高度,行数 col:图像长度,列数
zi: i轴放大倍数 zj: j轴放大倍数 --------------------------------*/
%ij为新图像坐标,mn为原图像坐标
最简单的方法就是等间隔地选取数据。
图像缩小
—— 实现方法
设原图像大小为M*N,缩小为k1M*k2N,
(k1<1,k2<1)。算法步骤如下:
1)设原图为F(i,j), i=1,2,…,M, j=1,2,…,N. 压缩后图像是G(x,y), x=1,2,…,k1M, y=1,2,…,k2N. 2)G(x,y)=F(c1*x,c2*y) 其中,c1=1/k1 c2=1/k2
c1=1/k1 c2=1/k2
图像放大
—— 实现方法
1 4
2 5
3 6
K1=1.2, k2=1.1
1 4
2 5
3 6
3 6
4
5
百度文库
6
6
i=[1,2], j=[1,3].
x=[1,3],
y=[1,4].
x=[1/1.2,2/1.2,3/1.2]=[i1,i2,i2], y=[1/1.1,2/1.1,3/1.1,4/1.1]=[j1,j2,j3,j3].
2)向后映射法
x1
通过输出图像像素位置, 计算输入 图像对应像素位置; 根据输入图像相邻四个像素的灰 度值计算该位置像素的灰度值 . x
象 素 填y 充 映 射
y1
f(x1,y1) (x1,y1)非整型
f(x,y) (x,y)整型
两种映射方法的对比

对于向前映射:每个输出图像的灰度要经过多次运 算; 对于向后映射:每个输出图像的灰度只要经过一次 运算。 实际应用中,更经常采用向后映射法。

下面看缩小和放大的具体应用
图像的缩小
分为按比例缩小和不按比例缩小两种。
图像缩小之后,因为承载的信息量小了,所以画布
可相应缩小。
(a) 按比例缩小
(b) 不按比例缩小
图像缩小
—— 实现思路
图像缩小实际上就是对原有的多个数据进行挑
选或处理,获得期望缩小尺寸的数据,并且尽 量保持原有的特征不丢失。
{
X ax Y by
变换原理
{
{ X ax Y by
X ax Y by
g(X,Y)=f(x,y) g(ax,by)= f(x,y)
具体实现
row:图像宽度,高度,行数 col:图像长度,列数
for i=1:row for j=1:col m=ceil(zi*i); n=ceil(zj*j); B(m,n)=A(i,j); end end
图像的几何变换不改变像素 的值,只改变像素的位置。
图像的比例缩放
图像的比例缩放是指将给定的图像在 x轴
方向按比例缩放 a 倍,在 y 轴方向按比例 缩放b倍,从而获得一幅新的图像。如果 a=b,称这样的比例缩放为图像的全比例 缩放。如果 a 不等于 b ,图像的比例缩放 会改变原始图像的像素间的相对位置, 产生几何畸变。
式中:f(x,y)为坐标(x,y)处的灰度值,[x]、[y] 分 别为不大于x,y的整数。
已知原图像中四点的灰度f(101,150)=10,
f(102,150)=50,f(101,151)=40, f( 102,151)=100,新图像g是f沿x轴放大5倍,y 轴放大2倍构成,求g(506,301)的灰度。 f(101.2,150.5) m=101, n=150, p=0.2, q=0.5 f(101.2,150.5)=(1-0.5)*{(10.2)*10+0.2*50}+0.5*{(1-0.2)*40+0.2*100} =35
图像旋转的前期处理
——画布的扩大

图像旋转之前,为了避免信息的丢失,画布的扩 大是最重要的。
画布扩大的原则是:以最小的面积承载全部的画 面信息。
图像旋转的前期处理
——画布的扩大

画布扩大的简单方法是:根据公式
i' i * cos j * sin j ' i * sin j * cos
% A:输入图像数据 B:输出图像数据 % row:图像宽度,高度,行数 col: 图像长度,列数
图像的垂直镜像

垂直镜像计算公式如下(图像大小为M*N)
i ' i { j' j

因为表示图像的矩阵坐标不能为负,因此需要在进 行镜像计算之后,再进行坐标的平移。
i' ' row 1 i { j' ' j
放大5倍
显然,当k为整数时,可以采 用这种简单的方法。
图像放大
—— 实现方法
设原图像大小为M*N,放大为k1M*k2N,
(k1>1,k2>1)。算法步骤如下:
1)设旧图像是F(i,j), i=1,2,…,M, j=1,2,…,N. 新图像是G(x,y), x=1,2,…,k1M, y=1,2,…,k2N. 2)G(x,y)=F(c1*i,c2*j)
图像平移程序
% A:输入图像数据 B:输出图像数据 % row:图像宽度,高度,行数 col:图像长度,列数 % pi,pj:水平垂直(行,列)偏移量 % ij为新图像坐标,m n为原图像坐标 for i=1:row for j=1:col m=i-floor(pi); n=j-floor(pj); if m>0&&n>0&&m<row&&n<col B(i,j)=A(m,n); else B(i,j)=128; end end
即:g(x,y)=f(x’, y’)
• 注意:x方向与y方向是矩阵的行列方向。
图像的平移
——示例
y 1, x 2
1 下移1行, 右移2列 2 3 1 2 3
1 2 1 2 3 4 3 4 5
y=[1,2,3] ; x=[1,2,3] y’=[2,3,4] ; x’=[3,4,5]
•注意:平移后的景物与原图像相同,但“画布” 一定是扩大了。否则就会丢失信息。
相关文档
最新文档