安阳网站制作,wordpress 糗事百科,好的案例展示网站,一级直播均值滤波器的使用场景#xff1a; 均值滤波器使用于处理一些如上述蓝色线的高斯噪声场景 红色曲线是经过均值滤波处理后的数据。主要因为均值滤波设置数据缓冲区#xff08;也即延时周期#xff09;#xff0c;使得测量值经过缓冲不会出现特别大的变化。 黄色曲线为高斯噪声…均值滤波器的使用场景 均值滤波器使用于处理一些如上述蓝色线的高斯噪声场景 红色曲线是经过均值滤波处理后的数据。主要因为均值滤波设置数据缓冲区也即延时周期使得测量值经过缓冲不会出现特别大的变化。 黄色曲线为高斯噪声红色曲线为经过均值滤波处理后的数据。 如果想要更好的滤波效果 增加滤波和也即往后多取几帧数据进行累加求和再处以累加次数嵌套使用均值滤波也即用上一均值滤波输出作为本次滤波输入 均值滤波不适合处理类似橙色曲线的脉冲噪声的数据 蓝色曲线为经过均值滤波处理后的数据虽然整体幅值降低了但是如61-69区间实际测量只在61附近出现一次突变但很快下降正常但经过均值滤波处理虽然幅值被降低但其实也没有达到理想反而将突变脉冲以一个恒定的值持续了9s累加次数也即缓冲周期。 目标脉冲值是0未经过均值滤波处理在61s出现一较大突变由于系统本身的阻尼等作用系统实际不会产生太大的振荡可能由于来的比较快系统会微微抖一下就稳定。但如果使用均值滤波处理后在61s处的尖峰脉冲硬是被拉长了9帧才退出系统稳定性必定太差。因此脉冲信号噪声不适合用均值滤波可以考虑使用低通滤波 均值滤波作用 均值滤波是一种常见的图像处理技术用于平滑图像中的噪声或细节。它的主要用途包括 去除噪声图像中的噪声是由于图像采集过程中的各种因素引入的不希望的干扰。均值滤波可以通过计算像素周围邻域内像素的平均值来平滑图像并减少噪声的影响。 平滑图像在某些情况下图像中的细节过多或变化过于剧烈可能会导致视觉上的不连续或不平滑感觉。均值滤波可以通过平均周围像素的值来减少这些细节使图像更加平滑。 降低图像分辨率在一些应用中需要降低图像的分辨率以减少计算或存储的需求。均值滤波可以通过对图像进行平滑来实现降低分辨率的效果。 图像预处理在某些图像处理任务中如图像分割或边缘检测均值滤波可以作为预处理步骤帮助提取更准确的特征或边缘。 需要注意的是均值滤波是一种简单且常用的滤波方法但它可能会导致图像细节的模糊或平滑化。对于某些应用场景可能需要考虑其他更高级的滤波技术以在平滑图像的同时保留更多的细节信息。 均值滤波实现 #include stdio.h
#include stdlib.hdouble* weightedMeanFilter(double* input, int length, int windowSize, double* weights) {double* output (double*)malloc(length * sizeof(double)); // 创建新数组int halfWindowSize windowSize / 2;for (int i 0; i length; i) {double weightedSum 0.0;double weightSum 0.0;for (int j i - halfWindowSize; j i halfWindowSize; j) {if (j 0 j length) {weightedSum input[j] * weights[j - (i - halfWindowSize)];weightSum weights[j - (i - halfWindowSize)];}}output[i] weightedSum / weightSum; // 计算加权平均值}return output;
}int main() {double input[] {1.2, 2.3, 3.4, 4.5, 5.6};int length sizeof(input) / sizeof(input[0]);int windowSize 3;double weights[] {0.1, 0.6, 0.3}; // 示例权重系数数组double* output weightedMeanFilter(input, length, windowSize, weights);printf(Input: );for (int i 0; i length; i) {printf(%.2f , input[i]);}printf(\nOutput: );for (int i 0; i length; i) {printf(%.2f , output[i]);}free(output); // 释放动态分配的内存return 0;
}
/*
Input: 1.20 2.30 3.40 4.50 5.60
Output: 1.57 2.52 3.62 4.72 5.44
*/ 增加权重系数可以使均值滤波更加灵活以更好地适应不同的应用场景和需求。具体来说增加权重系数的意义包括 强调重要区域通过调整权重系数可以使某些像素在计算均值时具有更大的贡献。这样可以使均值滤波更加关注重要的区域从而保留或突出这些区域的细节。例如在人脸识别中可以增加权重系数以突出人脸区域以便更好地提取人脸特征。 抑制噪声或异常值某些像素可能受到噪声或异常值的干扰导致它们的值与周围像素明显不同。通过降低这些像素的权重系数可以减少它们对均值的影响从而抑制噪声或异常值的影响。 考虑空间相关性在一些情况下像素之间的空间关系对滤波结果的影响很大。通过调整权重系数以考虑像素之间的空间相关性可以更好地保留图像的结构信息。例如可以使用高斯加权系数来加权计算均值以便更好地平滑图像并保留边缘。 自适应滤波通过根据像素的特征或属性来动态调整权重系数可以实现自适应滤波。这意味着不同的像素可以具有不同的权重从而使滤波更加适应图像的局部特征。例如可以根据像素的梯度值或纹理信息来调整权重系数以实现更好的平滑效果。 总之增加权重系数可以提供更多的灵活性和控制力使均值滤波能够更好地适应不同的图像处理需求并在平滑图像的同时保留重要的细节。 #include stdio.h
#include stdlib.hdouble* weightedMeanFilter(double* input, int length, int windowSize, double* weights) {double* output (double*)malloc(length * sizeof(double)); // 创建新数组int halfWindowSize windowSize / 2;for (int i 0; i length; i) {double weightedSum 0.0;double weightSum 0.0;for (int j i - halfWindowSize; j i halfWindowSize; j) {if (j 0 j length) {weightedSum input[j] * weights[j - (i - halfWindowSize)];weightSum weights[j - (i - halfWindowSize)];}}output[i] weightedSum / weightSum; // 计算加权平均值}return output;
}int main() {double input[] {1.2, 2.3, 3.4, 4.5, 5.6};int length sizeof(input) / sizeof(input[0]);int windowSize 3;double weights[] {0.1, 0.6, 0.3}; // 示例权重系数数组double* output weightedMeanFilter(input, length, windowSize, weights);printf(Input: );for (int i 0; i length; i) {printf(%.2f , input[i]);}printf(\nOutput: );for (int i 0; i length; i) {printf(%.2f , output[i]);}free(output); // 释放动态分配的内存return 0;
}
/*
Input: 1.20 2.30 3.40 4.50 5.60
Output: 1.57 2.52 3.62 4.72 5.44
*/ 结果对比 参考
1、简单的均值滤波讲解附代码_哔哩哔哩_bilibili
2、https://www.cnblogs.com/faithlocus/p/17532226.html