最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

圖文詳解matlab原始處理圖像幾何變換

 更新時間:2021年07月09日 09:21:03   作者:on2way  
Matlab 擅長于操作矩陣,而圖像其實就是矩陣,這篇文章主要給大家介紹了關(guān)于matlab原始處理圖像幾何變換的相關(guān)資料,需要的朋友可以參考下

(一)圖像幾何變換理論知識

(1)圖像的平移與比例

         圖像的平移很簡單,平移前后的坐標(biāo)分別為(x,y)和(x',y'),則滿足的關(guān)系式為

              x'= x +Tx;

       y'= y +Ty;

其中Tx與Ty分別為對應(yīng)的偏移量。 

圖像的比例也很簡單,可以描述為:x'=S_x * x;  y'=S_y * y;

那么上述的關(guān)系怎么用一個矩陣來表示呢?一個很重要的矩陣來了,那就是變換矩陣T,并且對于二維坐標(biāo)下的點,一般轉(zhuǎn)化為笛卡爾坐標(biāo)系下進(jìn)行計算,用一個三維點表示二維的,只不過把最后一項值置為1,這樣一個二維坐標(biāo)(x,y)就變?yōu)?nbsp;(x,y,1)了。在把上述的平移等式關(guān)系轉(zhuǎn)化為矩陣形式為:

 

比例等式關(guān)系為:

(2)關(guān)于旋轉(zhuǎn)變換

對于某個點,在坐標(biāo)系中的變換為(旋轉(zhuǎn)角度為θ,并且逆時針旋轉(zhuǎn)為正):

那么可以看出,這個時候?qū)?yīng)的旋轉(zhuǎn)矩陣為T就如圖上所示。

(3)關(guān)于對稱變換

對稱變換比較簡單,還是以點的變換為例,比如變換前的點P(x,y)和變換后的點P'=(x',y'),那么對稱變換包括點關(guān)于x軸、y軸、原點、y=x、y=-x等等,點的變換可以自己推導(dǎo)下,這樣也就可以得到對應(yīng)的變換矩陣T了。

比如,關(guān)于x對稱的話,T=[1,0,0;0,-1,0;0,0,1],關(guān)于原點對稱的話,T=[-1,0,0;0,-1,0;0,0,1];關(guān)于y=x對稱的話,T=[0,1,0;1,0,0;0,0,1];等等。

(4)復(fù)合變換

下面再重點介紹下復(fù)合變換,因為有的變換不是簡單的初等變換,但是有一點需要明確的是任何復(fù)合變換都可以用初等變換一步步變換而來。比如前面的旋轉(zhuǎn)變換,旋轉(zhuǎn)點選取的是原點,這樣才有的那個公式,那要是旋轉(zhuǎn)點不是原點怎么辦?比如任一點s(X_f,Y_f),那么點P繞著點s旋轉(zhuǎn)一定的角度θ該怎么表示呢?這里就要把這個復(fù)合變換化成為3個簡單的初等變換,具體步驟為:首先把s點平移操作至原點(這個過程中,相當(dāng)于所有的點都按照一定的方向平移了),然后相當(dāng)于在原點對平移后的P點進(jìn)行旋轉(zhuǎn)變換,變換完后再把這個店反平移回去,這樣是不是就相當(dāng)于完成了那個復(fù)合變換。此時的變換矩陣為T,則T可以看出是兩次平移矩陣T1、T2和一次旋轉(zhuǎn)矩陣T3相乘的組合,即T=T1*T3*T2,注意方向不能反,因為是矩陣相乘,反的話相乘的結(jié)果不一定相同。

那么這個時候總的變換矩陣T就是:

這個在編程實現(xiàn)原點移動位置時至關(guān)重要。

幾何變換的基礎(chǔ)知識就說到這,具體的可以再找相關(guān)文章了解。

(二)matlab編程實現(xiàn)變換

(1)對圖像的理解

        Matlab表示一副圖像的方法很簡單,對于灰度圖像來說,就是一個二維矩陣,行與列存的就是像素點的位置,而矩陣值就是該像素點的灰度值。這里以有名的一副圖lenna圖為例,那么直接image=imread(‘lenna.jpg')就可以加載帶matlab工作框中,顯示的話imshow(image)就可以了,顯示如下:

(2)比例變換

了解了變換的基本原理,要知道其中最重要的就是關(guān)于坐標(biāo)的變換。如果以上圖中的行和列都為1的點作為原點的話,變換的程序為:

%-------------函數(shù)說明----------------
%    比例變換
%       輸入變量:img 灰白圖像(彩色不行)
%                s_x  x方向上的比例系數(shù)
%                s_y  y方向上的比例系數(shù)
%-------------------------------------
function bili(img,s_x,s_y)
[m,n] = size(img);
new_matrix = ones(m,n);
T1 = [s_x,0,0;0,s_y,0;0,0,1];   %對應(yīng)的比例系數(shù)矩陣
for i=1:m
    for j=1:n
        p = floor([i,j,1]*T1^-1);%由P_new = P_old*T 可得:P_old = P_new*(T^-1)
        if (p(1)<=m)&&(p(1)>0)&&(p(2)<=n)&&(p(2)>0) %限制范圍 
         new_matrix(i,j) = img(p(1),p(2));   %坐標(biāo)變換關(guān)系
        else 
        new_matrix(i,j) = 0;     %沒有的點賦值為0
        end
    end
end
figure;imshow(new_matrix,[]);
————————————————
版權(quán)聲明:本文為CSDN博主「on2way」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/on2way/article/details/40460675

這樣運(yùn)行對應(yīng)程序:

bili(image,2,2):

bili(image,0.5,0.5):

可以看到,分別對圖像擴(kuò)大和縮小的時候,都是以行和列為1為原點來操作的。如果還是以這個點來進(jìn)行旋轉(zhuǎn)操作的話,就會非常不協(xié)調(diào)不好看。況且如果了解matlab本身自帶這些旋轉(zhuǎn)、比例操作函數(shù)的話會發(fā)現(xiàn),這些函數(shù)操作原點是圖像的正中心,這樣操作起來后才很好看。那么現(xiàn)在的問題就是如何把圖像的中心作為我們在坐標(biāo)系下認(rèn)為的原點呢?那就是上面講到的三步走了,首先平移中心點至原點,再變換,再平移至中心點就好了。我們需要做的就是確定平移的行與列的長度(平移的長度應(yīng)該是圖像行與列總長度的一半吧,如果是把中心點當(dāng)做原點的話)。基于此修改上述的程序如下:

function bili(img,s_x,s_y)
[m,n] = size(img);
new_matrix = ones(m,n);
T2 = [1,0,0;0,1,0;-m/2,-n/2,1];  %x、y軸平移值原點
T3 = [1,0,0;0,1,0;m/2,n/2,1];    %x、y軸反平移
 
T1 = [s_x,0,0;0,s_y,0;0,0,1];   %對應(yīng)的比例系數(shù)矩陣
T = T2*T1*T3;     %P_new = P_old*T2*T1*T3  順序不能錯了
for i=1:m
    for j=1:n
        p = floor([i,j,1]*T1^-1);%由P_new = P_old*T 可得:P_old = P_new*(T^-1)
        if (p(1)<=m)&&(p(1)>0)&&(p(2)<=n)&&(p(2)>0) %限制范圍 
         new_matrix(i,j) = img(p(1),p(2));   %坐標(biāo)變換關(guān)系
        else 
        new_matrix(i,j) = 0;     %沒有的點賦值為0
        end
    end
end
% figure;imshow(img,[]);
figure;imshow(new_matrix,[]);

從程序可以看出,只是多了那么兩個矩陣而已就可以實現(xiàn)原點的轉(zhuǎn)移了。

運(yùn)行相應(yīng)程序,bili(image,2,2):

bili(image,0.5,0.5):

可以看出,這樣操作以后是不是協(xié)調(diào)多了,基本上和matlab自帶的函數(shù)有相同的功能了。

(3)對稱變換

   對稱變換和上述變換差不多,無非修改相應(yīng)的變換矩陣,程序如下:

%-------------函數(shù)說明----------------
%    對稱變換
%       輸入變量:img 灰白圖像(彩色不行)
%                num 對稱類型
%     0:原點對稱,1:x軸對稱,2:y軸對稱
%     3:y=x軸對稱 4:y=-x軸對稱  其他。。
%-------------------------------------
function duichen(img,num)
[m,n] = size(img);
new_matrix = ones(m,n);
T2 = [1,0,0;0,1,0;-m/2,-n/2,1];  %x、y軸平移值原點
T3 = [1,0,0;0,1,0;m/2,n/2,1];    %x、y軸反平移
 
T_x = [1,0,0;0,-1,0;0,0,1];     %x軸對稱矩陣
T_y = [-1,0,0;0,1,0;0,0,1];     %y軸對稱矩陣
T_o = [-1,0,0;0,-1,0;0,0,1];    %原點對稱矩陣
T_yx = [0,1,0;1,0,0;0,0,1];     %y=x對稱的矩陣
T_xy = [0,-1,0;-1,0,0;0,0,1];   %y=-x對稱的矩陣
switch num                     %選擇某一種對稱方式
    case 0
        T = T2*T_o*T3 ;
    case 1
        T = T2*T_x*T3 ;
    case 2
        T = T2*T_y*T3 ;
    case 3
        T = T2*T_yx*T3 ;
    case 4
        T = T2*T_xy*T3 ;
end
for i=1:m                  %對于每一個像素點
    for j=1:n
        p = floor([i,j,1]*T^-1);%由P_new = P_old*T 可得:P_old = P_new*(T^-1)
        if (p(1)<=m)&&(p(1)>0)&&(p(2)<=n)&&(p(2)>0) %限制范圍 
         new_matrix(i,j) = img(p(1),p(2));   %坐標(biāo)變換關(guān)系
        else 
        new_matrix(i,j) = 0;     %沒有的點賦值為0
        end
    end
end
% figure;imshow(img,[]);
figure;imshow(new_matrix,[]);
————————————————

運(yùn)行相應(yīng)程序:

>> duichen(image,0)

>> duichen(image,2)

(4)旋轉(zhuǎn)變換

%-------------函數(shù)說明----------------
%    旋轉(zhuǎn)變換
%       輸入變量:img 灰白圖像(彩色不行)
%                theat 變化的角度,逆時針旋轉(zhuǎn)為正             
%---------------------------------------
function xuanzhuan(img,theat)
[m,n] = size(img);
new_matrix = ones(m,n);
T2 = [1,0,0;0,1,0;-m/2,-n/2,1];  %x、y軸平移值原點
T3 = [1,0,0;0,1,0;m/2,n/2,1];    %x、y軸反平移
 
T1 = [cos(theat),sin(theat),0;-sin(theat),cos(theat),0;0,0,1];%旋轉(zhuǎn)變換
T = T2*T1*T3;                  %P_new = P_old*T2*T1*T3  順序不能錯了
for i=1:m
    for j=1:n
        p = floor([i,j,1]*T^-1);%由P_new = P_old*T 可得:P_old = P_new*(T^-1)
        if (p(1)<=m)&&(p(1)>0)&&(p(2)<=n)&&(p(2)>0) %限制范圍 
         new_matrix(i,j) = img(p(1),p(2));   %坐標(biāo)變換關(guān)系
        else 
        new_matrix(i,j) = 0;     %沒有的點賦值為0
        end
    end
end
% figure;imshow(img,[]);
figure;imshow(new_matrix,[]);

運(yùn)行相應(yīng)程序:

>> xuanzhuan(image,pi/4)

>> xuanzhuan(image,-pi/3)

至此,一些基本的幾何變換操作就完成了,其他的變換就在次基礎(chǔ)上發(fā)揮了。

有一個問題是上述的變換在旋轉(zhuǎn)的時候,原圖的部分圖像會被切割掉,這個是沒有考慮到的,因為部分像素點在變換以后必然超出范圍,對比matlab自帶的旋轉(zhuǎn)函數(shù)可以發(fā)現(xiàn)自帶的函數(shù)是可以對出界的部分進(jìn)行壓縮到范圍內(nèi)。當(dāng)然這一點我們也可以編程處理,不過稍微要麻煩點,必須對每個像素點再進(jìn)行壓縮處理,這個有待研究。

二維圖像的幾何變換大致如此了。那么引申一下,對于三維圖像的幾何變換怎么處理了?其實歸結(jié)到底還是有一個變換矩陣T,而這個矩陣不再是3*3的了,這個時候增加了一維,那么對應(yīng)的矩陣也得增加一維變成4*4的了,維數(shù)的增加必然帶來處理上的更加復(fù)雜了,不過理解了二維變換的原理,再來處理三維的話還是很好處理的,弄清楚對應(yīng)關(guān)系就可以了。

總結(jié)

到此這篇關(guān)于matlab原始處理圖像幾何變換的文章就介紹到這了,更多相關(guān)matlab原始處理圖像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python TKinter獲取文本框內(nèi)容的方法

    python TKinter獲取文本框內(nèi)容的方法

    今天小編就為大家分享一篇python TKinter獲取文本框內(nèi)容的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python如何獲取apk的packagename和activity

    python如何獲取apk的packagename和activity

    這篇文章主要介紹了python如何獲取apk的packagename和activity,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • 基于Python實現(xiàn)在控制臺查看excel的內(nèi)容

    基于Python實現(xiàn)在控制臺查看excel的內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實現(xiàn)在控制臺查看excel的內(nèi)容,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Python實現(xiàn)的簡單發(fā)送郵件腳本分享

    Python實現(xiàn)的簡單發(fā)送郵件腳本分享

    這篇文章主要介紹了Python實現(xiàn)的簡單發(fā)送郵件腳本分享,本文使用smtplib模塊實現(xiàn)郵件的發(fā)送,需要的朋友可以參考下
    2014-11-11
  • 詳解Python locals()的陷阱

    詳解Python locals()的陷阱

    這篇文章主要介紹了詳解Python locals()的陷阱,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • python中的flask框架Jinja?模板入門教程

    python中的flask框架Jinja?模板入門教程

    這篇文章主要介紹了?python中的flask框架Jinja?模板入門,Jinja?模板其實是?html?文件,一般情況下放在?Flask?工程的?/templates?目錄下,對python?flask?Jinja?模板相關(guān)知識感興趣的朋友一起看看吧
    2022-04-04
  • 經(jīng)驗豐富程序員才知道的8種高級Python技巧

    經(jīng)驗豐富程序員才知道的8種高級Python技巧

    這篇文章主要介紹了經(jīng)驗豐富程序員才知道的8種高級Python技巧,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • python爬蟲模擬瀏覽器訪問-User-Agent過程解析

    python爬蟲模擬瀏覽器訪問-User-Agent過程解析

    這篇文章主要介紹了python爬蟲模擬瀏覽器訪問-User-Agent過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • python中pip的安裝與使用教程

    python中pip的安裝與使用教程

    在安裝pip前,請確認(rèn)win系統(tǒng)中已經(jīng)安裝好了python,和easy_install工具,下面腳本之家小編給大家詳細(xì)介紹python中pip的安裝與使用教程,感興趣的朋友一起看看吧
    2018-08-08
  • Pycharm運(yùn)行時總是跳出Python?Console問題

    Pycharm運(yùn)行時總是跳出Python?Console問題

    這篇文章主要介紹了Pycharm運(yùn)行時總是跳出Python?Console問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評論

鸡西市| 固阳县| 辰溪县| 常山县| 和龙市| 留坝县| 和静县| 特克斯县| 通渭县| 石柱| 太和县| 延川县| 益阳市| 中西区| 余干县| 娄烦县| 荣成市| 榆林市| 平阴县| 读书| 四平市| 新龙县| 五常市| 开江县| 循化| 巢湖市| 郓城县| 陇西县| 阜康市| 鸡泽县| 襄樊市| 陆河县| 临潭县| 仲巴县| 疏附县| 凤山市| 略阳县| 威远县| 阳西县| 乐安县| 漯河市|