1.圖像的平移
圖像的平移是圖像的幾何變換中最簡單的變換之一,它是將一幅圖像上的所有點都按照給定的偏移量沿水平方向、垂直方向移動,平移后的圖像大小與原圖像相同。
在Matlab中沒有直接使用的函數,所以這里我們先寫一個函數 move.m,保存在子文件中方便以后直接調用。
function movepic=move(I,a,b);
% I 為原始圖像,a、b分別表示沿水平方向,垂直方向移動的距離
%不考慮平移之后圖像溢出的情況,找不到對應點的地方都賦為1
[M,N,G]=size(I);% 利用size函數獲取圖像大小
I=im2double(I);% 將圖像數據類型轉換為雙精度
%分四種情況對新圖像進行賦值
for i=1:M
for j=1:N
if a<0 && b<0;
movepic(i,j,:)=I(i,j,:);
else if a>0 && b>0;
movepic(i+a,j+b,:)=I(i,j,:);
else if a>0 && b<0;
movepic(i+a,j,:)=I(i,j,:);
else if a<0 && b>0;
movepic(i,j+b,:)=I(i,j,:);
end
end
end
end
end
end
下面還是隨手百度一張闊愛的圖~
以上圖為例,進行平移
代碼:
clear all;
clc;
I=imread('C:\Users\Administrator\Desktop\timg.jpg');
imshow(I);%顯示原圖
axis on; %在坐標系中顯示
% a、b的值根據自身實際情況設計
a=50;
b=50;
movepic_1=move(I,a,b);%調用寫好的函數
figure,imshow(movepic_1);%顯示平移后的圖
axis on;
結果:
噔噔噔,平移結束~
2.圖像的縮放
圖像的縮放是指將原圖像在x軸方向(即水平方向)按比例縮放x倍,在y軸方向(即垂直方向)按比例縮放y倍,從而得到一幅新圖像。
注意:如果x≠y,那么圖像可能產生幾何畸變
在Matlab中,提供了imresize()函數進行縮放操作。
調用的方式有以下幾種:
(1)B = imresize(A, m)
返回的圖像B的長寬是圖像A的長寬的m倍,即縮放圖像。 m大于1, 則放大圖像; m小于1, 縮小圖像。
(2)B = imresize(A, [numrows numcols])
numrows和numcols分別指定目標圖像的高度和寬度。 顯而易見, 由于這種格式允許
長寬比例不相同,因此所產生的圖像有可能發生畸變。
(3)[Y newmap] = imresize(X, map, m)
對圖像A進行縮放,m是縮放比例,它的取值可以使一個數值,也可以是數組(同(2)中的[umrows numcols]);默認條件下,該函數返回的是一個新的、最優的、縮放后圖像Y的顏色映射數組newmap
(4)[...] = imresize(..., method)
method參數用于指定在改變圖像尺寸時所使用的算法, 可以為以下幾種:
① 'nearest': 這個參數也是默認的, 即改變圖像尺寸時采用最近鄰插值算法;
② 'bilinear':采用雙線性插值算法;
③ 'bicubic': 采用雙三次插值算法,在R2013a版本里,默認為這種算法,所以不同版本可能有不同的默認參數,使用之前建議使用命令help imresize獲得幫助信息,以幫助信息為準;
(5)[...] = imresize(..., parameter, value,...)
該函數通過設置 parameter的值value,控制圖像的縮放特性。方法(4)是此方法的特殊版(待下次詳細補一下這個調用)
還是用之前的那張圖,來做一下縮放~
代碼:
clear all;
clc;
[I,map]=imread('C:\Users\Administrator\Desktop\timg.jpg');%讀取圖像
resizepic_1=imresize(I,0.1);%調用方式(1)縮小
resizepic_2=imresize(I,5.5);%調用方式(2)擴大
resizepic_3=imresize(I,[60,40]);%調用方式(2)
resizepic_4=imresize(I,[60,NaN]);%調用方式(2),行或列為NaN時,行或列取原圖像行或列
resizepic_5=imresize(I,1.6,'bilinear');%調用方式(4),設置圖像插值方法
figure;
subplot(2,3,1),imshow(I);
subplot(2,3,2),imshow(resizepic_1);
subplot(2,3,3),imshow(resizepic_2);
subplot(2,3,4),imshow(resizepic_3);
subplot(2,3,5),imshow(resizepic_4);
subplot(2,3,6),imshow(resizepic_5);
結果圖:
放在一起結果顯示的不明顯。如果想一張一張的顯示圖像,修改下顯示圖像的代碼就可以,代碼就變成了這樣:
好啦,第一部分結束啦~
準備過一個渾渾噩噩的周末