Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 自适应中值滤波器_Image Processing_Filtering_Matlab - Fatal编程技术网

Image processing 自适应中值滤波器

Image processing 自适应中值滤波器,image-processing,filtering,matlab,Image Processing,Filtering,Matlab,我正在为自适应中值滤波器构造代码。当我执行它时,它在第12行给我错误。没有足够的论据。第28行。意外的MATLAB表达式 function f = adpmedian(g, Smax) %ADPMEDIAN Perform adaptive median filtering. % F = ADPMEDIAN(G, SMAX) performs adaptive median filtering of % image G. The median filt

我正在为自适应中值滤波器构造代码。当我执行它时,它在第12行给我错误。没有足够的论据。第28行。意外的MATLAB表达式

 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.

    % SMAX must be an odd, positive integer greater than 1.

      **12>>**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');
       `28>>`    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

    % Output zmed for any remaining unprocessed pixels. Note that this
    % zmed was computed using a window of size Smax-by-Smax, which is
    % the final value of k in the loop.
    f(~alreadyProcessed) = zmed(~alreadyProcessed);
函数f=adpminian(g,Smax)
%ADPMINE执行自适应中值滤波。
%F=ADPMINATE(G,SMAX)执行以下各项的自适应中值滤波:
%图G:中值滤波器从3×3开始,向上迭代
%一个接一个地调整SMAX的大小。SMAX必须是大于1的奇数整数。
%SMAX必须是大于1的奇数正整数。
**12> >**如果(Smax>`processUsingLevelB=(zmed>zmin)&(zmax>zmed)&。。。
~已处理;
zB=(g>zmin)和(zmax>g);
outputZxy=处理单级&zB;
outputZmed=processUsingLevelB&~zB;
f(outputZxy)=g(outputZxy);
f(outputZmed)=zmed(outputZmed);
alreadyProcessed=alreadyProcessed | processUsingLevelB;
如果全部(已处理(:))
打破
终止
终止
%任何剩余未处理像素的输出zmed。请注意
%zmed是使用大小为Smax的窗口计算的,Smax是
%循环中k的最终值。
f(~alreadyProcessed)=zmed(~alreadyProcessed);

是否可能
sMax
为空?为什么使用
作为“或”,为什么不使用
|
?请参阅元素类型与“短路”类型的运算符。使用wath参数是否调用该函数?我还建议您使用
mod(sMax,2)==1
此处代替rounding@MuhammadUsman显然
sMax
不应该是空的,但是当您收到错误时它是否可能是空的(出于某种原因)?您能否在调试模式下运行并验证
sMax
是否不是空的?如果我使用代码并执行:
r=adpmidian(1,3)
-我在matlab 2012b上没有发现任何错误。可能是因为您的matlab没有重新加载编辑过的文件?