編輯 | 究查 | 歷程 | 原始

影像處理與轉換模組 (Image Processor) 深度分析

CB_IMGPSScanImp.pas.bkiis_image_process.pas 中,「影像處理與轉換模組」負責在硬體掃描取得原始影像後,以及上傳/顯示之前,對影像進行一系列的強化、分析與格式轉換。這個模組是決定影像品質、檔案大小與後續 OMR 辨識準確率的關鍵。

根據源碼分析,其內部組成可細拆為以下六大子分類:


1. 影像幾何與物理變換引擎 (Image Geometric Transformation Engine)

職責:專責處理影像的空間座標轉換、旋轉、去斜以及裁切,確保最終儲存的影像端正且符合業務規定的尺寸。
核心實作特性
* 影像去斜與轉正 (Deskew & Rotate)
* DeskewImg:透過演算法自動偵測影像傾斜角度並將其校正。支援先以黑白影像偵測角度再套用於彩色影像的優化路徑。
* Rotate:執行 90、180、270 度的旋轉,可用於條碼方向校正或使用者手動轉向。
* 幾何校正規範 (Geometric Validation)
* GetPosAngle:計算三個定位點之間的夾角,用以判定影像是否嚴重形變。
* CheckSize:比對定位點距離與標準長寬,若有巨大落差則記錄並自動執行補償性縮放。
* 影像裁切與分割
* CheckNeedCropCropImg:針對 A3 雙頁合併影像進行自動分割或特定區域裁切。
* 影像縮放 (Resize)
* ImageReSize_FormID / ImageResize:依據表單定義或目標解析度強制縮放影像,確保 OMR 座標對位精準。

2. 色彩處理與編碼轉換器 (Color & Format Converter)

職責:處理影像色彩深度轉換,套用最適合的壓縮演算法,並進行濾鏡強化以提升辨識率。
核心實作特性
* 先進二值化 (Advanced Binarization)
* ConvertToBW:標準二值化處理。
* Gray2BW_RTS / Color2BW_RTS:整合 VRS (Virtual ReScan) 技術,透過特定參數精細化灰階轉黑白的過程,保留關鍵特徵。
* 影像增強濾鏡
* Image_Smooth(平滑)、Emboss(浮雕)、BrightnessImg(亮度調整)。
* FilterColor:濾掉特定顏色(如紅字或背景色)僅保留黑白內容。
* CleanupBorder:自動清除影像邊緣的掃描黑邊。

3. 條碼識別與解析器 (Barcode Recognizer)

職責:獨立負責解析影像上的一維或二維條碼,實現「文件自動歸類」。
核心實作特性
* 條碼引擎調用
* MpsGetBarcode:呼叫底層引擎解析二值化影像。
* PrintBarcode:反向操作,將文字轉換為 Code39 條碼並繪製於影像上。
* 邏輯綁定:根據條碼字串自動關聯 FormIDDocNo

4. OMR 與定位分析引擎 (OMR & Anchor Analyzer)

職責:為光學標記辨識服務,尋找基準點並計算像素分佈。
核心實作特性
* 基準點偵測 (Anchor & Spot Detection)
* FindPoint:支援 ANCHOR (十字) 或 FRAME (框線) 定位模式。
* FindBlackPoint / GetBlackSpots:在指定邊界內搜尋特定比例的黑塊作為定位參考。
* 像素判定
* Get_OMR:計算區域內黑色像素數量。
* GetPixBW:底層像素層級的黑白狀態讀取。

5. 影像合成與標記引擎 (Image Synthesis & Annotation) —— [NEW]

職責:在影像上疊加業務資訊,或自動生成業務用的單據影像。
核心實作特性
* 動態浮水印 (Watermark)
* Watermark1_Hong:支援透明度、自定義文字與旋轉(如斜向 330 度)的水印疊加。
* 業務戳記與單據生成
* CreateStamp:產生包含 UserID 與日期的電子圓戳記。
* CreateNote / CreateDraft:產生空白的便條或草稿圖層。
* CreateReportImg_JSON:根據 JSON 資料自動合成補件清單影像,整合背景、條碼與文字內容。

6. UI 互動輔助與元數據管理 (UI & Metadata) —— [NEW]

職責:處理視窗介面上的標記、框選,以及影像檔案內部的隱藏資訊。
核心實作特性
* 互動標記
* ShowKeyinRect / SetKeyinRect_New:在畫面上動態顯示黃色或透明遮罩,引導人員登打特定欄位。
* GetSelectRect2String:將人員在 UI 上拖曳的框選區域轉換為公分單位。
* 元數據處理
* GetTag / SetTag:利用 Tiff 檔案的 ImageDescriptionTag 儲存自定義業務資訊。
* JpgReSize_Exif:在處理 JPG 影像時保留或讀取拍攝日期等 EXIF 資訊。


影像相關關鍵字:

[
'BrightnessImg',
'CheckSize',
'CleanupBorder',
'Color2BW_RTS',
'ConvertToBW',
'ConvertToGray',
'CreateReportImg_JSON',
'CreateStamp',
'CropImg',
'DeskewImg',
'DpiResize',
'FilterColor',
'FindBlackPoint',
'FindPoint',
'GetBlackSpots',
'GetSelectRect2String',
'GetTag',
'Get_OMR',
'Gray2BW_RTS',
'ImageResize',
'Image_Smooth',
'JpgReSize_Exif',
'MpsGetBarcode',
'PrintBarcode',
'Rotate',
'SetTag',
'ShowKeyinRect',
'TDibGraphic',
'TJpegGraphic',
'TNBCleanupBorderTransform',
'TTiffGraphic',
'TWatermarkTransform',
'Watermark1_Hong',
]

💡 未來重構與微服務化建議

  1. 抽離為獨立的 Pipeline 模式
    應將影像處理流程標準化:Image -> PreProcess -> Recognize -> Synthesize -> Output
  2. Web 化對策
    • Canvas 合成:影像合成(水印、戳記)功能可轉移至瀏覽器端的 Canvas API 實作。
    • 影像處理庫:OpenCV.js 可用於處理去斜與 OMR 偵測;EXIF.js 用於處理照片元數據。
  3. 解耦 UI 與影像處理
    避免依賴 TImageScrollBox 等 UI 元件進行二值化運算。改用純記憶體物件處理,以利於在 Web Worker 中平行運算。