Geometric mean filter
The geometric mean filter is an image filtering process meant to smooth and reduce noise of an image.[1] It is based on the mathematic geometric mean. The output image G(x,y) of a geometric mean is given by
Where S(x,y) is the original image, and the filter mask is m by n pixels.
Each pixel of the output image at point (x,y) is given by the product of the pixels within the geometric mean mask raised to the power of 1/mn. For example, using a mask size of 3 by 3, pixel (x,y) in the output image will be the product of S(x,y) and all 8 of its surrounding pixels raised to the 1/9th power.
Using the following original image with pixel (x,y) at the center:
Gives the result of: (5*16*22*6*3*18*12*3*15)^(1/9) = 8.77.
Application
[edit]The geometric mean filter is most widely used to filter out Gaussian noise. In general it will help smooth the image with less data loss than an arithmetic mean filter.[1]
Code example
[edit]The following code shows the application of a geometric mean filter to an image using MATLAB.
% Applies geometric mean filter to image input_noise that has added gaussian noise
[m, n] = size(input_noise);
output = zeros(m, n); % output image set with placeholder values of all zeros
val = 1; % variable to hold new pixel value
for i = 2:m-2 % loop through each pixel in original image
for j = 2:n-2 % compute geometric mean of 3x3 window around pixel
p = input_noise(i - 1, j - 1);
q = input_noise(i - 1, j);
r = input_noise(i - 1, j + 1);
s = input_noise(i, j - 1);
t = input_noise(i, j);
u = input_noise(i, j + 1);
v = input_noise(i + 1, j - 1);
w = input_noise(i + 1, j);
x = input_noise(i + 1, j + 1);
val = (p * q * r * s * t * u * v * w * x) ^ (1 / 9);
output(i, j) = val; % set output pixel to computed geometric mean
val = 1; % reset val for next pixel
end
end
References
[edit]- ^ a b Gonzalez, Rafael (2002). Digital Image Processing 3nd Edition. Prentice Hall. pp. 232–233. ISBN 0201180758.