gpt4 book ai didi

python - 从明亮的彩条下发现图像

转载 作者:行者123 更新时间:2023-12-05 08:37:24 25 4
gpt4 key购买 nike

背景

给定一张覆盖有亮色条的黑白图像,目标是识别它。原始图像仍然可见,但不够清晰,无法识别。

enter image description here

问题

给定一个 RGB 格式的像素,我需要确定它是彩色的还是黑白的。我应该将它与一系列值进行比较吗?

识别后我想将像素反转为原始像素 black & white。在不覆盖原始像素的情况下,我应该做什么计算?

我曾尝试将可能指示彩色像素的值归零,但这种技术覆盖了颜色条后面的原始图像。

最终结果

反转后原图应该足够可见了。
提前致谢。

最佳答案

关于您的示例图像的第一件事是色带是非常特定于 RGB 的;叠加的颜色是纯红色、绿色、蓝色、品红色、黄色、青色和白色。这似乎表明修改图像的方式是将一些随机选择的 channel 发送到 255(或者以其他方式将它们放大一些常数或乘数)。图像中的亮点都没有变暗,这表明这些值只是更改为更高的值。由于图像是压缩的 jpeg,这些值也有点模糊。

为了更仔细地观察这种行为,我们可以看一下图像中每个颜色 channel 的值在图像的特定列上的分布。例如,图像的第一列具有以下像素颜色分布:

hist

从该图中可以非常明显地看出,红色 channel 上的值分布与绿色和蓝色 channel 上的值分布完全不同,并且所有值都接近红色 channel 的最大值。这提出了一种检测策略,即在每一列上取每个 channel 的中值或平均值,并将其设置为阈值以选择“坏” channel 。例如,任何 channel 的平均值超过 230 或每列的值都是“坏” channel 。运行此过程会使以下 channel 变差;您可以看到它非常接近图像中的实际色带:

thresh

orig

您还可以使用统计技术,例如阈值标准偏差而不是实际值(或使用值、标准偏差、偏度、峰度等的某种组合)以获得某些稳健性。

我们可以用其余 channel 的平均值或中值来估算不良 channel 中的值:

clean from std < thresh

但是,当您执行此操作时,您可以看到整个过程中有一些明亮的单列 strip ,它们对应于错误 channel 识别有点失败的列。失败的发生部分是因为图像是 jpeg,部分是因为一些颜色混合在一起(即颜色变化不一定发生在像素的边缘),难以选择正确的阈值,等等。在放大的图像上更容易看到这些问题:

enlarged

但是,我们可以做一些比上述所有操作都简单得多的事情。特别是,对于每一列,我们知道坏 channel 总是最亮的 channel 。由于图像最终是灰度的,我们只需要每个像素一个 channel 。这意味着我们可以简单地为每一列选择最暗的 channel ,我们永远不会得到坏的列(除非所有三个 channel 都坏,在这种情况下信息被破坏)。

所以这个过程只是为每一列选择颜色 channel 中的最小值,这比上述方法更容易用代码表达。而且我们也不必调整任何阈值。

# take the average value over each column
mean_columns = np.mean(img, axis=0)

# find the channels which have the minimum average value
channel_select = np.argmin(mean_columns, axis=1)

# reshape the result just to be passed into take_along_axis
channel_select = np.expand_dims(channel_select, axis=(0, 2))

# take the selected channels, squeeze just removes an unnecessary axis
gray = np.take_along_axis(img, channel_select, axis=2).squeeze()

这是该操作的结果:

corrected

查看此图像的一种简洁方式是 RGB 灰度图像具有三个相同的 channel ,即它包含冗余信息。您的某些图像列因某些 channel 的值按比例放大而损坏,但最小值在此过程中是不变的,除非所有 channel 都已损坏。因此,利用此不变量可以恢复大部分数据。

关于python - 从明亮的彩条下发现图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65719248/

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