5、图像的缩放
下面值来介绍一下图像的缩放主要是根据函数imresize来实现的,我们先来看看代码和效果图,然后分析图像的缩放函数。代码和效果图像所示:
close all ;
clear all ;
clc ;
[im,map] = imread(‘Hydrangeas.bmp’);%读入图片
im0 = imresize(im,0.26);%进行缩放到原来的0.26倍
im1 = imresize(im,1);%缩放原来的比例
im2 = imresize(im,3.5);%进行缩放到原来的3.5倍
im3 = imresize(im,[64 40]);%进行图像的缩放并设置图像的行列
im4 = imresize(im,1.6,‘bilinear’);%进行线性插值实现缩放
im5 = imresize(im,1.6,‘triangle’);
set(0,‘defaultFigurePosition’,[100,100,1000,500]);%设置窗口大小
set(0,‘defaultFigureColor’,[1 1 1]);%设置窗口颜色
figure;%打开一个窗口,用来显示(多幅)图像
subplot(1,2,1), imshow(im,map);%显示图片,一行两列,第一幅
subplot(1,2,2), imshow(im0,map);%显示图片,一行两列,第二幅
figure;%打开一个窗口,用来显示(多幅)图像
subplot(1,2,1), imshow(im,map);%显示图片,一行两列,第一幅
subplot(1,2,2), imshow(im1,map);%显示图片,一行两列,第二幅
figure;%打开一个窗口,用来显示(多幅)图像
subplot(1,2,1), imshow(im,map);%显示图片,一行两列,第一幅
subplot(1,2,2), imshow(im2,map);%显示图片,一行两列,第二幅
figure;%打开一个窗口,用来显示(多幅)图像
subplot(1,2,1), imshow(im,map);%显示图片,一行两列,第一幅
subplot(1,2,2), imshow(im3,map);%显示图片,一行两列,第二幅
figure;%打开一个窗口,用来显示(多幅)图像
subplot(1,2,1), imshow(im,map);%显示图片,一行两列,第一幅
subplot(1,2,2), imshow(im4,map);%显示图片,一行两列,第二幅
figure;%打开一个窗口,用来显示(多幅)图像
subplot(1,2,1), imshow(im,map);%显示图片,一行两列,第一幅
subplot(1,2,2), imshow(im5,map);%显示图片,一行两列,第二幅
缩小:
等大:
放大
缩放并且设置行列:
线性插值:
下面介绍一下imresize函数的使用信息(可以通过在matlab 使用help imresize查看):
该函数主要用来调整图像大小。
B = imresize(A,SCALE)返回一个图像,大小是原来的SCALE倍;A是灰度、RGB或者二进制图像。
B = imresize(A,[NUMROWS NUMCOLS])调整图像大小,使其具有指定数量的行和列。 NUMROWS或NUMCOLS可能都是NaN,在这种情况下,将自动计算行数或列数,以便保留图像宽高比。
[Y,NEWMAP] = imresize(X,MAP,SCALE)调整索引图像的大小,其中按照SCALE的倍数对原图像进行调整。
[Y,NEWMAP] = imresize(X,MAP,[NUMROWS NUMCOLS])调整索引图像的大小,通过调整行数和列数进行调整。
要控制imresize使用的插值方法,可以在上面的语法中添加一个METHOD参数,如下所示:
(A,SCALE,METHOD)
(A,[NUMROWS NUMCOLS],METHOD),
imresize(X,MAP,M,METHOD)
imresize(X,MAP,[NUMROWS NUMCOLS],METHOD)
METHOD可以是一个命名一般插值方法的字符串:
‘nearest’ - 最近邻插值
‘bilinear’ - 双线性插值
‘bicubic’ - 三次插值;默认方法
METHOD也可以是一个命名插值内核的字符串:
‘box’ - 用盒形内核插值
‘triangle’ - 三角形内核插值 (相当于“双线性”)
‘cubic’ - 用立方核插值 (相当于“bicubic”)
‘lanczos2’ - 用Lanczos-2内核插值
‘lanczos3’ - 插入Lanczos-3内核
最后,METHOD可以是{f,w}形式的双元素单元阵列,其中f是自定义内插内核的处理函数,w是自定义内核的宽度。在区间-w / 2 《= x 《w / 2之外,f(x)必须为零。可以使用标量或向量输入来调用处理函数f。
可以通过使用上述任何语法之后的参数/值对来实现对imresize的附加控制。例如:
B = imresize(A,SCALE,PARAM1,VALUE1,PARAM2,VALUE2,。..)
参数包括:
‘Antialiasing’- 真假指定缩小图像时是否执行抗锯齿。默认值取决于您选择的插值方法。对于‘nearest’ METHOD参数,默认值为false;对于所有其他方法,默认值为true。
‘Colormap’ - (仅与索引图像相关) ‘original’ 或 ‘optimized’;如果‘original’ ,则输出newmap与输入图相同。如果是“优化”,则会创建一个新的优化颜色映射。默认值为“optimized”。
‘Dither’ - (仅适用于索引图像)true或false; 指定是否执行颜色抖动。默认值为true。
‘Method’ - 如上所述
‘OutputSize’ - 一个双元素向量[MROWS NCOLS], 指定输出大小。一个元素可以是NaN,在这种情况下,自动计算另一个值以保留图像的宽高比。
‘Scale’ - 一个标量或两元素向量,指定调整大小的比例因子。如果它是标量,则将相同的比例因子应用于每个维度。如果它是向量,它分别包含行和列尺寸的比例因子。
例子:
使用默认的双三次插值和抗混叠缩小两倍:
I = imread(‘rice.png’);
J = imresize(I,0.5);
figure,imshow(I), figure,imshow(J)
使用最近邻内插收缩因子2。 (这是最快的方法,但质量最差):
J2 = imresize(I,0.5,‘nearest’);
调整索引图像的大小:
[X,map] = imread(‘trees.tif’);
[Y,newmap] = imresize(X,map,0.5);
imshow(Y,newmap)
调整RGB图像的大小以获得64行,自动计算列数:
RGB = imread(‘peppers.png’);
RGB2 = imresize(RGB,[64 NaN]);
图像的几何变化差不多就到这里了,matlab中有很多函数可以实现图像的几何变换,这里就不详细说明了。
评论
查看更多