Destripe Landsat-7 ETM+

If you have Landsat-7 ETM+ then you are likely to encounter striping caused by the failure of the scan line corrector (SLC) in 2003. The SLC failure introduced major striping in ETM+ imagery. So what can we do about this (using ENVI)?

I have tested three approaches to solve the problem:

  • Principle Components Analysis
  • A tool downloaded from the ITTVIS code library
  • Filtering, using a morphological filter approach

The PCA failed miserably: having defined a User cut filter I found I was removing much more than just the striping. The resulting image was horribly degraded. A second try with more moderate filter definition just replaced some of the black stripes with speckled stripes: I didn’t think about the interpolation problem. Back to the drawing board

The code library tool was not entirely satisfactory. Only one band was corrected so I would need to save bands seperately, then destripe them, before stacking them again. Despite using the complex interpolation option the striping was quite crudely interpolated over. Previously I had tested the simpler alternative with better, and faster, results. Incidentally, memory allocation issues seem quite common and can be easily fixed by changing the Tile Size value in the Files>Preferences>Misc. (50 Mb works for me). This is a fairly common error with third party ENVI tools, so why not adjust the Tile Size upwards anyway?

Ultimately I tried an approach using a Closing Filter to try to ‘seal the gaps’ of the striping. Closing filters attempt to remove narrow isthmuses in data. I tried several filter sizes before settling on a 7×7 kernel. The result was quite satisfactory, though of course there was smoothing resulting from the filter operation.

So, problem solved? Almost. I was quite pleased with the result, though it is not perfect (see Fig.). The next step is to find the optimal approach to recovering some of the information lost during filtering. Two approaches spring to mind and these I will test ASAP: high pass filtering, and image sharpening using a fusion type approach (Transform>Image Sharpening). All can be implemented in ENVI. A wavelet approach would also be interesting but I would need to do that in Matlab or another package.

Before (L) and After (R) images showing the effect of destriping.

UPDATE: As noted in the comments extreme striping towards the edges of the images requires a larger kernel (filter window) size. To cope with this I would recommend subsetting the image into five or seven smaller images. The subsets would be spaced at equal intervals from the central strip that is unaffected by SLC stripping and extend across the whole image in the north-south direction (i.e. they should be long and narrow).

Let us call the central strip, or sub image, subset 1. Immediately to the left (west) is subset 2 and immediately to the right (east) is subset 3.  Subsets four and five would then be the subset outside 2 and 3 respectively. If you chose 7 subset images, then subsets 6 and 7 would be the outer sub images.

Subset 1 will not be filtered as it is unaffected by SLC stripping. Subsets 2 and 3 can be filtered by a smaller kernel (5×5 or 7×7). The kernel size is then increased with increasing distance from the subset 1. At the outer subsets you may need an 11×11 or 15×15 kernel (hence if you have time seven subsets might be best). When all the subsets are finished use the moasic tool in the Map menu to recompose a full image (i.e. join the subsets together).

Advertisements
This entry was posted in Remote Sensing and tagged , , , . Bookmark the permalink.

15 Responses to Destripe Landsat-7 ETM+

  1. Pawel says:

    Very helpful, straightforward explanation. Thanks very much. I am working with ETM+ on hurricane-related flooding in North Carolina.

  2. Jojo says:

    Hi. Thanks for this. I have downloaded the tool and it has been successfully installed. After re-starting ENVI I get Basic Tools→Preprocessing→General Purpose Utilities→ Landsat ETM+ Destripe. I tried to destripe my data and selected a band accordingly. I was trying to destripe band by band. But it shows an error saying “No Band Selected” even though I selected band 10. Please help.

    • blamannen says:

      Hi JoJo,
      you shouldn’t have a band 10 if you are using ETM+ data (there are only 8 or possibly 9 if you have 61 and 62 = low and high gain band 6). I have had problems in the past using the destripe tool. It sometimes only works on band 8 (panchromatic). The tool is not programmed by me so I suggest you contact the person who released it.
      Regards,

  3. Chandan Das says:

    I am working on a River morphology project and I am required to produce year-to-year change maps. The black stripes causes problems in any operation on image. I tried morphological filer with 7×7 kernel size. The results are still not satisfactory to me, as the lines still appear on the image. Though I am not an image processing expert, I think the filter should go north to south(or perpendicular to the lines) and when it finds the pixel falling within black line, algorithm should interpolate the pixel value to the neighboring pixels ( As Tobler states “Everything is related to everything else, but near things are more related than distant things.”) Proprietary RS softwares won’t be doing this so I feel it must be programmed in MATLAB or comparable software that provides flexibility.

    • blamannen says:

      Try increasing the kernel size to 11×11. The stripes are wider nearer the edges.

      • Chandan says:

        Thank you for suggestion. But increasing the kernel size (to 11 x 11) degrades quality of non-striped region of image remarkably. Such filters must work using parametric approach, rather applying the closing filter to entire image it should act on the region with stripes.

  4. Reinaldo Perez Machado says:

    This is very good idea! I will try it as soon as possible. But reading the last post I wonder if it will work the other way around. I mean if I am using a very central part of a LT7 image with stripes, shall I use a kernel < 7 to "repair" the image? How can I calculate the best size considering the portion of the image affected by the wider (or smaller) stripes?
    Thanks in advance for your opinion.

    • blamannen says:

      Hi Reinaldo,
      try subsetting the image as described in the Update I posted. It will result in degraded resolution towards the margins but should preserve more information towards the centre.

  5. Reinaldo says:

    Hi Blamannen,
    Thanks for the prompt answer. I was enthusiastic while finding this methodology and did not read carefully the whole blog before writing the post. I will certainly try your tip. I am planning to use 5 image spatial subsets as my area of interest is already an almost central (slightly displaced to the east) portion of the LT7 collection. Perhaps the total number of subsets might change, as I will have to calculate precisely the west-east dimension in order to not include black pixels in the subset 1.

  6. arivu says:

    i am working with lunar m3 data for the lithological discrimination. if u working on this with ENVI,
    to much of stripes are coming, finally the output image is look like as blurring. anyone can help for this?

  7. John Sulik says:

    If you want to “seal the gaps” before raster analysis (but after calibrating the image) then you may want to try a median filter instead of a closing filter, it’s more suitable for continuous data. Also, you will need to do some additional processing to fine tune the results as I suggest below.

    For the closing filter example provided above, you should follow up with a procedure like this:
    1) Change the 0’s to 1’s and the 1’s to 0’s in the gap mask file
    2) Use this new mask to mask out the closing filter image (this should leave you only with the closing filter results for areas that were originally stripes from scan line errors)
    3) Use the original gap mask to mask out the scan line stripes from the original image
    4) Mosaic (Boolean intersect) the results of step 2 and step 3.

    I’ve never tried this but hopefully you get the idea. You don’t want to seal the gaps in an image by changing every pixel value in the image. Instead, you want to fill in the missing values but leave intact the original values that don’t have scan errors.

    Also, If you’re going to classify SLC-off imagery then ignore this entire post and just apply a focal majority filter AFTER the classification in order to fill in the missing scan lines.

  8. Majid Nazeer says:

    Hi,
    This method is very useful and works well if we use a small kernel size, but when we increase the kernel size it affects other non-striped areas, please suggest something to overcome this problem.

    I want to use this destriping method in my research study, can you please explain how this method works (as I am not an expert in image processing) and also it will be great if someone can share some refereed research articles in which researchers have used this method for destriping ETM+ images.

    Thanks and Regards,
    Majid Nazeer
    The Hong Kong Polytechnic University

  9. mahesh says:

    can anyone help me with the code for “cloud detection”.

    please it will be a great help for me.
    mail the code to : mahiec70@gmail.com

  10. sadaf says:

    hi..
    i have to remove scan line error from landsat ETM+ bands. i have installed ENVI 4.7. when i start working on it i get Basic Tools→Preprocessing→General Purpose Utilities→ Landsat calibrations. in youtube tutorial videos their is another option “landsat gapfill” but i do not get. what should i do now.if any body can help me.

    Regards
    sadaf

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s