matlab圖像雙線性插值最近鄰插值與幾何變換_第1頁
matlab圖像雙線性插值最近鄰插值與幾何變換_第2頁
matlab圖像雙線性插值最近鄰插值與幾何變換_第3頁
matlab圖像雙線性插值最近鄰插值與幾何變換_第4頁
matlab圖像雙線性插值最近鄰插值與幾何變換_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、實驗二 圖像幾何變換與插值一、實驗目的鞏固圖像處理編程的步驟格式,理解數(shù)據(jù)插值及圖像幾何變換的原理,掌握圖像幾何變換的實現(xiàn)方法。二、實驗內(nèi)容1、 理解反向變換的實現(xiàn)思路2、 圖像縮放及插值 Matlab取整命令:floor, ceil, round分別實驗最近鄰插值和雙線性插值f=imread('lena.bmp');beishu=0.5;row,col=size(f);r1=round(row*beishu);c1=round(col*beishu);b=zeros(r1,c1); for i=1:r1 for j=1:c1 i1=round(i/beishu); j1=ro

2、und(j/beishu); if i1<1 i1=1; end if j1<1 j1=1; end b(i,j)=f(i1,j1); end endb=uint8(b);figure;imshow(f);figureimshow(b);3、 圖像旋轉及插值以圖像中心為軸實現(xiàn)任意角度(逆時針為正)的圖像旋轉,分別實驗兩種插值算法f=imread('lena.bmp');B=imrotate(f,45,'nearest','crop');C=imrotate(f,45,'bilinear','crop')

3、;figure;subplot(121);imshow(f);title('原圖像');subplot(122);imshow(B);title('最近鄰插值');figure;subplot(121);imshow(f);title('原圖像');subplot(122);imshow(C);title('雙線性插值');%matlab練習程序(圖像放大/縮小,最鄰近插值)ccccl;w=0.6; %放大或縮小的寬度h=1.4; %放大或縮小的高度img=imread('Corner.png');imshow(i

4、mg);m n=size(img);imgn=zeros(h*m,w*n);rot=h 0 0;0 w 0;0 0 1; %變換矩陣x=h*u,y=w*vinv_rot=inv(rot);for x=1:h*m for y=1:w*n pix=x y 1*inv_rot; imgn(x,y)=img(round(pix(1),round(pix(2); endendfigure,imshow(uint8(imgn)%matlab練習程序(圖像放大/縮小,雙線性插值)cccm=1.8; %放大或縮小的高度n=2.3; %放大或縮小的寬度img=imread('lena.jpg')

5、;imshow(img);h w=size(img);imgn=zeros(h*m,w*n);rot=m 0 0;0 n 0;0 0 1; %變換矩陣for i=1:h*m for j=1:w*n pix=i j 1/rot; float_Y=pix(1)-floor(pix(1); float_X=pix(2)-floor(pix(2); if pix(1) < 1%邊界處理 pix(1) = 1; end if pix(1) > h pix(1) = h; end if pix(2) < 1 pix(2) =1; end if pix(2) > w pix(2) =

6、w; end pix_up_left=floor(pix(1) floor(pix(2);%四個相鄰的點 pix_up_right=floor(pix(1) ceil(pix(2); pix_down_left=ceil(pix(1) floor(pix(2); pix_down_right=ceil(pix(1) ceil(pix(2); value_up_left=(1-float_X)*(1-float_Y);%計算臨近四個點的權重 value_up_right=float_X*(1-float_Y); value_down_left=(1-float_X)*float_Y; value

7、_down_right=float_X*float_Y;%按權重進行雙線性插值 imgn(i,j)=value_up_left*img(pix_up_left(1),pix_up_left(2)+ . value_up_right*img(pix_up_right(1),pix_up_right(2)+ . value_down_left*img(pix_down_left(1),pix_down_left(2)+ . value_down_right*img(pix_down_right(1),pix_down_right(2); endendfigure,imshow(uint8(imgn

8、)%matlab練習程序(圖像旋轉,最鄰近插值)ccccl;H=1; %索引pix中第一個元素,即高度W=2; %索引pix中第二個元素,即寬度jiaodu=45; %要旋轉的角度,旋轉方向為順時針img=imread('Corner.png'); %這里v為原圖像的高度,u為原圖像的寬度imshow(img); %這里y為變換后圖像的高度,x為變換后圖像的寬度v u=size(img);theta=jiaodu/180*pi;rot=cos(theta) -sin(theta) 0;sin(theta) cos(theta) 0;0 0 1; inv_rot=inv(rot)

9、;pix1=1 1 1*rot; %變換后圖像左上點的坐標pix2=1 u 1*rot; %變換后圖像右上點的坐標pix3=v 1 1*rot; %變換后圖像左下點的坐標pix4=v u 1*rot; %變換后圖像右下點的坐標height=round(max(abs(pix1(H)-pix4(H)+0.5 abs(pix2(H)-pix3(H)+0.5); %變換后圖像的高度width=round(max(abs(pix1(W)-pix4(W)+0.5 abs(pix2(W)-pix3(W)+0.5); %變換后圖像的寬度imgn=zeros(height,width);delta_y=abs

10、(min(pix1(H) pix2(H) pix3(H) pix4(H); %取得y方向的負軸超出的偏移量delta_x=abs(min(pix1(W) pix2(W) pix3(W) pix4(W); %取得x方向的負軸超出的偏移量for y=1-delta_y:height-delta_y for x=1-delta_x:width-delta_x pix=y x 1*inv_rot; %用變換后圖像的點的坐標去尋找原圖像點的坐標, %否則有些變換后的圖像的像素點無法完全填充 if pix(H)>=0.5 && pix(W)>=0.5 && pi

11、x(H)<=v && pix(W)<=u imgn(y+delta_y,x+delta_x)=img(round(pix(H),round(pix(W); end endendfigure,imshow(uint8(imgn)%matlab練習程序(圖像旋轉,雙線性插值)cccjiaodu=45; %要旋轉的角度,旋轉方向為順時針img=imread('lena.jpg'); %這里v為原圖像的高度,u為原圖像的寬度imshow(img); %這里y為變換后圖像的高度,x為變換后圖像的寬度h w=size(img);theta=jiaodu/180*

12、pi;rot=cos(theta) -sin(theta) 0;sin(theta) cos(theta) 0;0 0 1; pix1=1 1 1*rot; %變換后圖像左上點的坐標pix2=1 w 1*rot; %變換后圖像右上點的坐標pix3=h 1 1*rot; %變換后圖像左下點的坐標pix4=h w 1*rot; %變換后圖像右下點的坐標height=round(max(abs(pix1(1)-pix4(1)+0.5 abs(pix2(1)-pix3(1)+0.5); %變換后圖像的高度width=round(max(abs(pix1(2)-pix4(2)+0.5 abs(pix2(

13、2)-pix3(2)+0.5); %變換后圖像的寬度imgn=zeros(height,width);delta_y=abs(min(pix1(1) pix2(1) pix3(1) pix4(1); %取得y方向的負軸超出的偏移量delta_x=abs(min(pix1(2) pix2(2) pix3(2) pix4(2); %取得x方向的負軸超出的偏移量for i=1-delta_y:height-delta_y for j=1-delta_x:width-delta_x pix=i j 1/rot; %用變換后圖像的點的坐標去尋找原圖像點的坐標, %否則有些變換后的圖像的像素點無法完全填充

14、 float_Y=pix(1)-floor(pix(1); float_X=pix(2)-floor(pix(2); if pix(1)>=1 && pix(2)>=1 && pix(1) <= h && pix(2) <= w pix_up_left=floor(pix(1) floor(pix(2); %四個相鄰的點 pix_up_right=floor(pix(1) ceil(pix(2); pix_down_left=ceil(pix(1) floor(pix(2); pix_down_right=ceil(pix

15、(1) ceil(pix(2); value_up_left=(1-float_X)*(1-float_Y); %計算臨近四個點的權重 value_up_right=float_X*(1-float_Y); value_down_left=(1-float_X)*float_Y; value_down_right=float_X*float_Y; imgn(i+delta_y,j+delta_x)=value_up_left*img(pix_up_left(1),pix_up_left(2)+ . value_up_right*img(pix_up_right(1),pix_up_right(

16、2)+ . value_down_left*img(pix_down_left(1),pix_down_left(2)+ . value_down_right*img(pix_down_right(1),pix_down_right(2); end endendfigure,imshow(uint8(imgn)%實驗一 Matlab圖像基本操作一、實驗目的熟悉利用Matlab進行圖像處理的基本操作,了解圖像數(shù)據(jù)的存儲形式及進行圖像處理編程的步驟方法。二、實驗內(nèi)容1、 圖像讀寫與顯示重點函數(shù):imread, imwrite, imshow2、 彩色圖像灰度化計算公式:Gray = R*0.299 + G*0.587 + B*0.1143、 圖像馬賽克局部平均,改變窗口大小比較處理結果,如取2×2、4×4或更大尺寸的窗口4、 圖像平移分別完成圖像水平方向、豎直方向和兩個方向的平移三、實驗要求1、編寫代碼,完

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論