圖像的幾何變換(一)

1.圖像的平移

圖像的平移是圖像的幾何變換中最簡單的變換之一,它是將一幅圖像上的所有點都按照給定的偏移量沿水平方向、垂直方向移動,平移后的圖像大小與原圖像相同。

在Matlab中沒有直接使用的函數(shù),所以這里我們先寫一個函數(shù) move.m,保存在子文件中方便以后直接調(diào)用。

function movepic=move(I,a,b);
% I 為原始圖像,a、b分別表示沿水平方向,垂直方向移動的距離
%不考慮平移之后圖像溢出的情況,找不到對應(yīng)點的地方都賦為1
[M,N,G]=size(I);% 利用size函數(shù)獲取圖像大小
I=im2double(I);% 將圖像數(shù)據(jù)類型轉(zhuǎn)換為雙精度
%分四種情況對新圖像進行賦值
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的值根據(jù)自身實際情況設(shè)計
a=50;
b=50;
movepic_1=move(I,a,b);%調(diào)用寫好的函數(shù)
figure,imshow(movepic_1);%顯示平移后的圖
axis on;

結(jié)果:

原圖
平移后結(jié)果
工作區(qū)截圖

噔噔噔,平移結(jié)束~

2.圖像的縮放

圖像的縮放是指將原圖像在x軸方向(即水平方向)按比例縮放x倍,在y軸方向(即垂直方向)按比例縮放y倍,從而得到一幅新圖像。
注意:如果x≠y,那么圖像可能產(chǎn)生幾何畸變
在Matlab中,提供了imresize()函數(shù)進行縮放操作。

調(diào)用的方式有以下幾種:
(1)B = imresize(A, m)
返回的圖像B的長寬是圖像A的長寬的m倍,即縮放圖像。 m大于1, 則放大圖像; m小于1, 縮小圖像。
(2)B = imresize(A, [numrows numcols])
numrows和numcols分別指定目標圖像的高度和寬度。 顯而易見, 由于這種格式允許
長寬比例不相同,因此所產(chǎn)生的圖像有可能發(fā)生畸變。
(3)[Y newmap] = imresize(X, map, m)
對圖像A進行縮放,m是縮放比例,它的取值可以使一個數(shù)值,也可以是數(shù)組(同(2)中的[umrows numcols]);默認條件下,該函數(shù)返回的是一個新的、最優(yōu)的、縮放后圖像Y的顏色映射數(shù)組newmap
(4)[...] = imresize(..., method)
method參數(shù)用于指定在改變圖像尺寸時所使用的算法, 可以為以下幾種:
① 'nearest': 這個參數(shù)也是默認的, 即改變圖像尺寸時采用最近鄰插值算法;
② 'bilinear':采用雙線性插值算法;
③ 'bicubic': 采用雙三次插值算法,在R2013a版本里,默認為這種算法,所以不同版本可能有不同的默認參數(shù),使用之前建議使用命令help imresize獲得幫助信息,以幫助信息為準;
(5)[...] = imresize(..., parameter, value,...)
該函數(shù)通過設(shè)置 parameter的值value,控制圖像的縮放特性。方法(4)是此方法的特殊版(待下次詳細補一下這個調(diào)用)

還是用之前的那張圖,來做一下縮放~
代碼:

clear all;
clc;
[I,map]=imread('C:\Users\Administrator\Desktop\timg.jpg');%讀取圖像
resizepic_1=imresize(I,0.1);%調(diào)用方式(1)縮小
resizepic_2=imresize(I,5.5);%調(diào)用方式(2)擴大
resizepic_3=imresize(I,[60,40]);%調(diào)用方式(2)
resizepic_4=imresize(I,[60,NaN]);%調(diào)用方式(2),行或列為NaN時,行或列取原圖像行或列
resizepic_5=imresize(I,1.6,'bilinear');%調(diào)用方式(4),設(shè)置圖像插值方法
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);

結(jié)果圖:

結(jié)果對比圖

放在一起結(jié)果顯示的不明顯。如果想一張一張的顯示圖像,修改下顯示圖像的代碼就可以,代碼就變成了這樣:

原圖
resizepic_1
resizepic_2
resizepic_3
resizepic_4
resizepic_6

好啦,第一部分結(jié)束啦~


準備過一個渾渾噩噩的周末

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容