文档介绍:第3章图像的几何变换
张桦教授
天津理工大学
计算机与通信工程学院
本章要点:
图像的平移
图像的镜像变换
图像的缩放
图像的转置
图像的旋转
图像的平移
1. 理论基础
图像平移(Translation)是将图像中所有的点都按照指定的平移量,进行水平、垂直移动。
设初始坐标为(x0,y0)的点
经过平移(tx,ty)后
坐标变为(x1,y1)。
1. 理论基础
tx
坐标原点
(x0,y0)
ty
(x1,y1)
图3-1 像素平移示意图
显然(x0,y0)和(x1,y1)的关系如下:
 
x1=x0+tx
y1=y0+ty
2. 理论验证
x
y
y
(0,0)
(0,0)
x
y
(0,0)
3. 流程设计
(1) 取得原图的数据区指针。
(2) 通过对话框输入偏移量tx,ty。
(3) 开辟一个同样大小的缓冲区。
(4) 对原图依次循环每个像素,每读入一个像素点(x0,y0),根据它的坐标,找到目标图像的位置(x1=x0-tx,y1=y0-ty),将像素(x0,y0)处的颜色值赋给新图中的(x1,y1)。
4. 编程实现
for( i = 0; i < wide; i++)
{ for(int j = 0; j < height; j++)
{ // 计算该象素在源DIB中的坐标
lpSrc = (LPBYTE)p_data + lLineBytes * (height - 1 - j) + i;
int i0,j0;
// 计算该象素在新DIB中的坐标
i0 = i+m_Xmove;
j0 = j + m_Ymove;
if( (i0 >= 0) && (i0 < wide) && (j0 >= 0) && (j0 < height)) // 判断是否在新图范围内
{ lpDst = (LPBYTE)temp + lLineBytes *(height - 1 - j0) + i0;
*lpDst = *lpSrc; // 复制象素
}
else
{
* ((unsigned char*)lpDst) = 255; // 对于源图中没有的象素,直接赋值为255
}
}
}
图像的镜像变换
1. 理论基础
图像的镜像变换分为两种:一种是水平镜像,另一种是垂直镜像。
图像的水平镜像操作是以原图像的垂直中轴线为中心,将图像分为左右两部分进行对称变换;
图像的垂直镜像操作是以原图像的水平中轴线为中心,将图像分为上下两部分进行对称变换。
镜像变换后图的高和宽都不变。
----水平镜像
设图像高度为Height,宽度为Width,
原图中的(x0,y0)经过水平镜像后,
坐标将变成(Width-x0,y0)。
即:
x1=Width-x0
y1=y0
----垂直镜像
点(x0,y0)经过垂直镜像后,
坐标将变成为(x0,Height-y0),
即:
x1=x0
y1=Height-y0