图像基本运算-第一节:图像几何变换

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] xy1 = 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是可选的,它只有在tformtypeprojective时才需要指定。它是一个3x3的矩阵,描述了一个额外的投影变换,它会被添加到仿射变换矩阵中

imtransform函数:该函数可以对图像进行平移、旋转、缩放等变换操作。该函数的参数如下

  • 第一个参数A是要进行变换的原始图像
  • 第二个参数TFORM是一个仿射变换矩阵,它描述了要执行的变换类型和参数
  • 第三个参数INTERP表示插值方法的字符串或函数句柄。在进行图像变换时,原图像的像素会被映射到目标图像的新位置,但是像素点之间的间隔可能会不同。为了填充这些间隔,需要使用插值方法计算新像素点的像素值。常用的插值方法有双线性插值、双立方插值、最近邻插值等。可以使用 interp2 函数来查看不同插值方法的效果
  • PARAM1VAL1PARAM2VAL2 等:表示一些可选参数的名称和对应的值。不同的变换类型和插值方法可能需要不同的参数。例如,在使用双立方插值时,可以使用 bicubic 选项来控制插值的平滑度。可以使用 imwarp 函数查看不同选项的效果

实现如下效果

代码含义:

  • 首先,使用 imread 函数读取名为 “lotus.jpg” 的图像,并将其存储在变量 Image
  • 然后,定义平移量 deltaxdeltay 分别为 20。这表示图像将沿着 x 轴和 y 轴方向移动 20 个像素
  • 接着,使用 maketform 函数创建一个仿射变换类型的结构体 T,其中 [1 0 0;0 1 0;deltax deltay 1] 表示一个平移变换矩阵。这个变换矩阵将图像沿着 x 轴和 y 轴方向移动 deltaxdeltay 个像素
  • 然后,使用 imtransform 函数对图像进行平移变换,并生成两个新的图像。第一个新图像 NewImage1 是在不改变图像大小的情况下进行平移的结果。第二个新图像 NewImage2 则是在将图像大小扩大后进行平移的结果