如何使用 OpenCV 检测和修复图像中的坏点?

How to detect and fix dead pixels in images using OpenCV?

我有一些图像有坏点(或结果不好的像素)我有原始数据(拜耳化数据)。

如何使用 OpenCV 检测和修复它们?

我尝试使用拜耳数据过滤器来修复它们。在我的算法中,我检测每个像素的颜色,如果它是绿色,则使用 X 模式查找相邻的绿色像素,如果当前像素的值超过相邻像素的 40 个,则像素值按相邻像素的平均值变化像素.

使用 + 模式对红色和蓝色执行相同的操作。

但是并没有解决问题。

有什么算法可以修复这些坏点吗?

我建议您为此目的使用 median filter

C++: void medianBlur(InputArray src, OutputArray dst, int ksize)

过滤器的优点是它不是卷积。它不会处理操作(不意味着,没有你的邻居之间的平均计算)它只会从邻域中获取一个像素值(这恰好是你的邻居像素数组的中值)。

例如给定一张图像(一个颜色通道)上的 3x3 window :

155 153  2    <- Noise here on the 3rd column
148 147 146
144  0  146   <- Noise here on the 2nd column

我们想要得到一个介于 144155 之间的像素值,对吗?

如果我们使用 mean filter,我们会计算平均值:(155+153+2+148+147+146+144+0+146)/9 = 116,这与实际值不接近。这就是您似乎所做的,因此结果不令人满意。

如果我们使用median filter,我们选择以下排序像素中的中值[0,2,144,146,146,147,148,153,155]
找到的中位数是 146 更接近实际情况 !

这里是内核大小为 3x3 的中值滤波器结果示例:

在你的图像上使用相同的滤镜我得到: