資源簡介
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
??????
- 上一篇:用Verilog實現整數轉浮點數
- 下一篇:MATLAB實現圖片柱面投影
評論
共有 條評論