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.