完整代码,附下载链接
文章目录
- 程序介绍
- 例程定位
- 算法原理
- 运行结果
- MATLAB源代码
程序介绍
面向灰度图像局部噪声抑制与细节保持问题,独立实现二维萨维茨基-戈莱滑动窗口滤波(SG)。程序在每个局部窗口内拟合二维二次多项式,并取窗口中心的拟合值作为输出,在平滑高斯噪声的同时保持局部斜率和曲率趋势。程序采用单个
.m文件,方便学习、参数调试和二次开发。
例程定位
本目录只实现二维萨维茨基-戈莱滑动窗口滤波(SG),不通过算法名称变量或switch/case切换其他滤波器。核心滤波、测试图像、噪声和指标均写在同一个入口文件中,不依赖Image Processing Toolbox
算法原理
窗口坐标构成二次多项式设计矩阵。由于窗口形状固定,中心估计可以预先化为一个卷积核,再通过反射边界卷积处理整幅图像。
运行结果
原始与含噪图像图:对比包含渐变、纹理、几何边缘和细线结构的原始测试图像与高斯噪声图像。
滤波结果与误差图:展示二维萨维茨基-戈莱滑动窗口滤波(SG)输出及其相对原始图像的绝对误差。
边缘剖面与质量指标图:对比典型行灰度剖面,并给出滤波前后的PSNR、局部SSIM和边缘保持指标。
命令行输出:直接输出图像与窗口尺寸、噪声类型、MSE、PSNR、局部SSIM、边缘指标、提升量、运行时间及有效值检查结果。
MATLAB源代码
部分代码如下:
%% 二维萨维茨基-戈莱滑动窗口滤波(SG)图像处理例程% 作者:matlabfilter,接定位与导航、滤波相关的matlab代码定制% 2026-08-24/Ver1% 单文件例程:生成测试图像与噪声,完成滤波、指标评价和结果显示。clc;clear;close all;rng(0);%% 参数设置与测试图像cfg.imageSize=128;cfg.windowSize=5;cfg.noiseDescription='高斯噪声';cfg.noiseSigma=0.070;originalImage=generateTestImage(cfg.imageSize);%% 添加与算法场景匹配的噪声noisyImage=clipImage(originalImage+cfg.noiseSigma*randn(size(originalImage)));%% 执行二维萨维茨基-戈莱滑动窗口滤波(SG)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]范围。');%% 手工计算图像质量指标noisyMetrics=evaluateImageQuality(originalImage,noisyImage);filteredMetrics=evaluateImageQuality(originalImage,filteredImage);printResults(cfg,noisyMetrics,filteredMetrics,elapsedTime);%% 绘图:图窗保持纯净,源码不保存图片或添加水印plotOriginalAndNoisy(originalImage,noisyImage,cfg);plotFilteredAndError(originalImage,filteredImage);plotProfileAndMetrics(originalImage,noisyImage,filteredImage,...noisyMetrics,filteredMetrics);%% 本地函数完整代码下载链接:https://download.csdn.net/download/callmeup/93325652
如需帮助,或有导航、定位滤波相关的代码定制需求,可从个人主页左侧联系我