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

我有一些图像,他们有坏点(或像素结果不好)我有原始数据(bayered数据)。

在这里输入图像描述

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

我试图用bayer数据上的过滤器修复它们。 在我的算法中,我检测每个像素的颜色,如果它是绿色,则使用X模式来查找相邻的绿色像素,并且如果当前像素的值大于相邻像素的40个像素,则像素值将按相邻像素的平均值像素。

使用+模式对红色和蓝色做同样的事情。

但它没有解决这个问题。

任何可以修复这些坏点的算法?


我建议你为此目的使用中值滤波器。

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

过滤器的优点是它不是卷积。 它不会处理运算(没有意思,在邻居之间没有平均计算),它只需要从邻域获得一个像素值(这恰好是邻居像素阵列的中值)。

例如,在一个图像(一个颜色通道)上给出一个3x3窗口:

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

我们想获得一个在144155之间的像素值吗?

如果我们使用均值滤波器,我们计算平均值: (155+153+2+148+147+146+144+0+146)/9 = 116这与现实并不接近。 这是你似乎做的,因此一个不满意的结果。

如果我们使用中值滤波器,我们选择以下排序像素中的中值[0,2,144,146,146,147,148,153,155]
发现的中位数是146 ,这更接近现实!

这里是一个3x3内核大小的中值滤波结果的例子:

在这里输入图像描述在这里输入图像描述

在你的图像上使用相同的过滤器,我得到:

在这里输入图像描述

链接地址: http://www.djcxy.com/p/89817.html

上一篇: How to detect and fix dead pixels in images using OpenCV?

下一篇: Writing a float image in openCv with pixel values bigger than 1