Edge detection in low contrast images
Why don't you initially apply basic gray scale modificiations such as gamma , contrast etc.

Here is the result of performing such a simple processing:




It's now a more recognizable image at least for a human viewer and I believe the software algorithm will also perform better, provided it was not already doing it...