使用Opencv c ++的自适应中值滤波器

时间:2012-10-16 18:07:54

标签: c++ image image-processing opencv codeblocks

我在编写自适应中位数的代码时遇到了问题。

哪个是计算最小强度像素最大中值的最佳方法?

现在我读取图像像素的每个值

for (int y = 0; y < h; y++)
{
   uchar *ptr = (uchar*)(img->imageData + y * step);
   for (int x = 0; x < w; x++){
    printf("%u, ", ptr[x]);
   } 
   printf("\n");
}    

2 个答案:

答案 0 :(得分:0)

对于矩形窗口中的最大值和最小值,我会看van Herk's dilation algorithm,因为灰度扩张对应于最大运算符,并且对最小运算符的灰度侵蚀和矩形结构元素可以分解为垂直和一条水平线。

对于中值滤波,我会看moving histogram techniques

答案 1 :(得分:0)

对于最小/最大像素,您需要记录第一个像素的值,然后将每个像素与其进行比较,如果分别为较低/较高,则存储新值。 OpenCV提供了cv::minmaxLoc来简化这一过程。

对于中位数,您需要对所有像素进行排序并选择中间像素(当然,一旦排序,找到最小/最大值是微不足道的,因为它们将位于列表的任一端)。这更棘手,你有多远,什么不起作用?