? ? ? ?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中有很多函數可以實現圖像的幾何變換,這里就不詳細說明了。
評論
查看更多