综合优化: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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user