1、镜像算子
1.1 水平(X轴)镜像
需要将一块内存中的像素,水平镜像写入另一块内存
确定好像素的高度H和宽度W,假设A像素坐标为(src_x0 ,src_y0 ),
对应src内存中地址为: src_addr = src_y0 * W + src_x0 ;
水平镜像,可以观察一个小的二维数组,分析前后的坐标变化规律;
规律如下 :dst_X = src_x0 ; dst_Y = (H-1) - src_y0 ;
对应dst内存中地址为: dst_addr = dst_Y * W + dst_X ;
反推,已知目的像素坐标,推算原始像素坐标
规律如下 :src_x0 = dst_X ; src_y0 = (H-1) - dst_Y ;
1.2 垂直(Y轴)镜像
需要将一块内存中的像素,垂直镜像写入另一块内存
确定好像素的高度H和宽度W,假设A像素坐标为(src_x0 ,src_y0 ),
对应src内存中地址为: src_addr = src_y0 * W + src_x0 ;
垂直镜像,可以观察一个小的二维数组,分析前后的坐标变化规律;
规律如下 :dst_X = (W-1) - src_x0 ; dst_Y = src_y0 ;
对应dst内存中地址为: dst_addr = dst_Y * W + dst_X ;
反推,已知目的像素坐标,推算原始像素坐标
规律如下 :src_x0 = (W-1) - dst_X ; src_y0 = dst_Y ;
2、旋转算子
2.1 顺时针旋转90度
需要将一块内存中的像素,旋转90度写入另一块内存
确定好像素的高度H和宽度W,假设A像素坐标为(src_x0 ,src_y0 ),旋转后(X,Y)
对应src内存中地址为: src_addr = src_y0 * W + src_x0 ;
旋转90度,可以观察一个小的二维数组,分析旋转前后的坐标变化规律;
规律如下 :dst_Y = src_x0 ; dst_X = (H-1) - src_y0 ;
对应dst内存中地址为: dst_addr = dst_Y * H + dst_X ;(旋转后src的HW正好与dst的HW相反)
反推,已知目的像素坐标,推算原始像素坐标
规律如下 :src_x0 = dst_Y ;src_y0 = (H-1) - dst_X ;
逆时针旋转时:
src_x0 = (W-1) - dst_Y ;src_y0 = dst_X ;
2.2 顺时针旋转180度
需要将一块内存中的像素,旋转180度写入另一块内存
确定好像素的高度H和宽度W,假设A像素坐标为(src_x0 ,src_y0 ),
对应src内存中地址为: src_addr = src_y0 * W + src_x0 ;
旋转180度,可以观察一个小的二维数组,分析旋转前后的坐标变化规律;
规律如下 :dst_X = (W-1) - src_x0 ;dst_Y = (H-1) - src_y0 ;
对应dst内存中地址为: dst_addr = dst_Y * W + dst_X ;(旋转后src的HW正好与dst的HW相等)
反推,已知目的像素坐标,推算原始像素坐标
规律如下 :src_x0 = (W-1) - dst_X ;src_y0 = (H-1) - dst_Y ;
逆时针旋转时:【与顺时针旋转相同】
src_x0 = (W-1) - dst_X ;src_y0 = (H-1) - dst_Y ;
2.3 旋转270度
需要将一块内存中的像素,旋转180度写入另一块内存
确定好像素的高度H和宽度W,假设A像素坐标为(src_x0 ,src_y0 ),
对应src内存中地址为: src_addr = src_y0 * W + src_x0 ;
旋转270度,可以观察一个小的二维数组,分析旋转前后的坐标变化规律;
规律如下 :dst_X = src_y0 ; dst_Y = (W-1) - src_x0 ;
对应dst内存中地址为: dst_addr = dst_Y * H + dst_X ;(旋转后src的HW正好与dst的HW相反)
反推,已知目的像素坐标,推算原始像素坐标
规律如下 :src_x0 = (W-1) - dst_Y ; src_y0 = dst_X ;
逆时针旋转时:
src_x0 = dst_Y ; src_y0 = (H-1) - dst_X ;
3、图像转置
图像的转置是指将图像像素的x坐标和y坐标互换,相应的转置后图像的宽度与长度会随之互换。
图像的转置变换也可以通过先水平镜像,再逆时针旋转九十度来实现。