MATLAB 实现 K近邻域滤波器

MATLAB 实现 数字图像处理 K近邻域滤波器

function [ J ] = fun( I )
%   边界保持类滤波器的K近邻均值滤波器
[l,w]=size(I);
M=5;K=9;                    %设定M*M为模板,K个邻近值
MM=M*M;                     %25
weighMM=ceil(M/2);          %3
lweighMM=fix(M/2);          %2
lhalfMM=fix(M*M/2);         %12
uhalfMM=ceil(M*M/2);        %13,为中心位置编号
iend=l-weighMM;
jend=w-weighMM;
J=I;
for i=weighMM:iend
    for j=weighMM:jend
        I1=I(i-weighMM+1:i+weighMM-1,j-weighMM+1:j+weighMM-1);%取出M*M的矩阵
        A=reshape(I1,1,MM);          %降为一维数组
        intA=int16(A);              %变成有符号数用来求绝对值大小
        for k=1:MM                  %将每个数与该矩阵中间数相减
            B(1,k)=int16(intA(uhalfMM)-intA(k));
        end
        BB=abs(B);                  %求绝对值,排序后绝对值最小的数为最接近的数
        [BBB,id]=sort(BB);              %id为排序前位置编号
        for k=1:K;                      %将绝对值最小的K个数拿出
            C(1,k)=A(id(k));
        end
        J(i,j)=round(mean(C));         %求这K个数的均值
    end
end
end
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值