您的位置:首页 > 编程语言 > MATLAB

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

2017-06-23 09:49 387 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: