gpt4 book ai didi

c++ - 使用 opencv 手动应用中值滤波器,与 medianBlur 函数的区别

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:43 25 4
gpt4 key购买 nike

当我像这样应用中值过滤器时:

Mat medianFilter;
medianBlur(histEqu, medianFilter, 3);

如果我像这样应用中值过滤器,我希望得到相同的结果:

Mat manualMedianFiler;
float factor = 1 / 9.0;
Mat kernelMedian = (Mat_<float>(3, 3) <<
factor, factor, factor,
factor, factor, factor,
factor, factor, factor);
filter2D(histEqu, manualMedianFiler, CV_8U, kernelMedian, Point(-1,-1), 0, 4);

结果矩阵相似,但不相等。难道我做错了什么?应用中值滤波器的正确方法是什么?

最佳答案

作为对@Miki 回答的补充,我提醒您,中值滤波器是给定 N 个样本(在本例中取自围绕中心像素的 3x3 正方形)对其值进行排序并取中间值的滤波器。所以给定 (1, 7, 2, 2, 1, 9, 22, 4, 5) 排序后你得到 (1, 1, 2, 2, 4, 5, 7, 9, 22) 并且中位数是 4,而平均值是 (1 + 7 + 2 + 2 + 1 + 9 + 22 + 4 + 5)/9 = 53/9 -> 5.8。

简而言之:中值滤波器不是线性的。

在想要去除尖峰的情况下,中值滤波器是首选。

关于c++ - 使用 opencv 手动应用中值滤波器,与 medianBlur 函数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31203438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com