www.gusucode.com > 冈萨雷斯数字图像处理matlab版源码V1.1 > 冈萨雷斯数字图像处理matlab版源码V1.1.3/code/adpmedian.m
function f = adpmedian(g, Smax) %ADPMEDIAN Perform adaptive median filtering. % F = ADPMEDIAN(G, SMAX) performs adaptive median filtering of % image G. The median filter starts at size 3-by-3 and iterates up % to size SMAX-by-SMAX. SMAX must be an odd integer greater than 1. % Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins % Digital Image Processing Using MATLAB, Prentice-Hall, 2004 % $Revision: 1.5 $ $Date: 2003/11/21 14:19:05 $ % SMAX must be an odd, positive integer greater than 1. if (Smax <= 1) | (Smax/2 == round(Smax/2)) | (Smax ~= round(Smax)) error('SMAX must be an odd integer > 1.') end [M, N] = size(g); % Initial setup. f = g; f(:) = 0; alreadyProcessed = false(size(g)); % Begin filtering. for k = 3:2:Smax zmin = ordfilt2(g, 1, ones(k, k), 'symmetric'); zmax = ordfilt2(g, k * k, ones(k, k), 'symmetric'); zmed = medfilt2(g, [k k], 'symmetric'); processUsingLevelB = (zmed > zmin) & (zmax > zmed) & ... ~alreadyProcessed; zB = (g > zmin) & (zmax > g); outputZxy = processUsingLevelB & zB; outputZmed = processUsingLevelB & ~zB; f(outputZxy) = g(outputZxy); f(outputZmed) = zmed(outputZmed); alreadyProcessed = alreadyProcessed | processUsingLevelB; if all(alreadyProcessed(:)) break; end end f(~alreadyProcessed) = zmed(~alreadyProcessed);