圖像拼接matlab_第1頁(yè)
圖像拼接matlab_第2頁(yè)
圖像拼接matlab_第3頁(yè)
圖像拼接matlab_第4頁(yè)
圖像拼接matlab_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、clc clear all % 讀入圖片 pic1=imread('lena1.jpg'); pic2=imread('lena2.jpg'); % Harris角點(diǎn)檢測(cè) points1=myHarris(pic1); points2=myHarris(pic2); % 畫(huà)出Harris角點(diǎn) figure(1) drawHarrisCorner(pic1,points1,pic2,points2); % 角點(diǎn)特征描述 des1=myHarrisCornerDescription(pic1,points1); des2=myHarrisCornerDescript

2、ion(pic2,points2); % 角點(diǎn)粗匹配 matchs=myMatch(des1,des2); % 獲取各自出匹配角點(diǎn)位置 matchedPoints1=points1(matchs(:,1),:); matchedPoints2=points2(matchs(:,2),:); % 粗匹配角點(diǎn)連線(xiàn) figure(2) drawLinedCorner(pic1,matchedPoints1,pic2,matchedPoints2); % 角點(diǎn)精匹配 newLoc1,newLoc2=pointsSelect(matchedPoints1,matchedPoints2); % 精匹配角點(diǎn)

3、連線(xiàn) figure(3) drawLinedCorner(pic1,newLoc1,pic2,newLoc2); % 圖像拼接 im=picMatched(pic1,newLoc1,pic2,newLoc2); % 顯示拼接圖像 figure(4) imshow(im); set(gcf,'Color','w'); function points=myHarris(pic) % 功能:尋找Harris角點(diǎn) % 輸入:RGB圖像或gray圖% 輸出:角點(diǎn)所在的行、縱的N×2矩陣 if length(size(pic)=3 pic=rgb2gray(pic

4、); end pic=double(pic); hx=-1 0 1; Ix=filter2(hx,pic); hy=-1;0;1; Iy=filter2(hy,pic); Ix2=Ix.*Ix; Iy2=Iy.*Iy; Ixy=Ix.*Iy; h=fspecial('gaussian',7 7,2); Ix2=filter2(h,Ix2); Iy2=filter2(h,Iy2); Ixy=filter2(h,Ixy); heigth,width=size(pic); alpha=0.06; R=zeros(heigth,width); for i=1:heigth for j=

5、1:width M=Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j); R(i,j)=det(M)-alpha*(trace(M)2); end end Rmax=max(max(R); pMap=zeros(heigth,width); for i=2:heigth-1 for j=2:width-1 if R(i,j)>0.01*Rmax tm=R(i-1:i+1,j-1:j+1); tm(2,2)=0; if R(i,j)>tm pMap(i,j)=1; end end end end row,col=find(pMap=1); points=row,c

6、ol; function drawHarrisCorner(pic1,points1,pic2,points2) % 功能:畫(huà)出Harris角點(diǎn)的連接% 輸入: % pic1、pic2:待拼接的圖像 % points1、points2:Harris角點(diǎn)位置 X1=points1(:,2); Y1=points1(:,1); X2=points2(:,2); Y2=points2(:,1); dif=size(pic1,2); imshowpair(pic1,pic2,'montage'); hold on plot(X1,Y1,'b*'); plot(X2+di

7、f,Y2,'b*'); set(gcf,'Color','w'); function des=myHarrisCornerDescription(pic,points) % 功能:Harris角點(diǎn)特征描述 % 輸入: % pic:原圖像 % points:角點(diǎn)位置 % 輸出: % des:8×N的角點(diǎn)特征描述矩陣 if length(size(pic)=3 pic=rgb2gray(pic); end len=length(points); des=zeros(8,len); for k=1:len p=points(k,:); pc=

8、pic(p(1),p(2); des(1,k)=pic(p(1)-1,p(2)-1)-pc; des(2,k)=pic(p(1),p(2)-1)-pc; des(3,k)=pic(p(1)+1,p(2)-1)-pc; des(4,k)=pic(p(1)+1,p(2)-pc; des(5,k)=pic(p(1)+1,p(2)+1)-pc; des(6,k)=pic(p(1),p(2)+1)-pc; des(7,k)=pic(p(1)-1,p(2)+1)-pc; des(8,k)=pic(p(1)-1,p(2)-pc; des(:,k)=des(:,k)/sum(des(:,k); end fun

9、ction matchs=myMatch(des1,des2)% 功能:特征點(diǎn)雙向匹配 % 輸入: % des1、des2:特征點(diǎn)描述信息構(gòu)成的矩陣 % 輸出: % matchs:匹配的特征點(diǎn)對(duì)應(yīng)關(guān)系 len1=length(des1); len2=length(des2); match1=zeros(len1,2); cor1=zeros(1,len2); for i=1:len1 d1=des1(:,i); for j=1:len2 d2=des2(:,j); cor1(j)=(d1'*d2)/sqrt(d1'*d1)*(d2'*d2); end ,indx=max

10、(cor1); match1(i,:)=i,indx; end match2=zeros(len2,2); cor2=zeros(1,len1); for i=1:len2 d2=des2(:,i); for j=1:len1 d1=des1(:,j); cor2(j)=(d1'*d2)/sqrt(d1'*d1)*(d2'*d2); end ,indx=max(cor2); match2(i,:)=indx,i; end matchs=; for i=1:length(match1) for j=1:length(match2) if match1(i,:)=match

11、2(j,:) matchs=matchs;match1(i,:); end end end function drawLinedCorner(pic1,loc1,pic2,loc2)% 功能:畫(huà)出匹配角點(diǎn)的連接 % 輸入: % pic1、pic2:待拼接的圖像 % loc1、loc2:匹配角點(diǎn)位置 X1=loc1(:,2); Y1=loc1(:,1); X2=loc2(:,2); Y2=loc2(:,1); dif=size(pic1,2); imshowpair(pic1,pic2,'montage'); hold on for k=1:length(X1) plot(X1(

12、k),Y1(k),'b*'); plot(X2(k)+dif,Y2(k),'b*'); line(X1(k),X2(k)+dif,Y1(k),Y2(k),'Color','r'); end set(gcf,'Color','w'); function newLoc1,newLoc2=pointsSelect(loc1,loc2) % 功能:篩選匹配特征點(diǎn)對(duì),獲取高精度的控制點(diǎn) % 輸入: % loc1、loc2:粗匹配特征點(diǎn)位置 % 輸出: % newLoc1、newLoc2:精匹配控制點(diǎn)位置 sl

13、ope=(loc2(:,1)-loc1(:,1)./(loc2(:,2)-loc1(:,2); for k=1:3 slope=slope-mean(slope); len=length(slope); t=sort(abs(slope); thresh=t(round(0.5*len); ind=abs(slope)<=thresh; slope=slope(ind); loc1=loc1(ind,:); loc2=loc2(ind,:); end newLoc1=loc1; newLoc2=loc2; function im=picMatched(pic1,newLoc1,pic2,

14、newLoc2)% 功能:獲取拼接之后的圖片 % 輸入: % pic1、pic2:待拼接圖片 % newLoc1、newLoc2:變換控制點(diǎn)矩陣 % 輸出: % im:拼接后的圖片 if length(size(pic1)=2 pic1=cat(3,pic1,pic1,pic1); end if length(size(pic2)=2 pic2=cat(3,pic2,pic2,pic2); end SZ=2000; X1=newLoc1(:,2); Y1=newLoc1(:,1); X2=newLoc2(:,2); Y2=newLoc2(:,1); sel=randperm(length(ne

15、wLoc1),3); x=X2(sel)' y=Y2(sel)' X=X1(sel)' Y=Y1(sel)' U=x;y;ones(1,3); V=X;Y;ones(1,3); T=V/U; cntrX=SZ/2; cntrY=SZ/2; im=zeros(SZ,SZ,3); for i=1:size(pic2,1) for j=1:size(pic2,2) tmp=T*j;i;1; nx=round(tmp(1)+cntrX; ny=round(tmp(2)+cntrY; if nx>=1 && nx<=SZ &&

16、ny>=1 && ny<=SZ im(ny,nx,:)=pic2(i,j,:); end end end im=imresize(im,1,'bicubic'); tpic1=zeros(SZ,SZ,3); tpic1(1+cntrY:size(pic1,1)+cntrY,1+cntrX:size(pic1,2)+cntrX,:)=pic1; re=rgb2gray(uint8(im)-rgb2gray(uint8(tpic1); for k=1:3 ta=im(:,:,k);tb=tpic1(:,:,k); ta(re=0)=tb(re=0); i

17、m(:,:,k)=ta; end clear ta tb re tpic1 im=getPicture(im,SZ); im=uint8(im); if length(size(pic1)=2 im=rgb2gray(im); end function im=getPicture(pic,SZ) % 功能:獲取圖像有用區(qū)域 % 輸入: % pic:拼接圖像 % SZ:預(yù)定圖像尺寸 % 輸出: % im:有用區(qū)域圖像 if length(size(pic)=2 pic=cat(3,pic,pic,pic); end k=1; while k<SZ if any(any(pic(k,:,:) break end k=k+1; end ceil=k; %上邊界 k=SZ; while k>0 if

溫馨提示

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

評(píng)論

0/150

提交評(píng)論