图像处理之几何变换

图像几何变换又称图像空间变换,改变了像素的空间位置,但并未改变像素值。很多时候要对图像进行适当的几何变换尽可能地消除图像失真的影响。常见的变换有平移、旋转、镜像等。

变换形式

根据冈萨雷斯的《数字图像处理_第三版》,仿射变换的一般形式如下:
Image

T是变换矩阵,(v,w)为原坐标,(x,y) 为变换后的坐标,不同的变换对应不同的矩阵,常见的变换矩阵及作用如下表:
Image

坐标系变换

笛卡尔坐标系:数学课本中常见的坐标系。以图像中心为原点,水平向右为 X 轴,垂直向上为 Y 轴。

图像坐标系:以图像左上角为原点,水平向右为 X 轴,垂直向下为 Y 轴。

如图:

Image

平移和缩放通常以图像坐标系的原点为变换中心,故不需要进行坐标变换。

偏移、旋转这类变换通常以图像中心点为变换中心,也就是笛卡尔坐标系原点。这就涉及两种坐标系 间的变换了。首先将原图像坐标转换到笛卡尔坐标系下。再进行偏移、旋转等变换,变换矩阵如上表所示。最后将变换后的笛卡尔坐标系下的图像坐标再转换到图像坐标系下。

如上图,AB = N, AC = M。CAB代表图像坐标系,A为原点,AB为x轴,AC为y轴。FDE代表笛卡尔坐标系,DE为x轴,DF是y轴。

在图像坐标系下,D点坐标为(N/2,M/2),一个点的坐标为(x’,y’),转换到笛卡尔坐标(x,y),转换关系为

Image

反之,笛卡尔坐标系到图像坐标系的转换如下:

Image

故旋转(顺时针旋转)的变换形式就为:

Image

基于Python和Opencv实现图像平移、旋转

import cv2
import numpy as np

src = cv2.imread('1.jpeg')
print(src.shape)
height = src.shape[0]
width = src.shape[1]
#平移,tx = 20, ty =  30
M = np.float32([[1,0,20],[0,1,30]])
print(M.shape)
dst = cv2.warpAffine(src,M,(width, height))
#逆时针旋转90度
M1 = cv2.getRotationMatrix2D(((width-1)/2.0,(height-1)/2.0),90,1)
dst1 = cv2.warpAffine(src,M1,(width,height))
cv2.imshow('img',src)
cv2.imshow('dst',dst)
cv2.imshow('dst1',dst1)
k = cv2.waitKey(0)
if k == ord('s'):
    cv2.imwrite('pingyi.png', dst)
    cv2.imwrite('xuanzhuan.png', dst)
cv2.destroyAllWindows()

结果如下:
图像处理之几何变换_第1张图片
图像处理之几何变换_第2张图片

你可能感兴趣的:(图像处理之几何变换)