一分钟了解“Matlab实现max-mean滤波”

来源:互联网 发布:测绘数据泄密案例 编辑:程序博客网 时间:2024/05/22 14:41
function result_maxmean=maxMeanFunc(im,patch_size)
%
%   Depeng Liu
%   Chongqing University
%
if( mod(patch_size,2)==0 ) %if
error('模版大小必须为奇数');
end %if


result_maxmean=999*ones(size(im));
 
im2=padarray(im,[patch_size patch_size],'symmetric','both');%根据模版的大小扩展一下原图
    half_patch_size=(patch_size-1)/2;
for num_row=patch_size+1:1:size(im2,1)-patch_size %num_row
for num_column=patch_size+1:1:size(im2,2)-patch_size %num_column
 
    
    liedequzhimen=num_column-half_patch_size:num_column+half_patch_size;%列号在变化
    yihangdezhongzhi=mean(    im2(num_row,liedequzhimen)   );  %所以结果是一行的中值  
    
    hangdequzhimen=num_row-half_patch_size:num_row+half_patch_size;%行号在变化
    yiliedezhongzhi=mean(    im2(hangdequzhimen,num_column)      );%所以结果是一列的中值
    
    zhuzhoudezhongzhi=mean( diag( im2(hangdequzhimen,liedequzhimen))   );%这是主轴的中值
    
    dangqiankuai= im2(hangdequzhimen,liedequzhimen);
    dangqiankuaidefuzhuzhou=[];
    for dangqianxiexuhao=1:patch_size %for1
        dangqiankuaidefuzhuzhou= [dangqiankuaidefuzhuzhou,dangqiankuai(dangqianxiexuhao,patch_size+1-dangqianxiexuhao)] ;      
    end %for1
    
    fuzhoudezhongzhi=mean(  dangqiankuaidefuzhuzhou   );%这是副轴的中值
    
    result_maxmean(num_row-patch_size,num_column-patch_size)=im2(num_row,num_column)-max([yihangdezhongzhi,yiliedezhongzhi,zhuzhoudezhongzhi,fuzhoudezhongzhi]);    
 
    
end  %num_column
end  %num_row


end %function
原创粉丝点击