文章目录
- 前言
- 一、镜像变换
- 二、缩放变换
前言
在计算机视觉中,图像几何变换是指对图像进行平移、旋转、缩放、仿射变换和镜像变换等操作,以改变图像的位置、尺寸、形状或视角,而不改变图像的内容。这些变换在图像处理、模式识别、机器人视觉、医学影像处理等领域具有广泛的应用。通过图像几何变换,可以实现图像的校正、配准、增强和重建等功能,为后续的图像分析和理解提供了重要的基础。
一、镜像变换
水平镜像(水平翻转)
其原理是将图像沿着垂直中轴线(即图像的中心垂直线)进行翻转,从而实现图像内容在水平方向的镜像对称。
具体而言,水平镜像转换的原理可以描述如下:
1.中轴线确定:首先确定图像的中心垂直线,即图像的中轴线。对于宽度为 w,高度为 h 的图像,其中轴线位于 w/2 的位置处。
2.像素交换:对于图像中的每一个像素点 (x, y),将其水平位置进行镜像对称,即将其水平坐标从 x 调整为 w - x - 1。
3.生成新图像:将经过镜像对称处理的像素重新组合成新的图像。
4.水平镜像转换完成:生成的新图像即为原图像在水平方向上的镜像。
水平镜像转换是一种基本的图像处理操作,在许多图像处理任务中都有应用,如数据增强、图像增强、图像配准等。
我们看下图:
比如这是一张图片,每一格为1像素,图片宽度为W=10.,最底部我标记的0-9为图片的X坐标,那水平反转就是 w - x - 1。比如最后一列像素就是10-9-1 就是放到第0列中,依次类推 就实现了水平翻转。
垂直翻转同样的道理。
使用opencv实现图片的翻转:
# 水平翻转
flipped_image_horizontal = cv2.flip(image, 1)# 垂直翻转
flipped_image_vertical = cv2.flip(image, 0)# 同时在水平和垂直方向上翻转
flipped_image_both = cv2.flip(image, -1)
二、缩放变换
对图片进行缩放肯定要改变图像原有的尺寸,可能是变大或变小。也就是图片的像素增加或者是减少。比如我们把1000x800的图像,缩放为500x400的尺寸,可以算出我们会丢失很多的像素。那丢失哪些像素 计算机是怎么知道的,或者他如何决定要丢掉哪些像素呢?
比如上面第一张图 我们想缩小为第二张的尺寸。第一张图的A位置的像素是已知的。我们根据目标图像的尺寸和原始图像的尺寸,计算出目标图像中每个像素对应的原始图像中的位置。那A2的值是多少呢 这涉及到差值算法,差值算法
1.最近邻插值(Nearest Neighbor Interpolation):
最近邻插值算法是一种简单的插值算法,它将目标图像中每个像素的颜色值设置为原始图像中距离最近的像素的颜色值。这种方法计算简单,但可能会导致图像出现锯齿状的边缘。
2.双线性插值(Bilinear Interpolation):
双线性插值算法是一种常用的插值算法,它使用原始图像中最近的四个像素的颜色值进行加权平均,以估计目标图像中像素的颜色值。这种方法相对于最近邻插值具有更好的平滑效果。
3.双三次插值(Bicubic Interpolation):
双三次插值算法是一种更复杂的插值算法,它使用原始图像中最近的16个像素的颜色值进行加权平均,以估计目标图像中像素的颜色值。这种方法通常产生更加平滑的图像,但计算复杂度较高。
opencv默认使用双线差值的方式取处理的
就是通过双线性差值计算出新像素的值,通过像素最近的4个值通过下面公式计算而出
这里不做探讨,感兴趣的可以自己去找下资料研究。这样就可以确定像素点的新值,
opencv中图片缩放操作
# 读取图像
image = cv2.imread('input_image.jpg')# 指定缩放后的尺寸
width = 300 # 新图像宽度
height = 200 # 新图像高度# 使用cv2.resize()函数进行缩放操作
resized_image = cv2.resize(image, (width, height))# 显示原始图像和缩放后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()