基于相關系數(shù)影像匹配實習報告(共15頁)_第1頁
基于相關系數(shù)影像匹配實習報告(共15頁)_第2頁
基于相關系數(shù)影像匹配實習報告(共15頁)_第3頁
基于相關系數(shù)影像匹配實習報告(共15頁)_第4頁
基于相關系數(shù)影像匹配實習報告(共15頁)_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上基于相關系數(shù)影像匹配實習報告1、 實習內(nèi)容與目的 通過上機編程實現(xiàn)基于相關系數(shù)算法的影像匹配,從而更加熟練的掌握書本上關于影像匹配及相關系數(shù)算法的理論知識,并熟悉上機編程的操作。2、 實習原理影像匹配實質(zhì)上是在兩幅或是多幅影像之間識別同名點,其中基于相關系數(shù)的算法是實現(xiàn)影像匹配的基本算法之一。相關系數(shù)是標準化的協(xié)方差函數(shù),協(xié)方差函數(shù)除以兩信號的方差即得相關系數(shù)。計算相關系數(shù)的公式如下:g(x,y)與g(x,y)的相關系數(shù)為:其中:若(p0, q0)>(p, q),(pp0,qq0),則p0,q0為搜索區(qū)影像相對于目標區(qū)影像的位移參數(shù)。由離散灰度數(shù)據(jù)對相關系數(shù)的估

2、計為,考慮到計算工作量,相關系數(shù)的實用公式為3、 實習步驟及相關代碼 在第一次點特征點實習的基礎上我們組進行了第二次基于相關系數(shù)的影像匹配實習。所以程序?qū)崿F(xiàn)的部分操作直接利用前次實習的中的程序。(1) 讀入左右影像 FILE* pSrcFileLeft = NULL;pSrcFileLeft = fopen(srcFileLeft,"rb");if(pSrcFileLeft = NULL)printf("原始左片影像打開失敗n");return FAILURE;FILE* pSrcFileRight = NULL;pSrcFileRight = fope

3、n(srcFileRight,"rb");if(pSrcFileRight = NULL)printf("原始右片影像打開失敗n");return FAILURE;(2) 確定目標窗口大小 通過老師課堂上的講授和我們在編程過程中的不斷嘗試,我們默認使用的窗口的尺寸為11*11。(3) 確定目標點的位置 由前次的實習中得到左相片中的特征點作為這次實習的目標點。(4) 預測右影像搜索范圍 本程序中也在左相片中計算出了特征點,然后將左右兩相片中的特征點進行計算相關系數(shù)。(5) 逐窗口計算相關系數(shù)并保存相應的儲存單元 將左相片中的目標點與右相片中的特征點進行相關

4、系數(shù)的計算。(6) 比較相關系數(shù),取最大相關系數(shù)作為匹配點 對于分別比較上一步驟中計算出的相關系數(shù),選取出最大的一個相關系數(shù)作為匹配點。 程序操作如下:在程序主界面中點擊Extend中選取ImageMatch選項,然后進入?yún)?shù)設置界面。設置讀取和保存影像路徑和窗口大小等參數(shù)后,點擊Progress進行運算。4、 實習結(jié)果及分析 作為數(shù)據(jù)源的左右影像如些圖所示:左相片 右相片 經(jīng)過計算后得到的目標點左右圖像分別如下所示:左相片 右相片 顯示匹配點號: 通過老師得到的圖片可以看出在左相片中得到的五個目標點中有四個在右相片中找到了同名點,由此可以看出本程序基本滿足實習要求,并得到理想的結(jié)果。不足的地

5、方就是選取的特征點的數(shù)量不夠多,這樣就無法判斷本程序的“誤判”的情況如何。5、 實習體會 在學習到相關系數(shù)的時候,一看到計算相關系數(shù)的公式的時候我就有種被折服的感覺,那個公式實在是太復雜,它使我感覺我怎么也不能記住這個復雜的公式。不過經(jīng)過這次實習后,我覺得這個公式又不是當初認為的那樣無法記憶。我想這次實習我最大的收獲就是對于之前在學習過程中遇到不懂知識以及難以記憶的知識都得到了加強,方便了我對他們的理解與記憶。 其次,在編程過程中更加鍛煉自己動手編程的能力,使得我編程能力較之前有著一定的提高。每次編程實習都是一個積累經(jīng)驗的過程,然后通過一次次的實習后,我最終的能力就能夠得到很好的體現(xiàn)。附件:v

6、oid Moravec(BYTE* pSrcBits, vector<FEATUREPOINT> *FeaturePoint, int m_threshold, int m_window1, int m_window2, int width, int height, int* Count1)。此部分程序與點特征程序中代碼一樣,因此不再重復粘貼vector<FEATUREPOINT> RemoveReplicative(vector<FEATUREPOINT> v)vector<FEATUREPOINT> ret;vector<FEATURE

7、POINT>:iterator iter = v.begin();ret.clear();ret.push_back(*iter);vector<FEATUREPOINT>:iterator iter2;BOOL b(FALSE);for (iter = v.begin(); iter != v.end(); +iter)b = false;for (iter2 = ret.begin(); iter2 != ret.end(); +iter2)if (iter->x = iter2->x && iter->y = iter2->y)b

8、 = TRUE;/存在break;if (b = FALSE)ret.push_back(*iter);return ret;void SaveBand(int width, int height, int byteCount, int biBitCount, LPBYTE pBits, CString SavePath)BITMAPFILEHEADER bmfh;BITMAPINFOHEADER bmih;bmfh.bfType = 0x4d42; / 0x42 = "B" 0x4d = "M"bmfh.bfReserved1 = 0;bmfh.bfR

9、eserved2 = 0;if (biBitCount = 8)bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 256*4;bmfh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 256*4 + byteCount;else if (biBitCount = 24)bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);bmfh.bfSize

10、 = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + byteCount;elseMessageBox(NULL, "8bit or 24bit accepted", "錯誤", MB_ICONERROR);return;bmih.biBitCount = biBitCount;bmih.biWidth = width;bmih.biHeight = height;bmih.biSize = 40;bmih.biPlanes = 1;bmih.biCompression = BI_RGB;bmi

11、h.biSizeImage = bmfh.bfSize;bmih.biClrImportant = 0;bmih.biClrUsed = 0;bmih.biXPelsPerMeter = 0;bmih.biYPelsPerMeter = 0;CFile f;/保存位圖if (f.Open(SavePath, CFile:modeCreate | CFile:modeWrite)f.Write(&bmfh, sizeof(bmfh);f.Write(&bmih, sizeof(bmih);if (biBitCount = 8)RGBQUAD rgb256;int i(0);for

12、 (; i < 256; +i)rgbi.rgbBlue = i;rgbi.rgbGreen = i;rgbi.rgbRed = i;rgbi.rgbReserved = 0;/修改顏色表255對應的顏色rgb255.rgbBlue = 0;rgb255.rgbGreen = 0;rgb255.rgbRed = 255;f.Write(rgb, sizeof(RGBQUAD)*256);f.Write(pBits, byteCount);f.Close();elseMessageBox(NULL, "保存圖像失敗", "錯誤", MB_ICONER

13、ROR);return;void DrawCross(BYTE* pBits, vector<FEATUREPOINT> FeaturePoint, int _width, int byteCount)vector<FEATUREPOINT>:iterator iter;int i(0), j(0);for (i = 0; i < byteCount; +i)if (pBitsi = 255)pBitsi = 254;for (iter = FeaturePoint.begin(); iter != FeaturePoint.end(); +iter)i = it

14、er->y;j = iter->x;pBitsi*_width+j = 255;pBitsi*_width+j+1 = 255;pBitsi*_width+j-1 = 255;pBits(i+1)*_width+j = 255;pBits(i-1)*_width+j = 255;pBitsi*_width+j+2 = 255;pBitsi*_width+j-2 = 255;pBits(i+2)*_width+j = 255;pBits(i-2)*_width+j = 255;void DrawCross(BYTE* pBits1, BYTE* pBits2, vector<M

15、ATCHEDPOINTS> MatchedPoints, int _width1, int _width2, int byteCount1, int byteCount2)vector<MATCHEDPOINTS>:iterator iter;int i(0), j(0);for (i = 0; i < byteCount1; +i)if (pBits1i = 255)pBits1i = 254;for (j = 0; j < byteCount2; +j)if (pBits2j = 255)pBits2j = 254;for (iter = MatchedPoi

16、nts.begin(); iter != MatchedPoints.end(); +iter)i = iter->y1;j = iter->x1;pBits1i*_width1+j = 255;pBits1i*_width1+j+1 = 255;pBits1i*_width1+j-1 = 255;pBits1(i+1)*_width1+j = 255;pBits1(i-1)*_width1+j = 255;pBits1i*_width1+j+2 = 255;pBits1i*_width1+j-2 = 255;pBits1(i+2)*_width1+j = 255;pBits1(i

17、-2)*_width1+j = 255;i = iter->y2;j = iter->x2;pBits2i*_width2+j = 255;/pBits2i*_width2+j+1 = 255;pBits2i*_width2+j-1 = 255;pBits2(i+1)*_width2+j = 255;pBits2(i-1)*_width2+j = 255;pBits2i*_width2+j+2 = 255;pBits2i*_width2+j-2 = 255;pBits2(i+2)*_width2+j = 255;pBits2(i-2)*_width2+j = 255;void Sa

18、veList(vector<FEATUREPOINT> FeaturePoint, CString txtFile)FILE* pTxtFile= fopen(txtFile, "wt");if (!pTxtFile)return;fprintf(pTxtFile, "#t特征點數(shù): %dnn", FeaturePoint.size();fprintf(pTxtFile, "坐標Xt坐標Yt興趣值n");vector<FEATUREPOINT>:iterator iter;for (iter = Feature

19、Point.begin(); iter != FeaturePoint.end(); +iter)fprintf(pTxtFile, "%dt%dt%dn", iter->x, iter->y, (int)iter->IV);fclose(pTxtFile);void SaveList(vector<MATCHEDPOINTS> MatchedPoints, CString txtFile)FILE* pTxtFile= fopen(txtFile, "wt");if (!pTxtFile)return;fprintf(pT

20、xtFile, "#同名點對數(shù): %dnn",MatchedPoints.size();vector<MATCHEDPOINTS>:iterator iter;for (iter = MatchedPoints.begin(); iter != MatchedPoints.end(); +iter)fprintf(pTxtFile, "%dt%dt%dt%dt%fn",iter->x1, iter->y1, iter->x2, iter->y2, iter->coefficient);fclose(pTxtFil

21、e);int _tmain(int argc, TCHAR* argv, TCHAR* envp)if (argc != 15):MessageBox(NULL,"啟動參數(shù)不正確,請從GUI.exe或命令行參數(shù)啟動","",MB_ICONASTERISK);return FAILURE;system("Mode con: COLS=50 LINES=150");system("title Image_Match");int nRetCode = 0;if (!AfxWinInit(:GetModuleHandle(

22、NULL), NULL, :GetCommandLine(), 0)cerr << _T("Fatal Error: MFC initialization failed") << endl;nRetCode = 1;return nRetCode;CString srcFileLeft, srcFileRight, dstFileLeft, dstFileRight, txtFile;CString threshold_Left,window1_Left,window2_Left;CString threshold_Right,window1_Rig

23、ht,window2_Right;CString CoRelated,window3,flag1;/啟動參數(shù)srcFileLeft = argv1;srcFileRight = argv2;dstFileLeft = argv3;dstFileRight = argv4;txtFile = argv5;threshold_Left = argv6;/閾值window1_Left = argv7;window2_Left = argv8;threshold_Right = argv9;window1_Right = argv10;window2_Right = argv11;CoRelated

24、= argv12;window3 = argv13;flag1 = argv14;/判斷是否在創(chuàng)建結(jié)果文件后顯示int m_threshold_L = atoi(threshold_Left);int m_window1_L = atoi(window1_Left);int m_window2_L = atoi(window2_Left);int m_threshold_R = atoi(threshold_Right);int m_window1_R = atoi(window1_Right);int m_window2_R = atoi(window2_Right);double m_Co

25、Related = (double)atoi(CoRelated) / 100;int m_window3 = atoi(window3);int m_flag1 = atoi(flag1);if (GetFileAttributes(srcFileLeft) = -1)CString err;err.Format("文件:%s不存在", srcFileLeft);:MessageBox(NULL,err, "Error", MB_ICONERROR);return FAILURE;if (GetFileAttributes(srcFileRight)

26、= -1)CString err;err.Format("文件:%s不存在", srcFileRight);:MessageBox(NULL,err, "Error", MB_ICONERROR);return FAILURE;/打開2幅影像FILE* pSrcFileLeft = NULL;pSrcFileLeft = fopen(srcFileLeft,"rb");if(pSrcFileLeft = NULL)printf("原始左片影像打開失敗n");return FAILURE;FILE* pSrcFile

27、Right = NULL;pSrcFileRight = fopen(srcFileRight,"rb");if(pSrcFileRight = NULL)printf("原始右片影像打開失敗n");return FAILURE;/讀取左片數(shù)據(jù)BITMAPFILEHEADER bmfhLeft;BITMAPINFOHEADER bmihLeft;fread(&bmfhLeft, sizeof(BITMAPFILEHEADER), 1, pSrcFileLeft);fread(&bmihLeft, sizeof(BITMAPINFOHEAD

28、ER), 1, pSrcFileLeft);if(bmihLeft.biBitCount != 8)printf("只支持8位位圖: 左片n");return FAILURE;DWORD widthLeft = bmihLeft.biWidth;DWORD heightLeft = bmihLeft.biHeight;DWORD _widthLeft = (widthLeft*8 + 31)/32*4;/saved widthLeft in filesDWORD pixelCountLeft = _widthLeft*heightLeft;fseek(pSrcFileLef

29、t, 256*sizeof(RGBQUAD), SEEK_CUR);BYTE* pSrcBitsLeft = new BYTEpixelCountLeft;/new 1fread(pSrcBitsLeft, sizeof(BYTE), pixelCountLeft, pSrcFileLeft);fclose(pSrcFileLeft);pSrcFileLeft = NULL;/讀取右片數(shù)據(jù)BITMAPFILEHEADER bmfhRight;BITMAPINFOHEADER bmihRight;fread(&bmfhRight, sizeof(BITMAPFILEHEADER), 1,

30、 pSrcFileRight);fread(&bmihRight, sizeof(BITMAPINFOHEADER), 1, pSrcFileRight);if(bmihRight.biBitCount != 8)printf("只支持8位位圖: 右片n");return FAILURE;DWORD widthRight = bmihRight.biWidth;DWORD heightRight = bmihRight.biHeight;DWORD _widthRight = (widthRight*8 + 31)/32*4;/saved widthRight in

31、 filesDWORD pixelCountRight = _widthRight*heightRight;fseek(pSrcFileRight, 256*sizeof(RGBQUAD), SEEK_CUR);BYTE* pSrcBitsRight = new BYTEpixelCountRight;/new 2fread(pSrcBitsRight, sizeof(BYTE), pixelCountRight, pSrcFileRight);fclose(pSrcFileRight);pSrcFileRight = NULL;/開始計算左片特征點/計算左片的興趣點存儲于該vector中ve

32、ctor<FEATUREPOINT> FeaturePointLeft;vector<FEATUREPOINT> FeaturePointRight;int Count1(0);int Count2(0);Moravec(pSrcBitsLeft, &FeaturePointLeft, m_threshold_L, m_window1_L, m_window2_L,widthLeft, heightLeft, &Count1);Moravec(pSrcBitsRight, &FeaturePointRight, m_threshold_R, m_

33、window1_R, m_window2_R,widthRight, heightRight, &Count2);cout << FeaturePointLeft.size() << endl;cout << FeaturePointRight.size() << endl;FeaturePointLeft = RemoveReplicative(FeaturePointLeft);FeaturePointRight = RemoveReplicative(FeaturePointRight);cout << "Fe

34、aturePointLeft.size() = " << FeaturePointLeft.size() << endl;cout << "FeaturePointRight.size() = " << FeaturePointRight.size() << endl;SaveList(FeaturePointLeft, "d:list1.txt");SaveList(FeaturePointRight, "d:list2.txt");/特征點計算完畢,存儲于vec

35、tor中/遍歷vector, 在右片中搜尋相關系數(shù)最大的窗口vector<FEATUREPOINT>:iterator iter1;vector<FEATUREPOINT>:iterator iter2;int k = m_window3 / 2;int i(0), j(0), m(0), n(0);BYTE* pTemplate = new BYTEm_window3*m_window3;/new 5ZeroMemory(pTemplate, sizeof(BYTE)*m_window3*m_window3);BYTE* pTarget = new BYTEm_win

36、dow3*m_window3;/new 6ZeroMemory(pTarget, sizeof(BYTE)*m_window3*m_window3);vector<MATCHEDPOINTS> MatchedPoints;float MaxR(0);float R(0);double A(0), B(0), C(0), D(0), E(0);/計算相關系數(shù)的中間量int lMaxWidth;int lMaxHeight;int Count3(0), Count4(0);for (iter1 = FeaturePointLeft.begin(); iter1 != FeaturePo

37、intLeft.end(); +iter1)cout << endl << "Left point ID: " << Count2+ << endl;/計算該點對應的特征點B = 0.0;D = 0.0;MaxR = 0.0;R = 0.0;if (iter1->x < k | iter1->y < k | iter1->x > heightLeft - k | iter1->y > widthLeft - k)cout << "Left point abo

38、rt: " << Count3+ << endl;continue;/逐個搜索/將左片小窗口內(nèi)的數(shù)據(jù)拷貝/可先求出B,Dfor (i = 0; i < m_window3; +i)for(j = 0; j < m_window3 ; +j)/B = 小窗口所有像素灰度值求和/D = .的平方再求和B += pSrcBitsLeft(i+iter1->y)*_widthLeft + (j+iter1->x);D += pSrcBitsLeft(i+iter1->y)*_widthLeft + (j+iter1->x) * pS

39、rcBitsLeft(i+iter1->y)*_widthLeft + (j+iter1->x);Count4 = 0;/逐個小窗口計算Rfor (iter2 = FeaturePointRight.begin(); iter2 != FeaturePointRight.end(); +iter2)if (iter2->x < k | iter2->y < k | iter2->x > heightRight - k | iter2->y > widthRight - k)cout << "Right point abort: " << Count4+ << endl;continue;A = 0.0;C = 0.0;E = 0.0;j = iter2->x;/i,j為中心點i = iter2->y;j -= k;/i,j為頂點i -= k;int centerX = j + k;int centerY = i + k;/這里的centerX,centerY就是右片某個小窗口的中心/求A,C,Efor (m = 0; m < m_window3; +m)for

溫馨提示

  • 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

提交評論