图像缩放

用imresize函数可以改变图像的大小。使用该函数,可以指定输出图像的大小、插值的方法和用于防止出现走样的滤波器。

指定输出图像的大小

使用imresize函数,可以用两种方法指定输出图像的大小:

指定放大倍率;

指定输出图像的尺寸。

(1)指定放大倍率

指定一个大于1或者大于0且小于1的数,可以放大或者缩小图像。

(2)指定输出图像的尺寸

可以通过传递一个包含输出图像宽度和高度的向量来指定输出图像的大小。

下面打开一个图像,将它缩放到指定的宽度和高度并全部显示。

code.matlab
>> I=imread('d:\tree.jpg');
>> size(I)
ans =
   393   674     3
>> J=imresize(I,[600 800]);
>> subplot(1,2,1);imshow(I);
>> subplot(1,2,2);imshow(J);

生成如图2-1所示的图形,其中左图和右图分别为放大前后的图像。

Document Image

图2-1 放大前后的图像

指定插值方法

默认时,imresize函数使用最近邻插值法来确定输出图像中的像素值,但是可以指定其他的插值方法。表2-1中按照复杂性列出了MATLAB工具箱中所支持的插值方法。

表2-1 MATLAB工具箱支持的插值方法

变 量 值 插 值 方 法
'nearest' 最近邻插值法(默认方法)
'bilinear' 双线性插值
'bicubic' 双三次插值

在本例中,imresize函数使用了双线性插值法。

code.matlab
>> Y=imresize(X,[100 150],'bilinear')

用滤波器防止走样

缩小图像会导致输出图像失真和走样,因为缩小图像时总会丢失一些信息。在输出图像中,走样看起来像波纹。

在用双线性或双三次插值的方法缩小图像时,imresize函数会在插值以前自动对图像使用低通滤波器来降低走样产生的影响。可以指定滤波器的大小或者指定不同的滤波器。

如果使用了最近邻插值,则imresize函数不会采用低通滤波器。最近邻插值只适用于索引图像,而低通滤波不适合这些图像。