MATLAB自适应平滑滤波

286 篇文章 33 订阅
236 篇文章 15 订阅

在这里插入图片描述
% 自适应平滑滤波
clc,clear,close all % 清理命令区、清理工作区、关闭显示图形
warning off % 消除警告
feature jit off % 加速代码运行
[filename ,pathname]=…
uigetfile({‘.bmp’;'.jpg’;},‘选择图片’); % 选择图片路径
str = [pathname filename]; % 合成路径+文件名
im = imread(str); % 原图像
im = imnoise(im,‘gaussian’,0,1e-3); % 原图像 + 白噪声

im1 = adaptsmooth_filter( im,[3,5] ); % 应用自适应平滑滤波
figure(‘color’,[1,1,1])
subplot(121),imshow(im,[]),title(‘original image’)
colormap(jet) % 颜色
shading interp % 消隐
subplot(122),imshow(im1,[]),title(‘自适应平滑滤波’)
colormap(jet) % 颜色
shading interp % 消隐
function Z = adaptsmooth_filter(X,mn)
% 函数对输入的二维图像矩阵进行自适应平滑滤波
% input:
% X:输入的二维图像矩阵
% m:m行的滤波模板
% n:n列的滤波末班
% output:
% Z:输出对m x n的二维图像矩阵的运算结果
if nargin < 2
m = 3; % 滤波模板尺寸
n = 3;
end
if size(X,3)~=1
error(‘图像应该为2维矩阵’)
end
if ~isa(X,‘double’)
X = double(X)/255; % 数据类型
end
m = mn(1); n = mn(2); % 模板大小
[n1,n2] =size(X);
X(n1:n1+m, n2:n2+n) = 0; % 扩充,使得图像能够被m x n模板全部覆盖
% 计算掩膜系数
for i =1:size(X,1)-m
for j=1:size(X,2)-n
H = zeros(m,n); % 初始化
for k=1:m
for l=1:n
Gx = 0.5* ( X(k+i,l) - X(k+i-1,l) );
Gy = 0.5* ( X(k,l+j) - X(k,l+j-1) );
d = sqrt(Gx^2 + Gy^2);
H(k,l) = exp(-d/2);
end
end
% 计算相关累加值
Z = H.*X(i:m+i-1,j:n+j-1);
% 归一化
im1(i,j) = im2uint8( sum(Z(😃)/sum(H(😃) );
end
end
Z = im1(1:n1,1:n2); % 去掉最边缘增加的行列

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值