介绍
图像的几何空间变换可以改进图像中像素间的空间关系,主要由两个基本操作组成:
- 坐标空间的变换。
- 图像内插,对空间变换后的像素赋值。
空间坐标变换
可由下式表示:
上式中是原图中像素的坐标,是变换后图像的坐标,是变换函数,也就是原图中某个位置的像素通过变换函数,映射到目标图像中。比如:表示在两个方向上将原图缩小一半。
图像内插
请参考我的另一篇博文图像内插。
仿射变换
仿射变换是最常用的空间坐标变换之一,其一般形式如下:
上式中,表示变换矩阵,可根据中元素所选择的值,对一组坐标点做尺度、旋转、平移或偏移。
变换名称 | 变换矩阵 | 坐标公式 | 例子 |
---|---|---|---|
恒等变换 | ![]() |
||
尺度变换 | ![]() |
||
平移变换 | ![]() |
||
旋转变换 | ![]() |
||
垂直偏移变换 | ![]() |
||
水平偏移变换 | ![]() |
实现
实现空间变换的方法有两种:
- 前向映射:整体思想是扫描原图像,对于原图像上的每个像素,根据它在原图中的坐标,利用计算其在目标图像上的坐标,然后将原图中坐标为的像素值赋值给目标图像中坐标为的像素。
- 反向映射:整体思想是扫描目标图像的每个像素,对于坐标为的像素,利用计算其在原图像上的坐标,然后用内插的方法计算该像素的值。
这里表示变换函数的反函数,对于仿射变换来说,相当于乘变换矩阵的逆矩阵。
使用前向映射可能会存在两个问题,一个是原图像中多个像素被变换到目标图像的同一个位置,产生冲突,另一个问题是计算出的目标像素坐标不存在,比如不是个整数坐标。而反向映射不存在这两个问题,因此反向映射用的多一点。
这里给出用反向映射实现仿射变换的C++代码,代码用的是opencv库处理图像。
1 |
|