国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 圖文詳解matlab原始處理圖像幾何變換

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

2021-12-12 22:04on2way Python

Matlab 擅長于操作矩陣,而圖像其實就是矩陣,這篇文章主要給大家介紹了關于matlab原始處理圖像幾何變換的相關資料,需要的朋友可以參考下

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

(1)圖像的平移與比例

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

              x'= x +tx;

       y'= y +ty;

其中tx與ty分別為對應的偏移量。 

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

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

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

比例等式關系為:

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

(2)關于旋轉變換

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

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

那么可以看出,這個時候對應的旋轉矩陣為t就如圖上所示。

(3)關于對稱變換

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

比如,關于x對稱的話,t=[1,0,0;0,-1,0;0,0,1],關于原點對稱的話,t=[-1,0,0;0,-1,0;0,0,1];關于y=x對稱的話,t=[0,1,0;1,0,0;0,0,1];等等。

(4)復合變換

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

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

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

這個在編程實現原點移動位置時至關重要。

幾何變換的基礎知識就說到這,具體的可以再找相關文章了解。

(二)matlab編程實現變換

(1)對圖像的理解

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

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

(2)比例變換

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
%-------------函數說明----------------
%    比例變換
%       輸入變量:img 灰白圖像(彩色不行)
%                s_x  x方向上的比例系數
%                s_y  y方向上的比例系數
%-------------------------------------
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];   %對應的比例系數矩陣
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));   %坐標變換關系
        else
        new_matrix(i,j) = 0;     %沒有的點賦值為0
        end
    end
end
figure;imshow(new_matrix,[]);
————————————————
版權聲明:本文為csdn博主「on2way」的原創文章,遵循cc 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/on2way/article/details/40460675

這樣運行對應程序:

bili(image,2,2):

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

bili(image,0.5,0.5):

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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];   %對應的比例系數矩陣
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));   %坐標變換關系
        else
        new_matrix(i,j) = 0;     %沒有的點賦值為0
        end
    end
end
% figure;imshow(img,[]);
figure;imshow(new_matrix,[]);

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

運行相應程序,bili(image,2,2):

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

bili(image,0.5,0.5):

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

可以看出,這樣操作以后是不是協調多了,基本上和matlab自帶的函數有相同的功能了。

(3)對稱變換

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
%-------------函數說明----------------
%    對稱變換
%       輸入變量: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));   %坐標變換關系
        else
        new_matrix(i,j) = 0;     %沒有的點賦值為0
        end
    end
end
% figure;imshow(img,[]);
figure;imshow(new_matrix,[]);
————————————————

運行相應程序:

>> duichen(image,0)

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

>> duichen(image,2)

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

(4)旋轉變換

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
%-------------函數說明----------------
%    旋轉變換
%       輸入變量:img 灰白圖像(彩色不行)
%                theat 變化的角度,逆時針旋轉為正            
%---------------------------------------
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];%旋轉變換
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));   %坐標變換關系
        else
        new_matrix(i,j) = 0;     %沒有的點賦值為0
        end
    end
end
% figure;imshow(img,[]);
figure;imshow(new_matrix,[]);

運行相應程序:

>> xuanzhuan(image,pi/4)

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

>> xuanzhuan(image,-pi/3)

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

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

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

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

總結

到此這篇關于matlab原始處理圖像幾何變換的文章就介紹到這了,更多相關matlab原始處理圖像內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/on2way/article/details/40460675

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产婷婷精品av在线 | 久久精品免费观看 | 午夜免费电影 | a级毛片免费高清视频 | 久久久久av | 欧美日韩在线观看一区二区 | 中文字字幕一区二区三区四区五区 | 日韩欧美久久 | 中文字幕日韩视频 | 欧美精品成人一区二区三区四区 | 久艹在线 | 欧洲精品在线视频 | 亚洲精品永久视频 | 色播av| 国内精品一区二区 | 香蕉视频三级 | 欧美一区二区网站 | 日韩在线中文字幕 | 一大道一二三区不卡 | 亚洲视频综合 | 久久精品电影 | 日日夜夜精品视频 | 在线免费日韩 | 黄色在线免费看 | 欧美a视频| 久久99久| 亚洲精品一区二区三区蜜桃久 | 中文字幕精品一区二区三区精品 | 中文字幕一区在线观看视频 | 黄色一级电影在线观看 | 欧美日韩成人在线观看 | 视频一区二区三区在线观看 | 一区二区三区精品 | 亚洲无线观看 | 91国产视频在线 | 久久久高清 | h漫在线观看 | 亚洲国产高清在线 | 高清三区 | 污视频网站在线观看 | 亚洲国产成人一区二区精品区 |