这是一个非常有趣的问题。我曾经用实时红外成像仪(视频系统)来处理这类问题。实际上,在用户看到或拿到图像之前,我们在相机中内置了算法来处理这个问题。几个问题:
1)您是在处理 RAW 图像还是在处理已经预处理的灰度(或 RGB)图像?
2)这些图像的最终目标是什么。目标是简单地消除线条,而不管结果图像的其余部分的质量如何,或者是保持绝对最佳图像质量的关键。之后要进行其他处理吗?
我同意这些线条最有可能出现在您的所有图像中。这些线条出现在图像中的原因有两个,一个是在明亮的场景中,列的运算放大器饱和,从而导致图像的整个列获得相机可以输出的最亮值。另一个原因可能是糟糕的 OP AMP 或 ADC(模数转换器)本身(很可能不是 ADC,因为通常整个传感器基本上有 1 个 ADC,这会使整个图像变差,而不是你的情况)。饱和情况实际上更难处理(我不认为这是你的问题)。注意:传感器上过多的饱和度可能会导致传感器中出现坏像素和列(这就是为什么他们说永远不要将相机对准太阳)。可以处理坏柱问题。以上在另一个答案中,有人让你平均图像。虽然这可能有助于找出坏列(或坏的单个像素,或传感器的噪声矩阵)在哪里(并且您必须将相机平均指向黑色、白色,基本上是纯色),但它不是t 摆脱它们的正确答案。顺便说一句,我用黑白和平均,以及发现坏像素等来解释什么……称为校准传感器。
好的,所以说您能够获得此校准数据,那么您将能够找出哪些列是坏的,甚至是单个像素。
如果您有此数据,则可以擦除列的一种方法是:
for each bad column
for each pixel (x, y) on the bad column
pixel(x, y) = Average(pixel(x+1,y),pixel(x+1,y-1),pixel(x+1,y+1),
pixel(x-1,y),pixel(x-1,y-1),pixel(x-1,y+1))
这本质上是用一个新像素替换坏像素,这是它周围剩余的 6 个好像素的平均值。以上是算法的过度简化版本。在某些情况下,单个坏像素可能就在坏列旁边,不应该用于平均,或者两个或三个坏列彼此相邻。可以想象你会计算一个坏列的值,然后认为该列是好的,以便移动到下一个坏列,等等......
现在,我询问 RAW 与 B/W 或 RGB 的原因。如果您正在处理 RAW,则取决于传感器本身的构建,可能只有拜耳过滤图像传感器的一个子像素(如果您愿意)具有不良的 OP AMP。如果你能检测到这一点,那么你就不必丢弃其他好的子像素数据。其次,如果您使用 RGB 传感器拍摄灰度照片,并以 RAW 格式拍摄,那么您可以计算自己的灰度像素。许多传感器在使用 RGB 传感器返回灰度图像时,只会将绿色像素作为整体像素传回。这是因为它确实起到了图像发光的作用。这就是为什么大多数图像传感器为每个 r 或 g 子像素实现 2 个绿色子像素。
gray = (0.299*r + 0.587*g + 0.114*b)
为冗长的回答道歉,但我希望这对某人来说仍然是信息性的:-)