Main Content

Change Filter Strength Radially Outward

This example shows how to create filters that blur and darken pixels in proportion to the distance from the center of the image.

Read and display an image.

I = imread("peppers.png");
I = im2double(I);
imshow(I)

Figure contains an axes object. The hidden axes object contains an object of type image.

Blur Image Using Gaussian Weighting Function

Create a blurry copy of the image using a Gaussian filter with standard deviation of 2.

Iblurred = imgaussfilt(I,2);
imshow(Iblurred)

Figure contains an axes object. The hidden axes object contains an object of type image.

Create a weight image as a Gaussian filter of the same size of the image. To increase the portion of the image that appears sharp, increase the value of filterStrength.

filterStrength = 50;
weights = fspecial("gaussian",[size(I,1) size(I,2)],filterStrength);
imshow(weights,[])

Figure contains an axes object. The hidden axes object contains an object of type image.

Normalize the weight image to the range [0, 1] by using the rescale function.

weights = rescale(weights);

Create a weighted blurred image that is a weighted sum of the original image and blurry image. MATLAB automatically replicates the weight matrix for each of the R, G, and B color channels.

IweightedBlurred = I.*weights + Iblurred.*(1-weights);

Display the result. The image is sharp in the center and becomes more blurry radially outwards.

imshow(IweightedBlurred)

Figure contains an axes object. The hidden axes object contains an object of type image.

Vignette Image Using 1/R^2 Weighting Function

Get the size of the image.

sizex = size(I,2);
sizey = size(I,1);

Specify the center of the vignette.

xcenter = size(I,2)/2;
ycenter = size(I,1)/2;

Define the x- and y-coordinates of the surface.

[X,Y] = meshgrid((1:sizex)-xcenter,(1:sizey)-ycenter);

Define the radius from the center at each (x,y) coordinate.

R2 = X.^2 + Y.^2;

Define the weighting function as the inverse of R, scaled to the range [0, 1].

R2 = rescale(R2);
weights = (1-R2);
imshow(weights)

Figure contains an axes object. The hidden axes object contains an object of type image.

Apply the weighting function to the image and display the result.

I2 = I.*weights;
imshow(I2)

Figure contains an axes object. The hidden axes object contains an object of type image.

See Also

|