Image destriping: Difference between revisions
Jump to navigation
Jump to search
m (moved ASTER GDEM destriping to Image destriping) |
(+ref) |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
== | == Image destriping with Fast Fourier Transform (FFT) == | ||
In some image maps, artifacts (stripes) are visible. These can be reduced with FFT filtering ({{cmd|i.fft}}). | |||
First we take a look at the original tile (screenshot upper right map): | |||
<source lang="bash"> | <source lang="bash"> | ||
# set computational region to GDEM map: | # set computational region to GDEM map: | ||
g.region rast= | g.region rast=imagemap -p | ||
d.mon x0 | d.mon x0 | ||
d.rast | d.rast imagemap | ||
</source> | </source> | ||
Then we perform '''Fast Fourier Transform''' (FFT; screenshot upper left map): | |||
<source lang="bash"> | <source lang="bash"> | ||
i.fft in= | i.fft in=imagemap real=imagemap_real imag=imagemap_imag | ||
d.mon x1 | d.mon x1 | ||
d.rast | d.rast imagemap_imag | ||
d.rast | d.rast imagemap_real | ||
</source> | </source> | ||
Line 29: | Line 24: | ||
<source lang="bash"> | <source lang="bash"> | ||
# digitize filter mask to reduce noise | # digitize filter mask to reduce noise | ||
r.digit filter | r.digit filter #not working in Grass v7 | ||
d.rast filter | d.rast filter | ||
r.mask -i filter | r.mask -i filter | ||
d.rast | d.rast imagemap_real | ||
</source> | </source> | ||
Line 38: | Line 33: | ||
'''Inverse FFT''' to get filtered GDEM back (screenshot lower left map): | '''Inverse FFT''' to get filtered GDEM back (screenshot lower left map): | ||
<source lang="bash"> | <source lang="bash"> | ||
i.ifft real= | i.ifft real=imagemap_real imag=imagemap_imag output=imagemap_filtered | ||
r.mask -r | r.mask -r | ||
d.mon x2 | d.mon x2 | ||
d.rast | d.rast imagemap_filtered | ||
r.colors | r.colors imagemap_filtered color=elevation | ||
d.rast | d.rast imagemap_filtered | ||
</source> | </source> | ||
Line 49: | Line 44: | ||
Calculate the '''differences''' (screenshot lower right diagram): | Calculate the '''differences''' (screenshot lower right diagram): | ||
<source lang="bash"> | <source lang="bash"> | ||
# | # validate with differences map: | ||
r.mapcalc "diff = | r.mapcalc "diff = imagemap - imagemap_filtered" | ||
r.colors diff color=differences | r.colors diff color=differences | ||
d.mon x3 | d.mon x3 | ||
Line 58: | Line 53: | ||
</source> | </source> | ||
[[Image:Grass | [[Image:Grass image destriping with FFT.png|450px|center|thumb|Workflow of image destriping with FFT]] | ||
Note: If the MASK is made larger (more to the center), more aggressive destriping occurs. | Note: If the MASK is made larger (more to the center), more aggressive destriping occurs. | ||
== See also == | |||
* https://www.mapbox.com/blog/debanding-the-world/ (about Landsat7 SLC off debanding) | |||
* [http://paulbourke.net/miscellaneous/imagefilter/ Image Filtering in the Frequency Domain] | |||
* [https://www.mapbox.com/blog/debanding-the-world/ Landsat 7 destriping] | |||
[[Category: Image processing]] |
Latest revision as of 14:34, 10 October 2015
Image destriping with Fast Fourier Transform (FFT)
In some image maps, artifacts (stripes) are visible. These can be reduced with FFT filtering (i.fft).
First we take a look at the original tile (screenshot upper right map):
# set computational region to GDEM map:
g.region rast=imagemap -p
d.mon x0
d.rast imagemap
Then we perform Fast Fourier Transform (FFT; screenshot upper left map):
i.fft in=imagemap real=imagemap_real imag=imagemap_imag
d.mon x1
d.rast imagemap_imag
d.rast imagemap_real
Create a MASK in order to remove noise (screenshot upper left map):
# digitize filter mask to reduce noise
r.digit filter #not working in Grass v7
d.rast filter
r.mask -i filter
d.rast imagemap_real
Inverse FFT to get filtered GDEM back (screenshot lower left map):
i.ifft real=imagemap_real imag=imagemap_imag output=imagemap_filtered
r.mask -r
d.mon x2
d.rast imagemap_filtered
r.colors imagemap_filtered color=elevation
d.rast imagemap_filtered
Calculate the differences (screenshot lower right diagram):
# validate with differences map:
r.mapcalc "diff = imagemap - imagemap_filtered"
r.colors diff color=differences
d.mon x3
d.rast.leg diff
# done

Note: If the MASK is made larger (more to the center), more aggressive destriping occurs.
See also
- https://www.mapbox.com/blog/debanding-the-world/ (about Landsat7 SLC off debanding)
- Image Filtering in the Frequency Domain
- Landsat 7 destriping