You are on page 1of 19

EE 4780

Bilateral Filter
Bahadir K. Gunturk 2
Bilateral Filter

( )
2 2
2 2
/ 2 ( ) ( ) / 2
1

( ) ( )
d r
x N
y x I y I x
y x N
I x e e I y
K
o o
+

=
=

Intensity (range)
proximity
Spatial (domain)
proximity
N is a fixed value used to define the spatial
neighborhood of the filter
K is the normalization constant
( )
2 2 2 2
/ 2 ( ) ( ) / 2
d r
x N
y x I y I x
y x N
K e e
o o
+

=
=

Bahadir K. Gunturk 3
Bilateral Filter
Matlab implementation
n=1:1:500; % Generate a vector from 1 to 500; the increment is 1.

I0=zeros(size(n)); % Generate a vector of zeros; the size of the vector is equal to the size of n.
I0(1:250)=15; I0(251:end)=10; % Set the first 250 values to 15, and the rest to 10.

I = I0 + 0.5*randn(size(I0)); % 0.5 is the standard deviation of the noise
figure;
subplot(2,1,1); plot(n,I0); axis ([190 310 6 18]); title('Original signal');
subplot(2,1,2); plot(n,I); axis ([190 310 6 18]); title('Noisy signal');
Bahadir K. Gunturk 4
Bilateral Filter
Matlab implementation
sigma_d=10;
N=round(4*sigma_d); % N determines the spatial neighborhood
sigma_r=1.3;


d = -N:1:N;
weights_d = exp(-d.*d/(2*sigma_d*sigma_d));



( )
2 2
2 2
/ 2 ( ) ( ) / 2
1

( ) ( )
d r
x N
y x I y I x
y x N
I x e e I y
K
o o
+

=
=

The weights depend on the spatial
distance (to the center pixel x) only;
therefore, it is calculated once and
saved.
Bahadir K. Gunturk 5
Bilateral Filter
Matlab implementation
sigma_d=10;
N=round(4*sigma_d); % N determines the spatial neighborhood
sigma_r=1.3;


d = -N:1:N;
weights_d = exp(-d.*d/(2*sigma_d*sigma_d));



x=260; % An example
pixels = I(x-N:x+N); % Put the pixels within the neighborhood of the center pixel into a vector.
weights = weights_d .* exp(-(pixels-I(x)).*(pixels-I(x))/(2*sigma_r*sigma_r)) + 0.0001;



weights = weights./sum(weights);
( )
2 2
2 2
/ 2 ( ) ( ) / 2
1

( ) ( )
d r
x N
y x I y I x
y x N
I x e e I y
K
o o
+

=
=

Add a small number in
case weights=0;
Bahadir K. Gunturk 6
Bilateral Filter
Matlab implementation
sigma_d=10;
N=round(4*sigma_d); % N determines the spatial neighborhood
sigma_r=1.3;


d = -N:1:N;
weights_d = exp(-d.*d/(2*sigma_d*sigma_d));



x=260;
pixels = I(x-N:x+N); % Put the pixels within the neighborhood of the center pixel into a vector.
weights = weights_d .* exp(-(pixels-I(x)).*(pixels-I(x))/(2*sigma_r*sigma_r)) + 0.0001;



weights = weights./sum(weights); % Normalize the weights so that its sum is equal to 1.

I_output(x) = sum(weights.*pixels);
( )
2 2
2 2
/ 2 ( ) ( ) / 2
1

( ) ( )
d r
x N
y x I y I x
y x N
I x e e I y
K
o o
+

=
=

Bahadir K. Gunturk 7
Bilateral Filter

figure; plot([x-N:x+N],weights)
Bahadir K. Gunturk 8
Bilateral Filter
Matlab implementation

d = -N:1:N;
weights_d = exp(-d.*d/(2*sigma_d*sigma_d));


% Repeat for all pixels

I_output = I;

for i=1+N:length(I)-N, % Be careful with the borders; do not exceed the dimensions.
pixels = I(i-N:i+N);
weights = weights_d .* exp(-(pixels-I(i)).*(pixels-I(i))/(2*sigma_r*sigma_r)) + 0.0001;
weights = weights./sum(weights);
I_output(i) = sum(weights.*pixels);
end

figure; plot(n,I_output);
Bahadir K. Gunturk 9
Bilateral Filter

1.3
r
o =
Input
Gaussian
Bilateral
10
d
o =
10
d
o =
Bahadir K. Gunturk 10
Bilateral Filter vs. Gaussian LPF
MSE=49.8
MSE=30.3
MSE=42.5
sigma_d=10
MSE=99.57
MSE=100.0
2
d
o =
10
r
o =
30
r
o =
50
r
o =
10
n
o =
Gaussian
Bahadir K. Gunturk 11
Wiener Filter
W X Y + =
Y X
w x
x
2 2
2

o o
o
+
=
Wiener Filter
Original
image
Noise
Noisy
image
Noise variance Signal variance
When sigma_x << sigma_w, (noise is very large), X goes to 0.
When sigma_x >> sigma_w, (noise is very small), X goes to Y.
Bahadir K. Gunturk 12
Wiener Filter
2 2 2

w x
y o o =
2
x
o
is estimated by
Since variance is nonnegative, it is modified as
] , 0 max[
2 2 2
w x
y o o =
2 2 2
2
1
max[0, ]
x i w
i
y
N
o o =

Estimate signal variance locally:


N
N
Estimate manually by
looking at the variance in a
smooth region.
Bahadir K. Gunturk 13
Wiener Filter
Noisy, o=10
Denoised (3x3neighborhood)
Mean Squared Error is 56
wiener2 in Matlab
Bahadir K. Gunturk 14
Image Enhancement
1 1 1
1 8 1
1 1 1
(
(

(
(

This is an high-pass filter.
It removes low-frequency components.
Bahadir K. Gunturk 15
Image Enhancement
High-boost or high-frequency-emphasis filter
Sharpens the image but does not remove the low-frequency
components unlike high-pass filtering
Bahadir K. Gunturk 16
Image Enhancement
High-boost or high-frequency-emphasis filter
High pass = Original low pass
High boost = A*(Original) + High pass

Part of the low-frequency components are added back to
the high frequency components

Bahadir K. Gunturk 17
Image Enhancement
1 1 1
1 8 1
1 1 1
(
(

(
(

A high-pass filter
A high-boost filter
1 1 1
1 9 1
1 1 1
(
(

(
(

Bahadir K. Gunturk 18
Image Enhancement
High-boost or high-frequency-emphasis filter
Bahadir K. Gunturk 19
Spatial Filtering

You might also like