From ed205c4f0481ab11230a367112bcd4f2175262b0 Mon Sep 17 00:00:00 2001 From: sinvo Date: Thu, 19 Mar 2026 17:11:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=98=B4=E5=BD=B1=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F=E6=96=87=E5=AD=97=E8=A2=AB=E6=A8=A1=E7=B3=8A=EF=BC=9A?= =?UTF-8?q?=E6=94=B9=E7=94=A8=E5=A2=A8=E8=BF=B9=E5=BC=BA=E5=BA=A6=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E4=BB=A3=E6=9B=BF=E6=96=B9=E5=B7=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 阴影区域内文字的局部方差被暗背景拉低导致误判。 改为直接看墨迹强度(inkData):>40说明有明显文字笔画保留, <40说明是阴影背景推白。墨迹强度不受背景亮度影响。 Co-Authored-By: Claude Opus 4.6 --- CamScanner.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/CamScanner.cs b/CamScanner.cs index fe9c047..c8158af 100644 --- a/CamScanner.cs +++ b/CamScanner.cs @@ -576,18 +576,20 @@ public static class DocumentScanner Marshal.Copy(shadowMask.Data, shadowMaskData, 0, shadowMaskData.Length); shadowMask.Dispose(); - // 在阴影区域内:高方差像素保留(文字),低方差推白 + // 在阴影区域内:保护文字,只清除阴影背景 + // 判断逻辑: + // 墨迹强度高(inkData > 40)→ 有明显文字 → 保留 + // 墨迹强度低 → 阴影背景 → 推白 for (int i = 0; i < resultData.Length; i++) { if (shadowMaskData[i] > 128) { - // 在大面积暗区域内 - if (varDataS[i] < 12) + if (inkData[i] < 40) { - // 低方差 → 阴影本身 → 白色 + // 墨迹弱 → 阴影背景 → 白色 resultData[i] = 255; } - // 高方差 → 文字 → 保留 + // 墨迹强 → 文字 → 保留原值 } }