Átlagoló szűrő
Készítünk egy függvényt, amely paraméterként várja az input képet és a szűrő méretét.
function result = myaveragefilter( img, kernel_size )
k = floor(kernel_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 );
s = sum(sum(img(from_row:to_row, from_col:to_col,c)));
s = s / ( (to_row-from_row+1) * (to_col - from_col+1) );
result(i,j,c) = s;
end
end
end
end
Egy másik megoldás: egy tempoláris képbe eltolásokkal összegezzük a képpontok intezitásait, majd leosztjuk az összegeket a környezet méretével.
function result = myaveragefilter2( img, kernel_size )
k = floor(kernel_size / 2);
[height, width, channels] = size(img);
padimg = zeros(height+kernel_size, width+kernel_size, channels, 'uint16');
result = padimg;
for c = 1:channels;
counter = 0;
for u=-k:1:k-1;
for v = -k:1:k-1;
value = 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) = value;
counter = counter + 1;
end
end
result(:,:,c) = result(:,:,c) ./ counter;
end
result = result(k:k+height-1, k:k+width-1,:);
result = uint8(result);
end