gpt4 book ai didi

algorithm - 通过跳过级别确定图像 Gamma

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:13:01 25 4
gpt4 key购买 nike

有很多扫描仪允许在它们的设置中设置图像 Gamma ,但不幸的是,这个 Gamma 是在扫描仪软件中调整的,而不是在扫描仪端(通过模拟方式或至少使用分辨率高于 8 位的 ADC) .比如说,我们最初从扫描仪获得线性响应,所以 255 是最大亮度,128 是亮度的一半等等,然后图像通过 LUT:

0 -> 0,
1 -> 21,
2 -> 28
...
127 -> 186,
128 -> 186,
...
254 -> 255,
255 -> 255

问题是:我们得到一些 Gamma 设置未知的扫描页面,并希望自动处理它们,而不需要人工仔细检查。

我们想要检测缺少某些特定亮度级别的图像(这里,gamma=2,2 我们错过了 1..20、22..27 等)并基于此分配相应的 gamma图像的值(value),所以它会被正确处理之后。顺便说一句,我们会提醒用户由于这种 Gamma 转换而导致信息丢失,因此用户应尽可能将其关闭。

确定这种最常见的 gamma=2.2 情况非常容易,我们只需检查相应的零即可。 Gamma=1 也很容易:在那种情况下我们应该没有任何遗漏。

但这将是最优雅的解决方案,不仅可以确定这些情况,还可以确定缺失的唯一值的任意 Gamma 。例如,gamma=1,01 具有除 20 以外的所有值。在 gamma = 1,2(Plustek Opticbook 扫描仪喜欢灰度图像的这个值)中,我们有 1, 2, 5, 7, 9, 12, ... 缺失, 等等。

有一个问题:有时可能会丢失一些低值和高值,因为我们在页面上没有额外的白色或额外的黑色区域,所以我们应该切断这些“尾部”,只处理内部丢失的级别。

我们可能会花费大量时间来构建某种决策树,但是所有的处理都应该尽可能快:有大量这些分辨率为 600 dpi 的图像。

有什么想法吗?

最佳答案

只是因为它更容易,我将讨论从 0.0 到 1.0 而不是 0 到 255 的级别,所以你的 Gamma 校正就像:

out = in^(1/γ)in = out^γ

在输出亮度区域中,您有足够的像素来检测由 Gamma 校正引起的直方图零点,没有像素的级别的比例取决于输入和输出曲线的相对斜率。

empty_level_proprotion(out) = max( 1 - din/dout , 0 )

替换 dout/din 得到:

empty_level_proprotion(out) = max( 1- (γ * out^(γ-1)) , 0 )

对于 Gamma 2.2,它看起来像这样:

https://www.wolframalpha.com/input/?i=plot+max(1-(2.2%2Ax%5E(1.2))+,+0)++from+0+to+1

这个公式允许我们检测应用的 Gamma 校正。我会:

  1. 将图像直方图分成32个亮​​度带
  2. 删除所有没有足够像素的波段。比如说,需要 20 倍于波段中不同级别的像素
  3. 计算没有像素的每个波段的级别数
  4. 将上述公式生成的曲线与剩余数据进行拟合,以找到最能解释数据的 Gamma 值。

如果您最初的想法可行,那应该会很有效。请注意,有些事情可能会把它搞砸:

  • 它不适用于 JPEG 压缩的图像,因为它们会填补缺失的层次
  • 如果扫描仪在进行 Gamma 校正之前对相同的 8 位数据进行了白平衡、对比度或亮度修复,那么这些操作可能会引入更多缺失级别,从而弄乱数据。这基本上只是将上面的 1 更改为每个颜色 channel 的不同值,因此如果您使曲线拟合更复杂,则可以检测到这一点。

关于algorithm - 通过跳过级别确定图像 Gamma ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45718249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com