Kraus and Pfeifer (1998) algorithm (see page 196, lower-left corner);
It comes with U.S.'s Forest Service software for LiDAR processing and visualization:
Fusion/LDV. It is an open source software.
You'll need the program command GroundFilter (see manual's page 88).
Here is its syntax:
i) GroundFilter [switches] ii) outputfile iii) cellsize iv) datafile1 datafile2 ...
Example of how to do it:
1- Install Notepad++;
2- Install Fusion/LDV;
3- Open Notepad++ and save as --> ".bat" file extension;
4- Set the directories: i) where Fusion is installed, iii) where ".las" files are stored, iv) where ".las" file output(s) (only ground returns) will be saved;
5- Write in front of those directories: i) the name of the program command ; iii and iv) the name of the files + their extension type;
6- Set the cellsize which is the search window size that the algorithm will work over. If you set 4, it means the algorithm of Kraus and Pfeifer (1998) will procede over several windows of 4 meter x 4 meters at your entire LiDAR cloud.
7- Save the ".bat" file in Notepad++ and execute it (shortcut = F5).
Before step 7, the code should look like this:
c:\Fusion\GroundFilter c:\lidar_data\project_b\city_x_ground_returns.las 4 c:\lidar_data\project_b\city_x_all_returns.las
EDIT:
2012 - Silva et al. - X SENGEF Janela de filtro LiDAR is a power point presentation (in English) that illustrates the answer above. In your case you will want to set a small cellsize on GroundFilter to find peaks (or breaklines) on the DTM.
The full paper is here, but it is written in Portuguese.