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