综合优化:gamma=2.2保留层次 + 输出范围压到0-200加深文字

gamma从2.5降到2.2(避免过度压暗糊成团),同时把输出范围
从0-255压缩到0-200,等效于整体加深20%,文字更黑但笔画
间灰度差异按比例保留。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-19 17:29:40 +08:00
parent b99ec63306
commit 38ce8627a5

View File

@@ -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();