[图像几何变换]——图像的仿射变换、透射变换及图像金字塔

一、仿射变换 [图像预处理]

1、介绍

图像的仿射变换涉及到图像的形状位置角度的变化,是深度学习预处理中常用的功能,仿射变换主要是对图像的缩放、旋转、翻转和平移等操作的组合。注意:变换矩阵中是6个点,所以变换矩阵中一项就是一个坐标。

注意:图像的坐标,宽度是X方向,高度是Y方向

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from matplotlib import font_manager #中文显示字体设置

#设置字体的方式,fname指定为系统中可使用字体的路径
my_font = font_manager.FontProperties(fname="C:/Windows/Fonts/STHUPO.TTF")

#1、读取图像
img = cv.imread("./images/gyy.jpg")

#2、仿射变换
rows, cols = img.shape[:2]
#2.1创建变换矩阵
pst1 = np.float32([[50,50], [200,50], [50, 200]])
pst2 = np.float32([[100,100], [200,50], [100,250]])
M = cv.getAffineTransform(pst1, pst2)
#2.2完成仿射变换
dst = cv.warpAffine(img, M, (cols, rows))

#3、图像显示
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10,8), dpi=100)
axes[0].imshow(img[:,:,::-1]) #通道转换
axes[0].set_title("原图", fontproperties=my_font)
axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("仿射后结果", fontproperties=my_font)
plt.show()

二、透射变换 [图像预处理]

透射变换是视角变化的结果,是指利用透射中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。

它的本质是将图像投影到一个新的视平面,其通用变换公式为:

在opencv中,我们要找到四个点,其中任意三个不共线,然后获取变换矩阵T,再进行透射变换,通过函数cv.getPerspectiveTransform找到变换矩阵,将cv.warpPerspective应用于此3x3变换矩阵

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from matplotlib import font_manager

#设置字体显示
my_font = font_manager.FontProperties(fname="C:/Windows/Fonts/STHUPO.TTF")

#1、读取图像
img = cv.imread("./images/gyy.jpg")

#2、透射变换
rows,cols = img.shape[:2]
#2.1创建变换矩阵
pst1 = np.float32([[56,65], [368,52], [28,387], [389,390]])
pst2 = np.float32([[100,145], [300,100], [80,290], [310,300]])
#2.2获取透视变换矩阵
T = cv.getPerspectiveTransform(pst1, pst2)
#2.3进行变换
dst = cv.warpPerspective(img, T, (cols, rows))

#3、图像显示
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10,8), dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("原图", fontproperties=my_font)
axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("透射后结果", fontproperties=my_font)
plt.show()

三、图像金字塔

图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。

图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。

金字塔的底部是待处理的图像的高分辨率表示,而顶部是低分辨率的近似,层级越高,图像越小,分辨率越低。

1、API介绍

cv.pyrUp(img)对图像进行上采样
cv.pyrDown(img)对图像进行下采样

2、案例

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
#1、读取图片
img = cv.imread("./images/box.png")

#2、进行图像采样
up_img = cv.pyrUp(img) #上采样操作
down_img = cv.pyrDown(img) #下采样操作

#3、图像显示
cv.imshow('enlarge', up_img)
cv.imshow('original', img)
cv.imshow('shrink', down_img)
cv.waitKey(0)
cv.destroyAllWindows()

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star星屹程序设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值