Min-max szűrő

Az eróziónál a korábbi példákhoz hasonló megoldást mutatjuk be, a dilatációnál pedig kihasználjuk azt, hogy a Matlab mátrix műveletekre van optimalizálva.

function result = myerode( img, se_size )

    k = floor(se_size / 2);
    result = img;
    
    [height, width, channels] = size(img);
   
        for c = 1:channels;
            for i = 1:height-1;
                for j=1:width-1;
                    from_row = max( 1, i- k );
                    to_row = min( i+k, height-1);
                    from_col = max(1, j-k);
                    to_col = min( j+k, width-1 );
                    temp = img(from_row:to_row, from_col:to_col,c);
                    m = min(temp(:));
                    result(i,j,c) = m;

                end
            end
        end
   
end

function result = mydilate( img, kernel_size )

    k = floor(kernel_size / 2);  
    
    [height, width, channels] = size(img);
    
    rows=1:height;
    cols = 1:width;
    
    padimg = zeros(height+kernel_size, width+kernel_size, channels, 'uint16');
    
    result = padimg;
    
 
    for c=1:channels;   
        for u=-k:1:k-1;
           for v = -k:1:k-1;
               maxval =max(result(1+u+k:u+k+height, 1+v+k:v+k+width, c), uint16(img(:,:, c)));
               result(1+u+k:u+k+height, 1+v+k:v+k+width, c) = maxval;
           end
        end
    end
 
    result = result(k:k+height-1, k:k+width-1,:);
 
    result = uint8(result);
        
end