圖像旋轉的原理與實現


圖像旋轉的原理與實現

一般圖像的旋轉是以圖像的中心為原點,旋轉一定的角度,也就是將圖像上的所有像素都旋轉一個相同的角度。旋轉后圖像的的大小一般會改變,即可以把轉出顯示區域的圖像截去,或者擴大圖像范圍來顯示所有的圖像。圖像的旋轉變換也可以用矩陣變換來表示。設點clip_image002[14]逆時針旋轉clip_image004[14]角后的對應點為clip_image006[14]。那么,旋轉前后點clip_image002[15]clip_image006[15]的坐標分別是:

clip_image009[10]                          (3-6)

clip_image011[10]  (3-7)

 

 

寫成矩陣表達式為

clip_image013[10]            (3-8)

 

 

 

 

其逆運算為

clip_image015[10]            (3-9)

 

 

利用上述方法進行圖像旋轉時需要注意如下兩點:

1)圖像旋轉之前,為了避免信息的丟失,一定要有坐標平移。

2)圖像旋轉之后,會出現許多空洞點。對這些空洞點必須進行填充處理,否則畫面效果不好,一般也稱這種操作為插值處理。

以上所討論的旋轉是繞坐標軸原點(0,0)進行的。如果圖像旋轉是繞一個指定點(a,b)旋轉,則先要將坐標系平移到該點,再進行旋轉,然后將旋轉后的圖象平移回原來的坐標原點,這實際上是圖像的復合變換。如將一幅圖像繞點(a,b)逆時針旋轉clip_image004[15]度,首先將原點平移到(a,b),即

clip_image018[10]                        (3-10)

然后旋轉

clip_image020[10]                 (3-11)

然后再平移回來

clip_image022[10]                        (3-12)

 

綜上所述,變換矩陣為clip_image024[10]

附錄:

B=imread('image1.bmp');
%讀取原圖像
[m,n]=size(B); %獲取原圖尺寸w
%參數設置 
theta = pi/4;  %旋轉角度
a = sin(theta);
b = cos(theta);
T = [cos(theta),sin(theta),;    %旋轉矩陣
    -sin(theta),cos(theta)];
 
%建立存儲空間
row=m+round((m)/2);
col=n+round((n)/2);
rotateima = zeros(row, col);  %存儲旋轉后圖像的矩陣
 
%圖像旋轉         
for i=1:m                                       
    for j=1:n
        x=ceil(abs((i-round(m/2))*b-(j-round(n/2))*a+round(row/2)));  %坐標平移至中心
        y=ceil(abs((i-round(m/2))*a+(j-round(n/2))*b+round(col/2)));  %坐標平移至中心
        rotateima(x,y)=B(i,j);                   %未插值的圖像
    end
end
nrotateima = uint8(rotateima);
imshow(nrotateima);
title('未插值的圖像')
 
%圖像插值(近鄰插值法)
for i=1:row    
    for j=2:col-1       
              
            if(rotateima(i,j) == 0 && rotateima(i,j-1) ~= 0 && rotateima(i,j+1) ~= 0 )       
                rotateima(i,j) =rotateima(i,j-1) ;      
           
            end
    end
end
 
%圖像顯示
figure(1);
imshow(B)
title('原始圖像');
% figure(2);
% imshow(nrotateima);
% title('未插值的圖像');
figure(3);
imshow(rotateima/256);
imwrite(rotateima/256, '旋轉后圖像.jpg', 'jpg');
title('旋轉圖');

  

  

       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM