【问题标题】:Accuracy with calculations on images scanned with TWAIN使用 TWAIN 扫描的图像的计算精度
【发布时间】:2011-05-23 11:58:24
【问题描述】:

我正在使用 TWAIN 库来扫描灰度图像。然后,我以编程方式调整扫描图像中的每个像素,使其具有不同的白色和黑色端点。因此,颜色值小于黑点的像素被钳制到黑点。并且颜色值大于白点的像素被钳制到白点。此外,中间的所有像素都是外推的。

我的问题是我在计算中失去了质量,因为我正在计算的扫描图像每个颜色通道只有 8 位。

我要么需要某种方式来获取每个颜色通道具有更高位数的图像,要么我需要告诉扫描仪为我进行此计算。

我知道 Epson 控制面板允许您指定黑白端点并进行此计算,看起来它没有准确性问题。所以我想知道它是否正在做一些特定于爱普生硬件的事情。不幸的是,我的软件需要使用通用打印机。

有人知道解决这个问题的方法吗?

【问题讨论】:

  • 因为这是一个 c# 问题,所以代码示例会有所帮助
  • 您想要什么代码示例?我的转换代码没有任何问题,因此发布它不会有任何效果。我的问题是扫描图像限制为每个通道 8 位。所以我需要另一种方法。这可能是不可能的,但我认为值得发一个帖子来看看我是否遗漏了什么。
  • 另外,我所做的与 Gimp、Photoshop 或 PSP 在更改直方图窗口中的黑白端点时所做的相同。它们还显示出完全相同的不准确性——证明这不是我的代码有问题——只是输入纹理是 8bpp 的事实。因此,Epson 控制面板中的等效项必须执行不同的操作(例如,在保存到 8bpp 文件之前执行颜色转换)。
  • 好的。所以我已经删除了c#标签。
  • @akonsu,我认为@Dan 想要 C# 中的答案,所以 c# 标签非常合适。我正在添加它。

标签: c# image image-processing twain


【解决方案1】:

某些型号的 TWAIN 扫描仪 - 主要是平板 - 可以提供超过 8 位/通道的数据。

您的代码需要将传输机制(ICAP_XFERMECH)设置为内存(TWSX_MEMORY),将像素类型(ICAP_PIXELTYPE)设置为TWPT_GRAY,然后看看是否可以将ICAP_BITDEPTH设置为16。

如果成功,您可以进行内存(AKA 缓冲)图像传输,并获取 16 位/通道数据。我希望您会发现数据在 10-12 高位(即样本范围为 0..65535)中,而低位是噪声。

您不能使用本机传输模式 (TWSX_NATIVE),因为本机图像格式(DIB 和 PICT)不支持 16 位/通道数据。您也许可以使用支持 16 位/通道数据的文件格式的文件传输模式,例如 TIFF 或 JFIF:您只需要对扫描仪进行试验。

我只是用我桌上的 Epson Perfection V100 Photo 完成了这项工作,我相信其他 Epsons 支持这一点,也许所有 Perfection 系列都支持。 见:Twister Report archive

是的,当您在扫描仪的 UI 中进行对比度调整时,这适用于 8 位扫描的原因是扫描仪通过调整放大器中的增益来调整对比度 - 因此在模拟域中工作。 (实际上,无限位/通道 ;-)

您可以利用该电路:大多数平板都允许您设置 ICAP_SHADOW、ICAP_HIGHLIGHT 和 ICAP_CONTRAST - 这与在扫描仪 UI 中设置黑电平、白电平和对比度具有相同的效果。然后您将调整模拟信号,您将获得密集的 8 位 histograms

【讨论】:

  • 感谢您的详细帖子。我刚刚尝试使用内存 xfermech,但我的扫描仪在设置为 16 位时失败。虽然它只是一个便宜的扫描仪。我已将软件版本发送给客户,让他们在更高级的扫描仪上进行测试。
  • 回复。 ICAP_SHADOW/HIGHLIGHT/CONTRAST - 我似乎记得不久前看过那些,但是(我可能记错了)它似乎没有推断出没有超出范围的值。虽然我记错了,但我会再看一下这些,还有另一个原因我没有使用这些。
猜你喜欢
  • 1970-01-01
  • 2015-05-02
  • 2014-05-21
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 2011-01-16
相关资源
最近更新 更多