使用 TWAIN 扫描的图像的计算精度

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

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

以上是关于使用 TWAIN 扫描的图像的计算精度的主要内容,如果未能解决你的问题,请参考以下文章

Python遥感图像处理应用篇(二十八):Python绘制遥感图像分类结果混淆矩阵和计算分类精度

Python遥感图像处理应用篇(二十八):Python绘制遥感图像分类结果混淆矩阵和计算分类精度

Python遥感图像处理应用篇(二十八):Python绘制遥感图像分类结果混淆矩阵和计算分类精度

CNN图像分类的小技巧(6): 提升训练效率-混合精度训练

视觉系统 分辨率/精度/公差计算公式说明(Kyence)

使用 Twain.Dll 扫描图像