geometry op• 数据种类:image → image
• 调用:fullseye.apply(img, "deskew", a=0.5, b=0.5)(2-D 的模型是一张图 + 两个标量旋钮 a,b∈[0,1])

*图为在 128×128 合成输入上实际运行的输出。左为输入,右为输出。点云以俯视散点显示(亮度 = z),一维序列为折线,体数据为沿 z 的最大值投影,视频为中间帧,复数图像为幅值;无法成像的返回值直接显示数值。*
扫描旋钮 a(0.1 / 0.5 / 0.9,另一旋钮取默认):
▸ deskew: 旋钮 a 扫描 (文档网站)
扫描旋钮 b(0.1 / 0.5 / 0.9,另一旋钮取默认):
▸ deskew: 旋钮 b 扫描 (文档网站)
阶段(前置算子 → 本算子,从左到右):
▸ deskew: 处理阶段 (文档网站)
换别的图像(合成场景 / 照片 / 硬币。上排为输入,下排为对应输出。旋钮取默认):
▸ deskew: 其他输入图像 (文档网站)
*未展示彩色 (H,W,3) 输入: 此算子把颜色通道当作第三个空间轴(跨通道)。请按通道分别调用。*
测量倾斜并将其扶正(deskew)。角度不是通过旋钮给出,而是从图像中估计。
a 调节搜索范围 ±(2 + 43a)°(a=0 时 ±2°,a=1 时 ±45°)。b 调节细化的步长 1/(1 + round(9b))°(b=0 时以 1° 为步长,b=1 时以 0.1° 为步长。越细越慢 ―― 这里就是取舍所在)。
判定量是横向投影轮廓的差分平方和。以某个角度旋转时若各行对齐,沿行方向压缩得到的浓度折线起伏最剧烈。先以 1° 步长粗搜,再以 b 的步长细化最佳的 ±1°。若同分则取角度较小的一方,因此没有结构的图像、空帧会落到 0°(= 原样返回输入)。
• 搜索在长边抽稀到 256 像素的副本上进行(角度不因抽稀而改变)。以原尺寸旋转只有最后 1 次。512x512 上即使最宽的搜索实测也只需 121 ms。
• 评分只在旋转后的中央正方形(边长 = min(H,W)/sqrt(2))上取 ―― 这是任何角度下都落在框内的范围,因此角落的填充方式不会混入评分。
• 框外用边缘的中位数填充(mode="constant")。现有的 rotate_image 用镜像填充,因此把表单扶正时四角会映入镜像文字(那边的 docstring 自己承认“不适合想用背景色填充框外的用途”)。扶正后的结果可以直接交给 OCR、裁剪,这是本 op 的附加价值。
实测精度与极限(行距 14 像素、宽 384 像素的合成页面):b=1(0.1° 步长)时,1 / 2 / 3.7 / 5 / 12 / 20° 全都误差 0.00°。但 小于 0.6° 的倾斜会返回 0 ―― 即使跨越整个页面宽度,行的偏移也不到 1 像素,投影的锐度被插值的圆滑所淹没。若想测得更细,请增大输入(判定量与宽度成正比)。
先行研究:用投影轮廓测倾斜是经典方法,Postl (1986) 以方差、Baird (1987) 以平方和 + 由粗到细的角度搜索作为判定量。本 op 属于 Baird 的谱系,新的不是方法,而是边缘的处理(见下文)。
★以前差分基准偏差 +3.0 度。其原因已经确定。 2026-09-17 的事前测量中,对真值 −7/−3/+3/+7 度,方差基准误差为 0.0 度,差分基准 4 条全部偏差 +3.0 度,并记录原因可能是 ndimage.rotate 产生的边缘伪影,但“用 mode="constant" 能否消除尚未验证”。原因不在于填充方式,而在于观察的范围 —— 只在旋转后的内接正方形上取分,差分基准在 1/2/3.7/5/12/20 度 全部情况下误差都为 0.00 度(实测)。
值域保持输入的原样(线性插值和边缘中位数都不会扩大值域)。★空帧(值域小于 1e-9)和小于 8 像素的输入原样返回。★不得分块处理 ―― 角度是由整幅图像确定的 1 个值,按块测量会使各块以不同的角度旋转(已附理由登记在 scale.py 中)。
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• 算法的正典(作者、年份)与用途见上面的族使用指南。
下面的程序已确认可以运行(与图相同的输入)。在 Studio 帮助中,此块会变成按钮,可当场加载并运行。
rotate_img 0.58 0.50 deskew 0.50 0.50
• gallery2d_geometry — py -3.11 examples/gallery2d_geometry.py
image 作为输入)identity · gaussian · mean_box · bilateral · unsharp · median · min_filter · max_filter
geometry)rotate_img · rescale_img · affine_warp · sk_swirl · mirror_image · transpose_region · rotate_image · zoom_image_factor
*Provenance: ops.py — 2D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.