如何使用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
我们想获得一个在144
和155
之间的像素值吗?
如果我们使用均值滤波器,我们计算平均值: (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