Matlab: Increase the pixel size (decrease the spatial resolution) of a satellite image by applying a Gaussian filter with a (large) width

Viewed 21

The goal

I am trying to simulate coarse data as though they were measured with a coarse PSF (point spread function).

The data

I have a satellite image with 15m pixel size and I want to upscale it to 460 using a Gaussian filter. To do this I need to apply a transfer function (TF; e.g., Gaussian) to the fine data, but with a very large width. This produces the coarse data.

I came across the function iamgaussfilt but the output is an image with the same pixel size as my input. Is there any other function that takes as input a fine resolution image, applies a Gaussian TF and produces a coarse spatial resolution image?

To make my problem even more clear, I am following the paper 'The effect of the point spread function on downscaling continua'. All in all, the authors wanted to downscale a coarse satellite image using an ancillary fine spatial resolution variable. The downscaling consists of two steps:

  1. regression
  2. kriging on regressions residuals

During the regression, they had to upscale the fine resolution image to match the pixel size of the coarse resolution image and then they performed the regression. This upscaling had to be done using the PSF. The image below illustrates my problem as well.

problem

I am trying to use the imfilter function but the output seems to be the same as the input in terms of dimensions (i.e., pixel size). But, I have found this post where they use the imresize function to change the resolution of the filtered image. I was wondering if that's the right way to upscale (decrease the spatial resolution) an image using a Gaussian filter or I can do it, only by using the imfilter.

Here is my code, based on the post I found:

ntl = imread('ntl.tif');
r = imread('pan15.tif');
figure()
imshow(r);
kernel = fspecial('gaussian', [7 7], 1.6);
blurredImage = imfilter(r, kernel);
downSample = imresize(blurredImage, [91 48]); % dimensions based on the ntl img 
imshow(downSample);
figure()
imshow(downSample);

And here is the output:

output

I was wondering if I am on the right path to degrade the spatial resolution or not. If not, how should I proceed? From here you can download the image.

0 Answers
Related