• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: Matlab
  • 标签: matlab  

资源简介

MATLAB的.m文件,开关型矢量中值滤波器的实现,需要在标准CIELAB空间下使用,具体的开关型矢量中值滤波器的原理可以参考论文

资源截图

代码片段和文件信息

%开关型矢量中值滤波器仿真实现,im1为待滤波的图像,w为滤波窗口大小
function imvmf_out=OOVMF(imwTcd)

%im=im2double(im1);
imvmf_out = ones(size(im));
ws = (w-1)/2;
window = w^2;

temp_sumDiff=0;
countflag=0;

%M是一个四维5*5的矩阵,记录4个用于检测冲击噪声的方向模板
M=zeros(554);
M(3:1)=1;
M(:33)=1;
M(::2)=[0 0 0 0 1; 0 0 0 1 0; 0 0 1 0 0; 0 1 0 0 0; 1 0 0 0 0];
M(::4)=[1 0 0 0 0; 0 1 0 0 0; 0 0 1 0 0; 0 0 0 1 0; 0 0 0 0 1];
OneOfM=zeros(553);

flagOnOff=0; %flag用于判断当前像素是否是噪声点

% 边缘扩展
im_pad = padarray(im[ws ws]‘replicate‘); 

dim= size(im_pad);
row = dim(1);
col = dim(2); 
dis = ones(1window);
im_sub = ones(window);
MeanDiffC = ones(14);

for i=3:(col-2*ws)
for j=3:(row-2*ws)
        %OnOff switch
        im_sub3=imcrop(im_pad[i-2j-244]);
        for temp_i=1:4
            OneOfM(::1)=M(::temp_i);
            OneOfM(::2)=M(::temp_i);
            OneOfM(::3)=M(::temp_i);
            im_sub4=reshape( (OneOfM .* im_sub3) []3);
            temp_sumDiff=0; temp_diff=0;
            for temp_j=1:25
                temp_dva1=double(im_sub4(temp_j:));
                temp_dva2=double(im_sub4(13:));
                temp_diff=norm(temp_dva1-temp_dva2);
                temp_sumDiff = temp_sumDiff + temp_diff;
            end
      

评论

共有 条评论