File Exchange

image thumbnail

Focus Measure

version 2.1 (4.54 KB) by

A function to measure the relative degree of focus of an image.

16 Ratings



View License

This function measures the relative degree of focus of an image. Several up-to-date focus measuring algorithms have been implemented and the function supports uint8 or double images. For futher details on each focus measuring algorithm the reader is referred to [1] and the references therein. For further information and datasets, see
[1] S. Pertuz et al., Analysis of focus measure operators for shape-from-focus. Pattern Recognition, 46(5):1415:1432, 2013.

Comments and Ratings (21)


DCTE and DCTR return exclusively NaN for inputs of type double (haven't tried uint8 inputs).


shike (view profile)


Said Pertuz

Said Pertuz (view profile)

@Anthony, the normalization is not strictly necessary since the operations are performed in double precision. However, your suggestion is quite correct if we want to avoid stability issues. I have corrected the code accordingly, thanks!


Thanks for providing your code!
Concerning the GDER criterion, I wonder wether the divisions in l 80/81 should not be replaced by

Gx = Gx / max(max(abs(Gx))) (resp. Gy)

in order to normalize the kernels?
The symmetry of the kernels implicates sum(Gx(:)) -> 0 thus creating extremely high values in resulting Gx & Gy (order of 10^13).

Sorry if I completely missed the point!

In your implementation of Brenners metric there seems to be a bug. diff(Image,2,1) and diff(Image,2,2) is used. This is somewhat like calculating the second order discrete derivation but shouldn't it be the (~first order) difference between two pixels with a distance d=2?


Jesse (view profile) seems to have gone away.


Misha (view profile)


Ahmed (view profile)

Thanks very much :)

How do you choose WSize=15 and sig=N/2.5 in 'GDER'? If anyone can help I would appreciate it.
Thank you for providing your code.

Very helpful, allows you to try quickly many different methods and see what suits your case.
There is for sure a small bug in SFIL case, between 270 and 315 degrees, R(:,:,7) appears twice instead of R(:,:,7) and R(:,:,8)



Engin (view profile)

It seems like some of the metrics (options) needs Wavelet Toolbox (if there is something like this?), because a lot of functions for WAVS, WAVV and WAVR are missing.

Moreover, it is not exactly clear if an image should be of type uint8 or double or what - however results of some metrics depends on datatype of image.

Quite a useful tool to measure various focus measures.


Rob (view profile)

I was wondering how you got the plot.


Nek Valous


Great tool, exactly what I was looking for!

Note that the ACMO method as written also requires the Fixed-Point Toolbox. I just commented out the isdouble() check, and make sure my images are uint8 before passing them in.

Dave Holden

Very useful



- Description updated


- Bug fixed in GDER focus operator


- Some bugs have been fixed (Brenner's and GDER's focus measure operators)


- The function no longer requires the floating-point toolbox.

MATLAB Release
MATLAB 7.7 (R2008b)

Inspired: Shape from focus, Extended depth-of-field

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video