Detecting clouds doesn't seem to be much of a problem, rather the challenge is in selecting cloud-shadow classes that don't also include coastal areas, agriculture, etc. For a project I'm working on, I've been using two methods:
Fmask (https://code.google.com/p/fmask/) is powerful and fully automated, plus it works for TM, ETM+, and OLI/TIRS data. It is great at catching harder to detect haze and the majority of other clouds/shadows. The problem I have with it however is that it tends to miss certain cloud types, namely smaller low altitude clouds and their shadows. I played around with the input parameters and found the best success using default values.
My other method is a semi-automated classification. I create NDSI, NDVI, and NDWI for a particular scene, stack those as RGB, and perform unsupervised classification in ERDAS Imagine 2013 (k-means, 10 iterations, 0.95 convergence threshold, and usually 256 classes). After working on several scenes, I preferred to use the stacked indices over classifying individual bands because it took less time and did a slightly better job at separating clouds/shadows from other classes.
In the end, I had fairly good success with detecting and removing clouds by combining these two methods, but ended up losing good data in my classification of cloud-shadows in particular. Has anyone had success in removing shadow areas that they'd like to share, or perhaps some insight into improving my classification process?