File Exchange ## Fast Bilateral Filt​er

version 1.0.0.0 (10.2 KB) by Kunal Chaudhury

### Kunal Chaudhury (view profile)

Fast O(1) Bilateral Filter

Updated 30 Apr 2012

MATLAB implementation of the fast O(1) bilateral filter described in the following papers:

 K.N. Chaudhury, D. Sage, and M. Unser, "Fast O(1) bilateral filtering using trigonometric range kernels," IEEE Trans. Image Processing, vol. 20, no. 11, 2011.

 K.N. Chaudhury, "Acceleration of the shiftable O(1) algorithm for bilateral filtering and non-local means," arXiv:1203.5128v1.

Xiaohua

### Xiaohua (view profile)

It's really very good code. Thank you very much.
But I think there has a little bug in the following code:
for k = 2 : n
if mod(k - 1, w) == 0
L(k) = template(ii , k);
R(n - k + 1) = template(ii , n - k + 1);
else
L(k) = max( L(k-1) , template(ii, k) );
R(n - k + 1) = max( R(n - k + 2), template(ii, n - k + 1) );
end
end

For example, given the following data
Original: 18 8 13 9 12 20 5 7 3 15 6
If applying the above code manually to the above data with kernel size 3, the output is
Result1: 18 18 13 13 20 12 20 7 15 15 15
At the sixth data 20, the filtered result is 12. This is obviously not correct.
The above bug can be corrected like this
for k = 2 : n
if mod(k - 1, w) == 0
L(k) = template(ii , k);
else
L(k) = max( L(k-1) , template(ii, k) );
end
if(mod(n - k + 1,w)==0
R(n - k + 1) = template(ii , n - k + 1);
else
R(n - k + 1) = max( R(n - k + 2), template(ii, n - k + 1) );
end
end
The judgement of mod() should be separated for L and R. Isn't right?
The the result becomes
Result2: 18 18 13 13 20 20 20 7 15 15 15
Anyway, thank you for your code and paper.

tiantian

### tiantian (view profile)

The code is very useful. Thanks for your contribution

BARKATHULLA N R

### BARKATHULLA N R (view profile)

good,thank u sir for the code.

##### MATLAB Release Compatibility
Created with R2010a
Compatible with any release
##### Platform Compatibility
Windows macOS Linux