Python实现125*125二维矩阵顺时针旋转10度的方案咨询
125*125矩阵顺时针10度旋转及适配交替读取方案
旋转实现(保留全原始信息)
小角度旋转要避免数据丢失,需要先扩容基底再做变换,具体流程:
- 先创建尺寸为132132的全0矩阵作为旋转基底,将原125125矩阵放在基底中心位置,确保旋转后边缘的原始数据不会被裁剪
- 代入顺时针旋转10度的坐标变换公式计算每个原数据点的新位置:
θ = 10 * π / 180 # 角度转弧度 新坐标x' = x * cosθ + y * sinθ 新坐标y' = -x * sinθ + y * cosθ - 插值算法选双线性插值即可,兼顾图案精度和计算效率,旋转完成后得到的矩阵包含所有原始数据的旋转特征。
适配仿真软件交替读取规则
仿真软件的逐行交替读取逻辑,只需要在导出数据前对矩阵做行顺序预处理:
- 行号从0开始计数,遍历所有行
- 奇数行(对应实际读取顺序的第2、4、6…行,行号为1、3、5…)做整行元素倒序处理
- 偶数行保持原有顺序不变
- 预处理完成后的矩阵直接导入仿真软件,绘制出的图像就是原始数据顺时针旋转10度的效果,和原图对比可直观判断为同一数据的不同旋转形态。
Python实现参考代码
import numpy as np import cv2 # 替换为你的实际125*125矩阵数据 raw_arr = np.loadtxt("your_raw_data.txt") # 第一步:顺时针旋转10度,保留全量数据不裁剪 h, w = raw_arr.shape center = (w//2, h//2) # OpenCV中负角度代表顺时针旋转,计算旋转矩阵 rot_mat = cv2.getRotationMatrix2D(center, -10, 1) cos = np.abs(rot_mat[0, 0]) sin = np.abs(rot_mat[0, 1]) # 计算旋转后外接矩形尺寸,避免裁剪 new_w = int((h * sin) + (w * cos)) new_h = int((h * cos) + (w * sin)) rot_mat[0, 2] += (new_w / 2) - center[0] rot_mat[1, 2] += (new_h / 2) - center[1] rotated_arr = cv2.warpAffine(raw_arr, rot_mat, (new_w, new_h), flags=cv2.INTER_LINEAR, borderValue=0) # 第二步:适配交替行读取规则 for row_idx in range(rotated_arr.shape[0]): if row_idx % 2 == 1: rotated_arr[row_idx] = rotated_arr[row_idx][::-1] # 导出处理完成的矩阵 np.savetxt("rotated_adapted_data.txt", rotated_arr)
内容的提问来源于stack exchange,提问作者Skylimit
相关产品推荐
相关产品推荐

