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

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.
From here you can download my image (https://drive.google.com/drive/folders/18_1Kshb8WbT04gwOw4d_xhfQenULDXdB?usp=sharing).

Risposte (2)

"Is there any other function that takes as input a fine resolution image, applies a Gaussian TF and produces a coarse spatial resolution image?" <== Yes, you can use conv2 or imfilter

1 Commento

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:
Many thanks.

Accedi per commentare.

See video on super resolution:
Particulalry starting around 2:29.
Could be very useful in forensics for enhancing surveillance videos.

5 Commenti

I don't understand how this is relevant to my question. The concept of super resolution mapping (or sub-pixel mapping), at least in the context of satellite remote sensing, is not a new concept, but this is about enhancing an image while my problem is about reducing the spatial resolution.
To simulate an image, captured with the same sensor (same number of megapixels), but with a worse PSF (for example due to a worse lens, dirt or smudges on the lens, haze or turbulence, or whatever), you can just convolve the image with a filter window that has some spread in it (i.e. not a delta function of a single pixel). This would blur out the image simulating a worse PSF. If you then want to change the size (number of rows and columns) then you can use imresize to subsample or upsize/interpolate to the new desired size. This could simulate a sensor of a different size, in essense changing the IFOV (if you know remote sensing you know what that means), or you could use the blockproc function to process blocks of pixels in the image to produce either a single pixel (which would give the output image fewer pixels than the input image) or a block of pixels (to have the output image have the same or different number of pixels as the input image). See attached blockproc demos.
If I've totally misunderstood your need, feel free to explain in more detail.
In spatial downscaling, the PSF of interest is not the measurement PSF, but rather the transfer function (e.g., Gaussian) between images at the original coarse and target fine spatial resolutions. The transfer function (TF) is subtly different to the measurement PSF. In case of multivariate downscaling (that is, we have ancillary fine resolution data to assist the downscaling of the coarse resolution image), the Gaussian filter upscales the fine resolution image to match the pixel size of the coarse resolution image in order to perform regression.
In other words, the common techniques to upscale an image is nearest neighbor, bilinear, cubic etc. But if I want to model the PSF I need to upscale the image (make the pixel bigger) using a Gaussian filter (simply because I assume it's Gaussian). This means that the upscaling is the PSF.
So in theory, what i have to do is apply PSF with an appropriate (large) sigma and thin the locations of the coarse pixels to suit the new coarse grid.So, for each new coarse pixel I need to go to its centre and calculate the weights (from the PSF) needed for each fine pixel surrounding it.
I hope I make my problem a little bit clearer now.
For a more detail explanation, if you have time to read, this is the article I am following (https://www.sciencedirect.com/science/article/pii/S092427162030229X).
this question answers my problem. all i have to do is insert my data

Accedi per commentare.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by