在人脸识别等任务中,经常需要把一幅二维灰度图做仿射变换。给定输入图像矩阵 A、仿射矩阵 M 以及目标图像尺寸,采用前向映射方式把原图像像素投到新坐标系中,超出目标范围的像素丢弃,目标中未被覆盖处保持为 0。 仿射矩阵 M 为两行三列: 第一行 [a, b, tx],第二行 [c, d, ty]。 对原图中列坐标 x、行坐标 y(均从 0 开始计),对应的新坐标计算为: x' = ax + by + tx y' = cx + dy + ty 采用前向映射(source→target):对每个源像素计算 (x', y'),若 0 ≤ x' 输出为按行展开的一行数字(从第 0 行到最后一行,行内自左至右)。
输入描述:
第一行:a m o 三个整数,依次为输入图像 A 的行数 a、仿射矩阵行数 m(固定为 2)、以及后续“输出尺寸行数” o(固定为 1)。接着 a 行:每行若干整数,表示该行像素值(列数由每行给出,行内列数保持一致)。接着 m 行:每行 3 个整数,依次为仿射矩阵的参数 [a, b, tx] 与 [c, d, ty]。最后 o 行:每行两个整数 out_height out_width,表示目标图像尺寸(行数、高度;列数、宽度)。
输出描述:
一行:将目标图像按行展开输出,元素之间用空格分隔。
示例1
输入
2 2 1
1 2 3
4 5 6
1 0 1
0 1 1
3 4
说明
图像 2×3;M 表示整体平移 (+1, +1);目标尺寸 3×4。
源像素 (x,y) 被移到 (x+1,y+1)。第 0 行与第 0 列无像素落点,因此为 0;其余位置由源像素覆盖。
备注:
本题由牛友@Charles 整理上传
加载中...