Main Content

Resample Image with Gridded Interpolation

This example shows how to usegriddedInterpolant在ima重新取样像素ge. Resampling an image is useful for adjusting the resolution and size, and you also can use it to smooth out the pixels after zooming.

Load Image

Load and show the imagengc6543a.jpg, which is a Hubble Space Telescope image of the planetary nebulae NGC 6543. This image displays several interesting structures, such as concentric gas shells, jets of high-speed gas, and unusual knots of gas. The matrixAthat represents the image is a 650-by-600-by-3 matrix ofuint8integers.

A = imread('ngc6543a.jpg'); imshow(A)

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

Create Interpolant

Create a gridded interpolant object for the image.griddedInterpolantonly works for double-precision and single-precision matrices, so convert theuint8matrix todouble. To interpolate each RGB channel of the image, specify two grid vectors to describe the sample points in the first two dimensions. The grid vectors are grouped together as column vectors in a cell array{xg1,xg2,...,xgN}. With this formulation,griddedInterpolanttreats the 3-D matrix as containing multiple 2-D data sets defined on the same grid.

sz = size(A); xg = 1:sz(1); yg = 1:sz(2); F = griddedInterpolant({xg,yg},double(A));

Resample Image Pixels

Use the sizes of the first two matrix dimensions to resample the image so that it is 120% the size. That is, for each 5 pixels in the original image, the interpolated image has 6 pixels. Evaluate the interpolant at the query points with the syntaxF({xq,yq}).griddedInterpolantevaluates each page in the 3-D image at the query points.

xq = (0:5/6:sz(1))'; yq = (0:5/6:sz(2))'; vq = uint8(F({xq,yq})); imshow(vq) title('Higher Resolution')

Figure contains an axes object. The axes object with title Higher Resolution contains an object of type image.

Similarly, reduce the size of the image by querying the interpolant with 55% fewer points than the original image. While you can simply index into the original image matrix to produce lower resolution images, interpolation enables you to resample the image at noninteger pixel locations.

xq = (0:1.55:sz(1))'; yq = (0:1.55:sz(2))'; vq = uint8(F({xq,yq})); figure imshow(vq) title('Lower Resolution')

Figure contains an axes object. The axes object with title Lower Resolution contains an object of type image.

Smooth Out Zooming Artifacts

As you zoom in on an image, the pixels in the region of interest become larger and detail in the image is quickly lost. You can use image resampling to smooth out these zooming artifacts.

Zoom in on the bright spot in the center of the original image. (The indexing intoAis to center this bright spot in the image so that subsequent zooming does not push it out of the frame.)

imshow(A(1:570,10:600,:),'InitialMagnification','fit') zoom(10) title('Original Image, 10x Zoom')

Figure contains an axes object. The axes object with title Original Image, 10x Zoom contains an object of type image.

Query the interpolantF复制(大约)智慧这个放大的图片h 10x higher resolution. Compare the results from several different interpolation methods.

xq = (1:0.1:sz(1))'; yq = (1:0.1:sz(2))'; F.Method ='linear'; vq = uint8(F({xq,yq})); imshow(vq(1:5700,150:5900,:),'InitialMagnification','fit') zoom(10) title('Linear method')

Figure contains an axes object. The axes object with title Linear method contains an object of type image.

F.Method ='cubic'; vq = uint8(F({xq,yq})); imshow(vq(1:5700,150:5900,:),'InitialMagnification','fit') zoom(10) title('Cubic method')

Figure contains an axes object. The axes object with title Cubic method contains an object of type image.

F.Method ='spline'; vq = uint8(F({xq,yq})); imshow(vq(1:5700,150:5900,:),'InitialMagnification','fit') zoom(10) title('Spline method')

Figure contains an axes object. The axes object with title Spline method contains an object of type image.

See Also

|

Related Topics