diff --git a/CamScanner.cs b/CamScanner.cs index 6542917..5e95797 100644 --- a/CamScanner.cs +++ b/CamScanner.cs @@ -367,15 +367,20 @@ public static class DocumentScanner Marshal.Copy(resultData, 0, normU8.Data, resultData.Length); // --- d: 非线性对比度增强 --- - // 用 gamma 曲线代替线性分段,保留文字笔画间的灰度层次 - // gamma > 1:中间调压暗(文字变黑),但保留灰度渐变不糊成一团 + // gamma 曲线压暗 + 线性拉伸加深,两步结合: + // gamma 保留笔画间灰度层次 + // 线性拉伸让文字整体更黑 byte[] lut = new byte[256]; for (int i = 0; i < 256; i++) { double x = i / 255.0; - // gamma=2.5 让文字明显变黑,但笔画间灰度差异保留 - double y = Math.Pow(x, 2.5); - lut[i] = (byte)Math.Min(255, Math.Max(0, (int)(y * 255.0))); + // gamma=2.2 压暗 + double y = Math.Pow(x, 2.2); + // 再做线性拉伸:输出范围压缩到 0-200,之后白底清理会把200+推白 + // 这样文字更黑但笔画间差异按比例保留 + int val = (int)(y * 200.0); + if (val > 255) val = 255; + lut[i] = (byte)val; } Mat lutMat = new Mat(1, 256, MatType.CV_8U, lut); Mat contrasted = new Mat();