仿射affine

该博客主要涉及密码解密算法,使用了模运算和逆元的概念。首先通过给定的加密函数E(x),将原始字符串转化为密文,然后利用解密函数D(x)进行解密。解密过程中,计算了17的逆元并应用到解密公式中。最终,博客展示了如何从密文还原回原始字符串。
# -*- coding: UTF-8 -*-
#E(x) = (ax + b) (mod m)
#D(x) = a逆 (x - b) (mod m) ,其中a逆可以通过invert(a,m)求解,m一般为26
from gmpy2 import *
flag = "rrjgsakoove"

flaglist = []

for i in flag:
    flaglist.append(ord(i)-97)

flags = ""
for i in flaglist:
    for j in range(0,26):
        c = (17 * j - 8) % 26
        if(c == i):
            flags += chr(j+97)

print flags
print(invert(17, 26))
#解密
flaglists = []
flags_new = ''
for i in flags:
    flaglists.append(ord(i)-97)

for i in flaglists:
    for j in range(0,26):
        c = (23 * (j + 8)) % 26
        if(c == i):
            flags_new += chr(j+97)
print(flags_new)
### 数学原理 仿射变换是一种结合线性变换和平移的几何变换。形式上,一个仿射变换 $ f $ 可以表示为: $$ f(\vec{v}) = M\vec{v} + \vec{c} $$ 其中,$ M $ 是一个线性变换的矩阵,$ \vec{c} $ 是一个常量向量。这种变换保持了图形的“平直性”和“平行性”,即直线在变换后仍然是直线,平行线仍然保持平行。 仿射变换可以通过一系列原子变换复合实现,包括: - **平移**:将图像整体移动。 - **缩放**:放大或缩小图像。 - **翻转**:沿指定轴镜像图像。 - **旋转**:绕某点旋转图像。 - **剪切**:使图像发生倾斜变形。 二维仿射变换通常使用以下公式表示: $$ \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} a & b & t_x \\ c & d & t_y \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} $$ 其中,$ a, b, c, d $ 控制旋转、缩放、剪切等线性变换,而 $ t_x, t_y $ 控制平移部分。 例如,相对 x 轴进行反射(翻转)时,变换矩阵可以表示为: $$ M = \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix} $$ ### 编程实现 在编程中,可以利用如 NumPy 和 OpenCV 等库来实现仿射变换。 #### 使用 NumPy 实现二维仿射变换 ```python import numpy as np def affine_transform(point, matrix, translation): """ 对二维点应用仿射变换。 参数: point (tuple): 输入坐标 (x, y) matrix (np.ndarray): 线性变换矩阵 (2x2) translation (np.ndarray): 平移向量 (tx, ty) 返回: np.ndarray: 变换后的坐标 (x', y') """ point = np.array(point) transformed_point = np.dot(matrix, point) + translation return transformed_point # 示例 point = (1, 2) # 输入坐标 linear_matrix = np.array([[1, 0], [0, -1]]) # 沿 x 轴反射的线性变换矩阵 translation_vector = np.array([0, 0]) # 无平移 transformed_point = affine_transform(point, linear_matrix, translation_vector) print("变换后的坐标:", transformed_point) ``` #### 使用 OpenCV 进行图像仿射变换 OpenCV 提供了便捷的函数 `cv2.warpAffine` 来对图像进行仿射变换: ```python import cv2 import numpy as np # 加载图像 image = cv2.imread('input_image.jpg') # 定义变换矩阵 # 例如:沿 x 轴反射 affine_matrix = np.float32([ [1, 0, 0], # x 轴方向无缩放和平移 [0, -1, image.shape[0]] # y 轴方向反转,并调整位置防止裁剪 ]) # 应用仿射变换 height, width = image.shape[:2] transformed_image = cv2.warpAffine(image, affine_matrix, (width, height)) # 保存结果 cv2.imwrite('output_image.jpg', transformed_image) ``` ### 注意事项 - 在实际应用中,仿射变换常常用于图像处理(如图像旋转、翻转)、计算机视觉任务(如 STN - 空间变换网络)等领域。 - 初始化变换参数时,从单位变换开始训练有助于提升模型稳定性,尤其是在深度学习框架中[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值