use*_*996 1 c++ opencv filter median
当我像这样应用中值滤波器时:
Mat medianFilter;
medianBlur(histEqu, medianFilter, 3);
Run Code Online (Sandbox Code Playgroud)
如果我应用中值滤波器,我期望得到相同的结果:
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);
Run Code Online (Sandbox Code Playgroud)
所得矩阵相似,但不相等。难道我做错了什么?哪种是应用中值滤波器的正确方法?
作为对 @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。
简而言之:中值滤波器不是线性的。
如果想要去除尖峰,中值滤波器是首选。
| 归档时间: |
|
| 查看次数: |
4923 次 |
| 最近记录: |