图像基本运算-第一节:图像几何变换
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像基本运算-第一节:图像几何变换相关的知识,希望对你有一定的参考价值。
文章目录
图像几何变换:图像几何变换将图像中任一像素映射到一个新位置,是一种空间变换,关键在于确定图像中点与点之间的映射关系
一:图像几何变化基础
(1)齐次坐标表示法
齐次坐标表示法:用 n + 1 n+1 n+1维向量表示 n n n维向量的方法称为齐次坐标表示法。在齐次坐标中,原图像用点集 [ x , y , 1 ] T [x,y,1]^T [x,y,1]T表示。使用齐次坐标表示法可以方便地进行矩阵运算,例如平移、旋转、缩放等变换操作。同时,它也可以简化透视投影等复杂操作的计算。在计算机图形学和计算机视觉等领域中,齐次坐标表示法已经成为了一种标准的表示方法,被广泛应用于三维图形建模、计算机动画、计算机视觉、机器人学等领域
举例:
假设有一个三维坐标系中的点 P P P,其坐标为 ( x , y , z ) (x,y,z) (x,y,z),如果使用齐次坐标表示法,可以将其表示为 [ x , y , z , 1 ] [x,y,z,1] [x,y,z,1]。接下来,假设我们想要对点 P P P进行平移变换,将其沿着 x x x 轴方向平移10个单位,沿着 y y y 轴方向平移5个单位,沿着 z z z 轴方向平移2个单位。如果使用传统的三维坐标表示方法,需要对每个坐标分别进行加减操作
x' = x + 10
y' = y + 5
z' = z + 2
但是,如果使用齐次坐标表示法,则可以使用矩阵运算进行平移变换
T = [1, 0, 0, 10]
[0, 1, 0, 5]
[0, 0, 1, 2]
[0, 0, 0, 1]
P' = T * P
其中,T 是一个4x4的矩阵,用于表示平移变换。P’ 是平移后的点的齐次坐标表示
(2)图像的几何变换
图像的几何变换:通过齐次坐标中,原图像进行平移、缩放、旋转等几何变换,可以用一个变换矩阵 T T T表示
如下矩阵 T T T,其中
- a a a, b b b, c c c, d d d用于图形的比例、对称、错切、旋转等基本变换
- k k k, m m m用于图形的平移变换
- p , q p,q p,q用于投影变换
- s s s用于全比例变换
T = [ a b k c d m p q s ] \\boldsymbolT=\\left[\\beginarraylll \\boldsymbola & \\boldsymbolb & \\boldsymbolk \\\\ \\boldsymbolc & \\boldsymbold & \\boldsymbolm \\\\ \\boldsymbolp & \\boldsymbolq & \\boldsymbols \\endarray\\right] T= acpbdqkms
实现2D图像几何变换的基本变换的一般过程是
变换矩阵 T × 变换前的点集矩阵 = 变换后的点集矩阵 变换矩阵T×变换前的点集矩阵=变换后的点集矩阵 变换矩阵T×变换前的点集矩阵=变换后的点集矩阵
(3)图像插值运算
A:概述
图像插值运算:利用已知邻近像素点的灰度值来产生未知像素点的灰度值。包括
- 最近邻插值: 非整数像素灰度值就等于距离最近的像素的灰度值
- 双线性插值: 利用非整数像素点周围的四个像素点的相关性,通过双线性算法计算得出的
- 双三次插值: 利用非整数像素点周围的16个像素点进行计算
B:双线性插值
要想了解双线性插值就必须先要知道什么是线性插值。简单来说,线性插值就是有两个点 A A A、 B B B,要在 A B AB AB中间插入一个点 C C C(点 C C C坐标在 A B AB AB连线上),就直接让 C C C的值落在 A B AB AB的值的连线上就可以了
如下,线性插值本质就是用 x x x和 x 0 , x 1 x_0,x_1 x0,x1的距离作为一个权重,用于 y 0 y_0 y0和 y 1 y_1 y1的加权
双线性插值运算本质就是在两个方向上做线性插值。如下图,我们需要求 P P P点的像素值。已知了 Q 11 , Q 21 , Q 12 , Q 22 Q_11,Q_21,Q_12,Q_22 Q11,Q21,Q12,Q22的坐标。也知道 Q 11 , Q 21 , Q 12 , Q 22 Q_11,Q_21,Q_12,Q_22 Q11,Q21,Q12,Q22的像素值
所以先用关于
x
x
x的单线性插值去分别计算
R
1
,
R
2
R_1,R_2
R1,R2的像素值
再使用关于 y y y方向的单线性插值计算 P P P点的像素值
(4)图像几何变换:后向映射法
后向映射法:
- 根据不同的几何变换公式计算新图像的尺寸
- 根据几何变换的逆变换,对新图像中的每一点确定其在原图像中的对应点
- 按对应关系给新图像中各个像素赋值
- 若新图像中像素点在原图像中的对应点坐标存在则直接赋值
- 若新图像中像素点在原图像中的对应点坐标超出图像宽高范围则直接赋背景色
- 若新图像中像素点在原图像中的对应点坐标在图像宽高范围内则采用插值的方法计算
二:图像的位置变换
图像的位置变换:图像的位置变换是指图像的大小和形状不发生变化,只是图像像素点的位置发生变化,图像的位置变换主要是用于目标识别中的目标配准。包括
- 平移
- 镜像
- 旋转
A:平移
①:概述
原理:变换公式如下
x ′ = x + Δ x y ′ = y + Δ y \\left\\\\beginarrayl x^\\prime=x+\\Delta x \\\\ y^\\prime=y+\\Delta y \\endarray\\right. x′=x+Δxy′=y+Δy
矩阵表示如下
[ x ′ y ′ 1 ] = [ 1 0 Δ x 0 1 Δ y 0 0 1 ] [ x y 1 ] \\left[\\beginarrayc x^\\prime \\\\ y^\\prime \\\\ 1 \\endarray\\right]=\\left[\\beginarrayccc 1 & 0 & \\Delta x \\\\ 0 & 1 & \\Delta y \\\\ 0 & 0 & 1 \\endarray\\right]\\left[\\beginarrayl x \\\\ y \\\\ 1 \\endarray\\right] x′y′1 = 100010ΔxΔy1 xy1
如果平移后不丢失信息则需要扩大画布
②:程序
MATLAB实现:相关函数如下,具体解释可看MATLAB帮助手册
T = maketform(TRANSFORMTYPE,...)
B = imtransform(A,TFORM,INTERP,PARAM1,VAL1,PARAM2,VAL2,...)
maketform
函数:在MATLAB中,maketform
函数是一个用于创建仿射变换矩阵的函数,它可以将任意的仿射变换表示为一个3x3的矩阵。maketform
函数的参数如下
- 第一个参数
tformtype
指定了变换的类型,可以是以下几种nonreflective similarity
:非反射相似变换affine
:仿射变换projective
:投影变换
- 第二个参数
inpoints
和第三个参数outpoints
是输入图像和输出图像上的点坐标,它们描述了变换前后各个点的对应关系。这里要求这两个参数都是n×2的矩阵,每一行表示一个点的坐标。 - 第四个参数
normalize
指定是否对输入和输出点进行归一化。如果设置为true
,则maketform
函数会将输入和输出点缩放到[-1, 1]范围内,使得仿射变换矩阵的求解更加稳定。 - 第五个参数
params
是可选的,它只有在tformtype
为projective
时才需要指定。它是一个3x3的矩阵,描述了一个额外的投影变换,它会被添加到仿射变换矩阵中
imtransform
函数:该函数可以对图像进行平移、旋转、缩放等变换操作。该函数的参数如下
- 第一个参数
A
是要进行变换的原始图像 - 第二个参数
TFORM
是一个仿射变换矩阵,它描述了要执行的变换类型和参数 - 第三个参数
INTERP
表示插值方法的字符串或函数句柄。在进行图像变换时,原图像的像素会被映射到目标图像的新位置,但是像素点之间的间隔可能会不同。为了填充这些间隔,需要使用插值方法计算新像素点的像素值。常用的插值方法有双线性插值、双立方插值、最近邻插值等。可以使用interp2
函数来查看不同插值方法的效果 PARAM1
、VAL1
、PARAM2
、VAL2
等:表示一些可选参数的名称和对应的值。不同的变换类型和插值方法可能需要不同的参数。例如,在使用双立方插值时,可以使用bicubic
选项来控制插值的平滑度。可以使用imwarp
函数查看不同选项的效果
实现如下效果
代码含义:
- 首先,使用
imread
函数读取名为 “lotus.jpg” 的图像,并将其存储在变量Image
中 - 然后,定义平移量
deltax
和deltay
分别为 20。这表示图像将沿着 x 轴和 y 轴方向移动 20 个像素 - 接着,使用
maketform
函数创建一个仿射变换类型的结构体T
,其中[1 0 0;0 1 0;deltax deltay 1]
表示一个平移变换矩阵。这个变换矩阵将图像沿着 x 轴和 y 轴方向移动deltax
和deltay
个像素 - 然后,使用
imtransform
函数对图像进行平移变换,并生成两个新的图像。第一个新图像NewImage1
是在不改变图像大小的情况下进行平移的结果。第二个新图像NewImage2
则是在将图像大小扩大后进行平移的结果[1 size(Image,2)]
是一个包含两个元素的行向量,用于设置imtransform
函数的'
数字图像处理基本运算
1 图像的像素级运算
1.1 点运算
1.1.1 常见的点运算
1.1.2 点运算的特点
1.2 代数运算
1.2.1 加法运算
1.2.1 减法运算
1.2.1 乘法运算
1.3 逻辑运算
2 图像的空域变换
2.1 几何变换
2.1.1 多项式变换
2.1.1.1 仿射变换
2.1.1.2 伪仿射变换
2.1.2 透视变换
2.1.3 几何变换的特征
2.1.4 复合变换
2.2 非几何变换
3 直方图变换
3.1 基本概念
3.2 理论基础
3.3 直方图均衡
3.3.1 直方图均衡化过程分析
3.3.2 离散形式的直方图均衡化
以上是关于图像基本运算-第一节:图像几何变换的主要内容,如果未能解决你的问题,请参考以下文章
《计算机视觉和图像处理简介 - 中英双语版》:使用 OpenCV对图像进行几何变换及数学变换Geometric Operations