【问题标题】:Removing Color Banding From Images从图像中去除色带
【发布时间】:2021-10-01 18:43:27
【问题描述】:

我的这张图片有可见的水平色带:

我尝试了许多过滤器来去除条纹,但几乎没有一个可以完全去除条纹,并且过度模糊图像会导致细节丢失。

有什么方法可以使用 OpenCV 去除条纹吗?

谢谢

【问题讨论】:

  • 原装传感器的分辨率是多少?恕我直言,这看起来像是您使用了 32 位或 64 位传感器并将其保存或加载为 8 位。如果您的输入是 png 或 tiff,您可以检查在 irfanView 或 GIMP 中显示它是否没有条带。如果是这种情况,您可以使用 opencv 的 imread 参数以全精度加载,而不是(默认)加载为 3 通道 8 位。
  • @Micka:条带与分辨率损失无关(顺便说一句,没有什么像 32 或 64 位传感器,16 位是例外的)。 256 个灰度级足以使人眼无法察觉这些波段。
  • 是的,抱歉,我的意思是“超过 8 位”,就像非常古老的 kinect 传感器一样,它提供 13 位嵌入到 16 位中。我认为 ToF 或激光雷达可能会返回更高的数据深度深度图。如果在没有足够数据深度的情况下表示深度图,您将看到条带,例如在渲染(z 缓冲)中:upload.wikimedia.org/wikipedia/commons/4/4e/Z_buffer.svg
  • 也许你应该研究一下抖动
  • 只是猜测......您的.png 是 621x615(和 8 位 RGBA)。通常,来自传感器的数据[至少]具有偶数个像素/行和偶数行。几何对我来说似乎很奇怪。此外,您将显示 RGBA 图像。 [看似] 黑白传感器的确切像素格式是什么?也就是说,(例如)16 位存储单元中的 13 位(ala Micka)。你是如何重新缩放/转换原始黑白像素[到(例如)全范围 16 位]?当我做这样一个项目时,如果我没有正确执行此操作(例如饱和度等),我会得到人工制品

标签: python c++ opencv image-processing


【解决方案1】:

这张图片下半部分的内容真的很奇怪。有人想知道这是否不仅仅是因为场景的一个特征,比如楼梯。

这就是说,如果您掩盖了要保留的图像部分,则应该使用强大的模糊滤镜(仅垂直或二维)。

【讨论】:

  • 图像是从 GTA 框架中提取的。它有条带的原因主要是因为缺少位(8 位而不是 24 位)以及将帧从视频转换为图像。
  • @Cypher:你的意思是图像是 RGB 3:3:2 吗?您是如何(以及为什么)转换为灰度的?
猜你喜欢
  • 2013-09-07
  • 2020-04-11
  • 2020-01-05
  • 2021-12-24
  • 1970-01-01
  • 2013-04-28
  • 2018-10-21
  • 2016-12-22
  • 1970-01-01
相关资源
最近更新 更多