Crack is a form of road distresses that may potentially reduce the road performance and threaten the road safety. Governments have made a great effort to achieve the goal of constructing a high quality road network. They are now, more than ever, fully aware of the need for adequate road inspection and maintenance. Crack detection is an essential part of road maintenance systems and has attracted growing attentions in recent years. As it is known, traditional manual road crack detection approaches are very time-consuming, dangerous, labor-intensive and subjective. Thus, the slow and subjective traditional procedures have been replaced gradually by automatic crack detection, which is developed for fast and reliable crack analysis in intelligent transportation systems. Automated crack detection systems can quantify the quality of road surfaces and assist in prioriltizing and planning the maintenance of the road network and thereby accomplish the objective of preserving the roads in good condition and extending the service life.
Our main contribution is giving a new descriptor of cracks (CrackForest) by using the statistical feature of structured tokens. We first use the random structured forest to generate the structured tokens. Then, we calculate the statistical histogram and the neighborhood histogram of these tokens. As a result, the crack is no longer limited to a few types, we leverage the types of crack into thousands of kinds.
In addtion, we use integral channel features to redefine the feature set of crack detection, so we can get better representation of the cracks.
We divide our framework into three stages. In the first stage, we extract the image patches by using a 16*16 sliding window. Then we use integral channel features, which are calculated on these image patches, to cluster their annotated crack edges by using random structured forests. After this step, we can get the most representative crack edge (we call it "token") of each cluster of similar image patches. The most representative tokens can be found in Fig. 2(a) in the manuscript. In the second stage, we assign a token for each image patch. The procedure is shown in Fig. 6 in the manuscript. The results can be found in the fourth column of Fig. 10 in the manuscript. In the third stage, we use the statistical feature histogram and the statistical neighborhood histogram as crack descriptor to represent crack regions and crack-free regions (noises). For example, Fig. 8(c) shows the statistical feature histogram of the detected region in Fig. 8(a). We apply a classification method to distinguish crack regions from noises. The results can be found in the fifth column of Fig. 10 in the manuscript. CrackForest achieves excellent accuracy.
Part of the Matlab code is supported on Piotr Dollar’s Structured Edge Detection Toolbox (github.com/pdollar/edges).
If you use our source code, we appreciate it if you cite:
@article{shiautomatic,
title={Automatic Road Crack Detection Using Random Structured Forests},
author={Shi, Yong and Cui, Limeng and Qi, Zhiquan and Meng, Fan and Chen, Zhensong},
publisher={IEEE}
}
@misc{CrackForest,
author = {Limeng Cui},
title = {CrackForest},
howpublished = {\url{https://github.com/cuilimeng/CrackForest}}
}
License
The software is made available for non-commercial research purposes only.
Installation
a) This code is written for the Matlab interpreter (tested with versions R2014b) and requires the Matlab Image Processing Toolbox.
b) Additionally, Piotr’s Computer Vision Toolbox (version 3.26 or later) is also required. It can be downloaded at:
github.com/pdollar/toolbox.
c) Next, please compile mex code from within Matlab (note: win64/linux64 binaries included):
>> mex private/edgesDetectMex.cpp -outdir private [OMPPARAMS]
>> mex private/edgesNmsMex.cpp -outdir private [OMPPARAMS]
>> mex private/spDetectMex.cpp -outdir private [OMPPARAMS]
>> mex private/edgeBoxesMex.cpp -outdir private
Here [OMPPARAMS] are parameters for OpenMP and are OS and compiler dependent.
Windows: [OMPPARAMS] = '-DUSEOMP' 'OPTIMFLAGS="$OPTIMFLAGS' '/openmp"'
Linux V1: [OMPPARAMS] = '-DUSEOMP' CFLAGS="\$CFLAGS -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp"
Linux V2: [OMPPARAMS] = '-DUSEOMP' CXXFLAGS="\$CXXFLAGS -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp"
To compile without OpenMP simply omit [OMPPARAMS]; note that code will be single threaded in this case.
d) Add crack detection code to Matlab path (change to current directory first):
>> addpath(pwd); savepath;
e) Finally, optionally download the crack image dataset (necessary for training/evaluation):
github.com/cuilimeng/CrackForest-dataset
f) A fully trained crack model for RGB images is available as part of this release.
Getting Started
- Make sure to carefully follow the installation instructions above.
- Please see "edgesDemo.m" to run demos and get basic usage information.
History
Version 1.0 (2015/09/28)