仿射变换

作者: 默写年华Antifragile | 来源:发表于2019-07-04 17:02 被阅读0次

参考资料: 马同学:如何通俗的解释仿射变换

1. 仿射变换的作用:

通过仿射变换对图片进行旋转、平移、缩放等操作以达到数据增强的效果

2. 仿射变换的实质

线性变换 + 平移

------------------------------------------------------------------------------------------------------

2.1 线性变换

线性变换从几何直观上来看有三个要点:

  • 变换前是直线,变换后依然是直线
  • 直线的比例保持不变
  • 变换前是原点的,变换后依然是原点

比如说旋转推移

可以看到,线性变换是通过矩阵乘法来实现的
------------------------------------------------------------------------------------------------------

2.2 仿射变换

仿射变换从集合直观只有两个要点:

  • 变换前是直线,变换后也依然是直线
  • 直线的比例保持不变

可见,少了 原点保持不变 的条件,因此可以进行平移:

image.png

上一节2.1中线性变换通过矩阵乘法来实现,仿射变换则不能只通过矩阵乘法来实现,还需要加法


image.png

因此,放射变换可以表示为 \vec y = A \vec x + \vec b
------------------------------------------------------------------------------------------------

2.3 通过线性变换来完成仿射变换

image.png
可以看到,在高维度上的线性变换可以完成低维度的仿射变换
image.png
这样我就可以在三维空间下通过这个线性变换来操作 z=1 平面上面的二维正方形,完成仿射变换: image.png
image.png image.png

cv2的代码实现:cv2.warpAffine

import cv2
import math
import numpy as np
#1. 读取原图
img_raw = cv2.imread("./data/timg.jpg")
#2. 对图像进行操作
#2.1 平移
M = np.array([[0.5,0,0],[0,0.5,0]],np.float32) #为了便于观察,先进行缩小
img_tr =cv2.warpAffine(img_raw, M, img_raw.shape[:2])
cv2.imwrite("./data/image_tr.jpg",img_tr)
#2.2 缩放
img_resize =cv2.resize(img_raw,(64,64))
cv2.imwrite("./data/image_resize.jpg",img_resize)
#2.3 旋转
def rotate(image, angle, center=None, scale=1.0):
    # 获取图像尺寸
    (h, w) = image.shape[:2]
    # 若未指定旋转中心,则将图像中心设为旋转中心
    if center is None:
        center = (w / 2, h / 2)
    # 执行旋转
    M = cv2.getRotationMatrix2D(center, angle, scale)
    rotated = cv2.warpAffine(image, M, (w, h))
    # 返回旋转后的图像
    return rotated
img_rotated = rotate(img_raw,90)
cv2.imwrite("./data/img_rotated.jpg",img_rotated)
#2.4 翻转
# 横向翻转图像
flipped_hori = cv2.flip(img_raw, 1)
cv2.imwrite("./data/flipped_hori.jpg",flipped_hori)

# 纵向翻转图像
flipped_ver = cv2.flip(img_raw, 0)
cv2.imwrite("./data/flipped_ver.jpg",flipped_ver)

# 同时在横向和纵向翻转图像
flipped_all = cv2.flip(img_raw, -1)
cv2.imwrite("./data/flipped_all.jpg",flipped_all)

相关文章

  • 第四篇:CALayer能力之仿射变换和3D变换

    目录 一、UIView的仿射变换 1、单仿射变换 2、混合仿射变换 3、CGAffineTransformIden...

  • iOS 仿射变换

    一、iOS 仿射变换CGAffineTransform详解IOS开发UI篇--仿射变换(CGAffineTrans...

  • 仿射变换

    参考资料: 马同学:如何通俗的解释仿射变换 1. 仿射变换的作用: 通过仿射变换对图片进行旋转、平移、缩放等操作以...

  • 图片处理-opencv-7.图像几何变换

    图像几何变换 1.图像仿射变换 图像仿射变换又称为图像仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一...

  • 高级动画学习心得笔记(五)变换

    5.1 仿射变换 5.1.1 仿射变换基础 UIView的transform属性是一个CGAffineTransf...

  • 详细解析 CGAffineTransform 矩阵

    CGAffineTransform 是对于仿射变换矩阵进行了封装,而要理解仿射变换(affine transfor...

  • opencv python版-lesson 11

    缩放,平移,旋转.仿射变换,透视变换

  • 仿射变换

    UIView的transform属性是一个CGAffineTransform类型,用于在二维空间做旋转、缩放和平移...

  • 仿射变换

    仿射变换(affinement)是由一个线性变换和平移组成的,如图所示 1. SLAM中的仿射变换 在SLAM里,...

  • 仿射变换

    参考 http://www.cnblogs.com/ghj1976/p/5199086.html 变换模型是指根据...

网友评论

    本文标题:仿射变换

    本文链接:https://www.haomeiwen.com/subject/hqhrhctx.html