Pan Sharpening Sentinel 2 with Planet data

pan sharpening

Pan sharpening is the process of increasing the spatial resolution of an RGB (Red, Green, Blue) image. Both Landsat 8 and Landsat 7 have a 15m spatial resolution panchromatic band. The benefit of pan sharpening is clear; it allows the production of a significantly sharpened RGB image.

There is plenty written about pan sharpening – after all it is a very common process. Most recently I saw this blog, detailing pan sharpening with Photoshop

There are numerous others, for example:

Frequently used software

There are various software tools available to undertake this process. All commercial remote sensing packages (plus Photoshop, as detailed above) have this ability. ArcGIS Desktop has pan sharpening included, in fact ESRI give a pretty detailed overview of the methods available here. The Semi Automatic Classification Plugin (for QGIS) has an option to pan sharpen Landsat data (as well as other tools in the pre-processing tab); for details see here – it really is excellent. And then there is GDAL which has its own pan sharpening method that can be used.

gdal_pansharpen panchromatic.tif rgb.tif result.tif

Supported on Unix operating systems, dans-gdal-scripts has a handy process called ‘gdal_landsat_pansharp’ and there is a good tutorial on how to apply this script here. The tutorial forms the basis for this work, namely using the weighted Brovey transformation. ESRI help describe this below:

The Brovey transformation is based on spectral modeling and was developed to increase the visual contrast in the high and low ends of the data’s histogram. It uses a method that multiplies each resampled, multispectral pixel by the ratio of the corresponding panchromatic pixel intensity to the sum of all the multispectral intensities. It assumes that the spectral range spanned by the panchromatic image is the same as that covered by the multispectral channels.

Adapting the gdal script on the above tutorial provides the basis for the pan sharpening I will use.

gdal_pansharpen -w 0.52 -w 0.25 -w 0.23 -co PHOTOMETRIC=RGB panchromatic.tif rgb.tif result.tif

The -w flag is the weightings and the -co flag forces an RGB image to be created.

Pan Sharpening Sentinel 2 with Planet data

Here is an example using the pan_sharpening gdal script I showed before. I am using the Planet data from Open California data. I wrote about this here.


Why would we do this? It opens up the possibility of using RGB images created with Sentinel 2 data (which covers a much larger spectral range than the Planet dataset) and building much clearer terrain / land use models of the surface.

Low-res color bands + High-res grayscale band = Hi-res color image


Alignment of imagery could be an issue as I will be using imagery from 2 different sensors. Ensuring sensors have acquisitions close to each other (same day, ideally) will also help produce better quality results. The Wikipedia article on pan sharpening notes

Pan-sharpening techniques can result in spectral distortions when pan sharpening satellite images as a result of the nature of the panchromatic band. The Landsat panchromatic band for example is not sensitive to blue light. As a result, the spectral characteristics of the raw pansharpened color image may not exactly match those of the corresponding low-resolution RGB image, resulting in altered color tones. This has resulted in the development of many algorithms that attempt to reduce this spectral distortion and to produce visually pleasing images.

Sentinel 2 data

sentinel 2


planet sat data

Sharpened Sentinel 2

pan sharpening

Comparison of data

pan sharpening

It looks like quite a reasonable result; the golf course stands out nicely, the roofs look clearer.

Here is an example of RGB 12,8,3 using the Sentinel 2 bands

landsat geology

and sharpened


Method used

I used a really simple approach here. Using the red band, the blue band and the green band from the Planet data, I sharpened the same RGB Sentinel image each time leaving me with 3 pan sharpened images. I then converted each pan image into a numpy array (Python) and took the average pixel and the median pixel. I didn’t see any visual difference between the average and the median.

Pan sharpening is a pretty useful tool to have. The range of spectral bands on Sentinel 2 make sharpening the full range of multispectral data an attractive proposition. There might be potential application areas such as disaster mapping, geological mapping and detailed land use / land cover mapping.

This really is a fusion of images, improving the resolution of high quality multispectral data. I’ll take a look at an application of this next time.

I have grouped all my previous blogs (technical stuff / tutorials / opinions / ideas) are here

I am @map_andrew on twitter