【MATLAB例程分享,图像滤波10】sigma滑动窗口滤波图像降噪、效果对比,代码与运行结果分享

0 阅读2分钟

在这里插入图片描述

原创代码,欢迎交流,请勿翻卖

@[toc]

例程面向灰度图像局部噪声抑制与细节保持问题,独立实现Sigma Filter。程序仅平均与中心灰度差位于指定噪声标准差范围内的邻域样本,减少跨边缘平均;有效样本过少时退化为局部均值以保持稳定。程序采用单个 .m 文件组织,仅使用基础MATLAB,自行生成测试图像、高斯噪声、边界扩展、滤波计算和质量指标,关键步骤配有中文注释,适合图像处理课程实验、算法原理学习、参数调试和二次开发。

运行结果

  • 原始与含噪图像图:对比包含渐变、纹理、几何边缘和细线结构的原始测试图像与高斯噪声图像。 在这里插入图片描述

  • 滤波结果与误差图:展示西格玛滑动窗口滤波(Sigma Filter)输出及其相对原始图像的绝对误差。 在这里插入图片描述

  • 边缘剖面与质量指标图:对比典型行灰度剖面,并给出滤波前后的PSNR、局部SSIM和边缘保持指标。 在这里插入图片描述

  • 命令行输出:直接输出图像与窗口尺寸、噪声类型、MSE、PSNR、局部SSIM、边缘指标、提升量、运行时间及有效值检查结果。 在这里插入图片描述

MATLAB源代码

部分代码如下:

%% 西格玛滑动窗口滤波(Sigma Filter)图像处理例程
% 作者:matlabfilter(V同号),接定位与导航、滤波相关的matlab代码定制
% 2026-08-27/Ver1

clc; clear; close all;
rng(0);

%% 参数设置与测试图像
cfg.imageSize = 128;
cfg.windowSize = 5;
cfg.noiseDescription = '高斯噪声';
cfg.noiseSigma = 0.070;
cfg.sigmaFactor = 1.7;
cfg.minimumSamples = 4;
originalImage = generateTestImage(cfg.imageSize);

%% 添加与算法场景匹配的噪声
noisyImage = clipImage(originalImage + cfg.noiseSigma * randn(size(originalImage)));

%% 执行西格玛滑动窗口滤波(Sigma Filter)
tic;
[filteredImage, diagnosticData] = applyCurrentFilter(noisyImage, cfg);
elapsedTime = toc;
filteredImage = clipImage(filteredImage);

assert(isequal(size(filteredImage), size(originalImage)), '滤波结果尺寸与输入不一致。');
assert(all(isfinite(filteredImage(:))), '滤波结果包含NaN或Inf。');
assert(all(filteredImage(:) >= 0 & filteredImage(:) <= 1), '滤波结果超出[0,1]范围。');

%% 计算图像质量指标

如需帮助,或有导航、定位滤波相关的代码定制需求,可联系我