I am creating an automatic change detection tool in Python for ArcGIS 10.2 using aerial imagery. The tool works but it also detects shadow change. I have been able to create a classified raster of just shadows and tried using raster calculator to eliminate the shadows using the Con statement and subtraction without success. Is there a way to remove shadows from an aerial image or make those areas NoDATA, using the tools in ArcGIS and Python. I read about histogram matching and using a mask to eliminate shadows though I am not sure how to go about doing this.

  • Are you looking to replace the shadow areas with different images? – Aaron Jun 1 '15 at 15:31
  • If it is possible. I was thinking about using the surrounding non-shadow imagery to replace the shadow areas. – marion Jun 1 '15 at 15:43
  • What type of imagery are you working with? – Aaron Jun 1 '15 at 15:49
  • Its a 4 band orthoimagery. – marion Jun 1 '15 at 15:56

For satellite imagery this would usually be done using an elevation model and time of capture to calculate which areas are in the shadow of mountains/hilltops etc. These areas could then be adjusted/normalized according to different methods. You can read more about this here:

Some methods also take into account indirect light (reflexes) from surrounding areas. A water body or a glacier could for example give more light to some shaded areas than others:

One way of solving your challenge would be to calculate shadow areas at the time of capture and then use the calculated areas to mask out potential shadow areas. This is done by setting the areas to NoData. The following information might help you to do this:

  • 1
    Thanks for the information. Once I classify the shadow areas, which image processing techniques are used to remove them from the image? – marion Jun 1 '15 at 17:29
  • Use the shadow areas and "delete" them from your original imagery. From what I understand this could be done by setting the shaded areas to NoData value. Will add reference in answer. – ragnvald Jun 1 '15 at 17:34
  • 1
    It worked. Do I use the surrounding pixel values to "fill in" the NoData areas? – marion Jun 1 '15 at 19:22
  • It depends on what your aim is to do. Perhaps you could experiment a bit and see what represents reality in the best way? In any way as long as you document your method in the product specification or similar you should be fine. – ragnvald Jun 1 '15 at 19:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.