图像的几何变换是指对图像进行缩放、平移和旋转等操作,从而改变图像在平面上的位置、大小和方向。这些变换可以通过数学计算和像素级别的操作来实现,常用于图像处理和计算机视觉领域。
缩放变换: 缩放是指改变图像的尺寸大小,使其变大或变小。缩放变换可以应用于整个图像或者特定区域。在图像缩放中,可以通过插值算法来调整像素的位置和灰度值,常见的插值方法有最近邻插值、双线性插值和双立方插值等。
缩放变换可以实现图像的放大和缩小效果。当将图像放大时,会导致图像失真和锯齿状边缘的出现;而将图像缩小时,可能会造成信息丢失和细节模糊。因此,在进行图像缩放时需要权衡保留图像细节和减少失真之间的关系。
平移变换: 平移是指在图像平面上按照指定的平移量沿着 x 轴和 y 轴方向移动图像的位置。平移变换可以实现图像的横向或纵向平移,使得图像在平面上的位置发生改变。
平移变换的实现很简单,只需要将图像的每个像素点按照指定的平移量进行偏移即可。平移变换常用于图像对齐、目标跟踪和图像拼接等应用中。
旋转变换: 旋转是指按照指定的角度将图像绕着一个中心点进行旋转。旋转变换可以使图像在平面上发生旋转,改变图像的方向和角度。
旋转变换的实现通常需要确定旋转角度和旋转中心点。通过对图像的每个像素点进行坐标变换,并使用插值算法计算旋转后的像素位置和灰度值,可以得到旋转后的图像。
旋转变换常用于图像校正、目标识别和匹配等应用中。在数字图像处理中,旋转变换也是非常基础且重要的操作之一。
总的来说,图像的几何变换包括缩放、平移和旋转等操作,它们可以改变图像的尺寸、位置和方向。这些变换在图像处理和计算机视觉领域中有广泛的应用,例如图像放大、图像对齐、目标跟踪、图像校正和匹配等。通过对图像进行几何变换,可以实现图像的形状调整、空间重构和图像配准等功能。
图像的几何变换
学习目标
- 掌握图像的缩放、平移、旋转等
- 了解数字图像的仿射变换和透射变换
1 图像的缩放
缩放是对图像的大小进行调整,即 使图像放大或缩小
cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR)
参数:
- src :输入图像
- dsize ;绝对尺寸 ,直接指定调整后图像的大小
- fx,fy :相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可
- interpolation: 插值方法
代码实现
import cv2 as cv
#读取图片
img1 = cv.imread('lena.png')
#图像的缩放
#法1 :绝对尺寸
rows, cols = img1.shape[:2]
res = cv.resize(img1 , (2*cols,2*rows),interpolation=cv.INTER_CUBIC)
#法二 :相对尺寸
res1 = cv.resize(img1,None,fx=0.5,fy=0.5)
#图像显示
cv.imshow("original",img1)
cv.imshow("enlarge",res)
cv.imshow("shrink",res1)
cv.waitKey(0)
结果展示
2图像的平移
代码实现
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
#读取图像
img1 = cv.imread("lena.png")
#图像的平移
rows ,cols = img1.shape[:2]
M= np.float32([[1,0,100],[0,1,50]]) #平移矩阵
dst = cv.warpAffine(img1,M,(cols,rows))
#图像的显示
fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(7,4),dpi=100)
axes[0].imshow(img1[:,:,::-1])
axes[0].set_title("原图")
axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("平移后的结果")
plt.show()
结果展示
3 图像的旋转
代码实现
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
#读取图像
img = cv.imread("lena.png")
#旋转图像
rows ,cols = img.shape[:2]
#生成旋转矩阵
M = cv.getRotationMatrix2D((cols/2 ,rows/2),90,1)
#进行旋转变换
dst = cv.warpAffine(img,M,(cols,rows))
#图像展示
fig ,axes = plt.subplots(nrows=1,ncols=2,figsize=(5,4),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("原图")
axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("旋转后的结果")
plt.show()
M = cv.getRotationMatrix2D((cols/2 ,rows/2),90,1)
- cols/2 ,rows/2 :旋转中心
- 90 : 逆时针旋转角度
- 1:缩放比例(不进行缩放)