版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于相關(guān)系數(shù)影像匹配實(shí)習(xí)報(bào)告1、 實(shí)習(xí)內(nèi)容與目的 通過(guò)上機(jī)編程實(shí)現(xiàn)基于相關(guān)系數(shù)算法的影像匹配,從而更加熟練的掌握書(shū)本上關(guān)于影像匹配及相關(guān)系數(shù)算法的理論知識(shí),并熟悉上機(jī)編程的操作。2、 實(shí)習(xí)原理影像匹配實(shí)質(zhì)上是在兩幅或是多幅影像之間識(shí)別同名點(diǎn),其中基于相關(guān)系數(shù)的算法是實(shí)現(xiàn)影像匹配的基本算法之一。相關(guān)系數(shù)是標(biāo)準(zhǔn)化的協(xié)方差函數(shù),協(xié)方差函數(shù)除以?xún)尚盘?hào)的方差即得相關(guān)系數(shù)。計(jì)算相關(guān)系數(shù)的公式如下:g(x,y)與g(x,y)的相關(guān)系數(shù)為:其中:若(p0, q0)(p, q),(pp0,qq0),則p0,q0為搜索區(qū)影像相對(duì)于目標(biāo)區(qū)影像的位移參數(shù)。由離散灰度數(shù)據(jù)對(duì)相關(guān)系數(shù)的估計(jì)為,考慮到計(jì)算工作量,相關(guān)系數(shù)的
2、實(shí)用公式為3、 實(shí)習(xí)步驟及相關(guān)代碼 在第一次點(diǎn)特征點(diǎn)實(shí)習(xí)的基礎(chǔ)上我們組進(jìn)行了第二次基于相關(guān)系數(shù)的影像匹配實(shí)習(xí)。所以程序?qū)崿F(xiàn)的部分操作直接利用前次實(shí)習(xí)的中的程序。(1) 讀入左右影像 FILE* pSrcFileLeft = NULL;pSrcFileLeft = fopen(srcFileLeft,rb);if(pSrcFileLeft = NULL)printf(原始左片影像打開(kāi)失敗n);return FAILURE;FILE* pSrcFileRight = NULL;pSrcFileRight = fopen(srcFileRight,rb);if(pSrcFileRight = NUL
3、L)printf(原始右片影像打開(kāi)失敗n);return FAILURE;(2) 確定目標(biāo)窗口大小 通過(guò)老師課堂上的講授和我們?cè)诰幊踢^(guò)程中的不斷嘗試,我們默認(rèn)使用的窗口的尺寸為11*11。(3) 確定目標(biāo)點(diǎn)的位置 由前次的實(shí)習(xí)中得到左相片中的特征點(diǎn)作為這次實(shí)習(xí)的目標(biāo)點(diǎn)。(4) 預(yù)測(cè)右影像搜索范圍 本程序中也在左相片中計(jì)算出了特征點(diǎn),然后將左右兩相片中的特征點(diǎn)進(jìn)行計(jì)算相關(guān)系數(shù)。(5) 逐窗口計(jì)算相關(guān)系數(shù)并保存相應(yīng)的儲(chǔ)存單元 將左相片中的目標(biāo)點(diǎn)與右相片中的特征點(diǎn)進(jìn)行相關(guān)系數(shù)的計(jì)算。(6) 比較相關(guān)系數(shù),取最大相關(guān)系數(shù)作為匹配點(diǎn) 對(duì)于分別比較上一步驟中計(jì)算出的相關(guān)系數(shù),選取出最大的一個(gè)相關(guān)系數(shù)作為匹
4、配點(diǎn)。 程序操作如下:在程序主界面中點(diǎn)擊Extend中選取ImageMatch選項(xiàng),然后進(jìn)入?yún)?shù)設(shè)置界面。設(shè)置讀取和保存影像路徑和窗口大小等參數(shù)后,點(diǎn)擊Progress進(jìn)行運(yùn)算。4、 實(shí)習(xí)結(jié)果及分析 作為數(shù)據(jù)源的左右影像如些圖所示:左相片 右相片 經(jīng)過(guò)計(jì)算后得到的目標(biāo)點(diǎn)左右圖像分別如下所示:左相片 右相片 顯示匹配點(diǎn)號(hào): 通過(guò)老師得到的圖片可以看出在左相片中得到的五個(gè)目標(biāo)點(diǎn)中有四個(gè)在右相片中找到了同名點(diǎn),由此可以看出本程序基本滿足實(shí)習(xí)要求,并得到理想的結(jié)果。不足的地方就是選取的特征點(diǎn)的數(shù)量不夠多,這樣就無(wú)法判斷本程序的“誤判”的情況如何。5、 實(shí)習(xí)體會(huì) 在學(xué)習(xí)到相關(guān)系數(shù)的時(shí)候,一看到計(jì)算相關(guān)系
5、數(shù)的公式的時(shí)候我就有種被折服的感覺(jué),那個(gè)公式實(shí)在是太復(fù)雜,它使我感覺(jué)我怎么也不能記住這個(gè)復(fù)雜的公式。不過(guò)經(jīng)過(guò)這次實(shí)習(xí)后,我覺(jué)得這個(gè)公式又不是當(dāng)初認(rèn)為的那樣無(wú)法記憶。我想這次實(shí)習(xí)我最大的收獲就是對(duì)于之前在學(xué)習(xí)過(guò)程中遇到不懂知識(shí)以及難以記憶的知識(shí)都得到了加強(qiáng),方便了我對(duì)他們的理解與記憶。 其次,在編程過(guò)程中更加鍛煉自己動(dòng)手編程的能力,使得我編程能力較之前有著一定的提高。每次編程實(shí)習(xí)都是一個(gè)積累經(jīng)驗(yàn)的過(guò)程,然后通過(guò)一次次的實(shí)習(xí)后,我最終的能力就能夠得到很好的體現(xiàn)。附件:void Moravec(BYTE* pSrcBits, vector *FeaturePoint, int m_threshold
6、, int m_window1, int m_window2, int width, int height, int* Count1)。此部分程序與點(diǎn)特征程序中代碼一樣,因此不再重復(fù)粘貼vector RemoveReplicative(vector v)vector ret;vector:iterator iter = v.begin();ret.clear();ret.push_back(*iter);vector:iterator iter2;BOOL b(FALSE);for (iter = v.begin(); iter != v.end(); +iter)b = false;for
7、(iter2 = ret.begin(); iter2 != ret.end(); +iter2)if (iter-x = iter2-x & iter-y = iter2-y)b = 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
8、.bfType = 0x4d42; / 0x42 = B 0x4d = Mbmfh.bfReserved1 = 0;bmfh.bfReserved2 = 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
9、 = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);bmfh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + byteCount;elseMessageBox(NULL, 8bit or 24bit accepted, 錯(cuò)誤, MB_ICONERROR);return;bmih.biBitCount = biBitCount;bmih.biWidth = width;bmih.biHeight = height;bmih.biSize = 40;bmih.bi
10、Planes = 1;bmih.biCompression = BI_RGB;bmih.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 (biBitCou
11、nt = 8)RGBQUAD rgb256;int i(0);for (; i 256; +i)rgbi.rgbBlue = i;rgbi.rgbGreen = i;rgbi.rgbRed = i;rgbi.rgbReserved = 0;/修改顏色表255對(duì)應(yīng)的顏色rgb255.rgbBlue = 0;rgb255.rgbGreen = 0;rgb255.rgbRed = 255;f.Write(rgb, sizeof(RGBQUAD)*256);f.Write(pBits, byteCount);f.Close();elseMessageBox(NULL, 保存圖像失敗, 錯(cuò)誤, MB_I
12、CONERROR);return;void DrawCross(BYTE* pBits, vector FeaturePoint, int _width, int byteCount)vector:iterator iter;int i(0), j(0);for (i = 0; i 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
13、;pBitsi*_width+j-2 = 255;pBits(i+2)*_width+j = 255;pBits(i-2)*_width+j = 255;void DrawCross(BYTE* pBits1, BYTE* pBits2, vector MatchedPoints, int _width1, int _width2, int byteCount1, int byteCount2)vector:iterator iter;int i(0), j(0);for (i = 0; i byteCount1; +i)if (pBits1i = 255)pBits1i = 254;for
14、(j = 0; j 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-2)*_width1+j = 255;i = iter-y2;j = iter-x2;pBits2i*_wi
15、dth2+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 SaveList(vector FeaturePoint, CString txtFile)FILE* pTxtFile= fop
16、en(txtFile, wt);if (!pTxtFile)return;fprintf(pTxtFile, #t特征點(diǎn)數(shù): %dnn, FeaturePoint.size();fprintf(pTxtFile, 坐標(biāo)Xt坐標(biāo)Yt興趣值n);vector:iterator iter;for (iter = FeaturePoint.begin(); iter != FeaturePoint.end(); +iter)fprintf(pTxtFile, %dt%dt%dn, iter-x, iter-y, (int)iter-IV);fclose(pTxtFile);void SaveList(
17、vector MatchedPoints, CString txtFile)FILE* pTxtFile= fopen(txtFile, wt);if (!pTxtFile)return;fprintf(pTxtFile, #同名點(diǎn)對(duì)數(shù): %dnn,MatchedPoints.size();vector:iterator iter;for (iter = MatchedPoints.begin(); iter != MatchedPoints.end(); +iter)fprintf(pTxtFile, %dt%dt%dt%dt%fn,iter-x1, iter-y1, iter-x2, it
18、er-y2, iter-coefficient);fclose(pTxtFile);int _tmain(int argc, TCHAR* argv, TCHAR* envp)if (argc != 15):MessageBox(NULL,啟動(dòng)參數(shù)不正確,請(qǐng)從GUI.exe或命令行參數(shù)啟動(dòng),MB_ICONASTERISK);return FAILURE;system(Mode con: COLS=50 LINES=150);system(title Image_Match);int nRetCode = 0;if (!AfxWinInit(:GetModuleHandle(NULL), NUL
19、L, :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_Right,window2_Right;CString CoRelated,windo
20、w3,flag1;/啟動(dòng)參數(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 = argv12;window3 = argv13;flag1 = argv14
21、;/判斷是否在創(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_CoRelated = (double)atoi(CoRelated) / 100;
22、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) = -1)CString err;err.Format(文件:%s不存在, srcFileRight);:MessageBox(
23、NULL,err, Error, MB_ICONERROR);return FAILURE;/打開(kāi)2幅影像FILE* pSrcFileLeft = NULL;pSrcFileLeft = fopen(srcFileLeft,rb);if(pSrcFileLeft = NULL)printf(原始左片影像打開(kāi)失敗n);return FAILURE;FILE* pSrcFileRight = NULL;pSrcFileRight = fopen(srcFileRight,rb);if(pSrcFileRight = NULL)printf(原始右片影像打開(kāi)失敗n);return FAILURE;/
24、讀取左片數(shù)據(jù)BITMAPFILEHEADER bmfhLeft;BITMAPINFOHEADER bmihLeft;fread(&bmfhLeft, sizeof(BITMAPFILEHEADER), 1, pSrcFileLeft);fread(&bmihLeft, sizeof(BITMAPINFOHEADER), 1, pSrcFileLeft);if(bmihLeft.biBitCount != 8)printf(只支持8位位圖: 左片n);return FAILURE;DWORD widthLeft = bmihLeft.biWidth;DWORD heightLeft = bmih
25、Left.biHeight;DWORD _widthLeft = (widthLeft*8 + 31)/32*4;/saved widthLeft in filesDWORD pixelCountLeft = _widthLeft*heightLeft;fseek(pSrcFileLeft, 256*sizeof(RGBQUAD), SEEK_CUR);BYTE* pSrcBitsLeft = new BYTEpixelCountLeft;/new 1fread(pSrcBitsLeft, sizeof(BYTE), pixelCountLeft, pSrcFileLeft);fclose(p
26、SrcFileLeft);pSrcFileLeft = NULL;/讀取右片數(shù)據(jù)BITMAPFILEHEADER bmfhRight;BITMAPINFOHEADER bmihRight;fread(&bmfhRight, sizeof(BITMAPFILEHEADER), 1, pSrcFileRight);fread(&bmihRight, sizeof(BITMAPINFOHEADER), 1, pSrcFileRight);if(bmihRight.biBitCount != 8)printf(只支持8位位圖: 右片n);return FAILURE;DWORD widthRight
27、= bmihRight.biWidth;DWORD heightRight = bmihRight.biHeight;DWORD _widthRight = (widthRight*8 + 31)/32*4;/saved widthRight in filesDWORD pixelCountRight = _widthRight*heightRight;fseek(pSrcFileRight, 256*sizeof(RGBQUAD), SEEK_CUR);BYTE* pSrcBitsRight = new BYTEpixelCountRight;/new 2fread(pSrcBitsRigh
28、t, sizeof(BYTE), pixelCountRight, pSrcFileRight);fclose(pSrcFileRight);pSrcFileRight = NULL;/開(kāi)始計(jì)算左片特征點(diǎn)/計(jì)算左片的興趣點(diǎn)存儲(chǔ)于該vector中vector FeaturePointLeft;vector FeaturePointRight;int Count1(0);int Count2(0);Moravec(pSrcBitsLeft, &FeaturePointLeft, m_threshold_L, m_window1_L, m_window2_L,widthLeft, heightLef
29、t, &Count1);Moravec(pSrcBitsRight, &FeaturePointRight, m_threshold_R, m_window1_R, m_window2_R,widthRight, heightRight, &Count2);cout FeaturePointLeft.size() endl;cout FeaturePointRight.size() endl;FeaturePointLeft = RemoveReplicative(FeaturePointLeft);FeaturePointRight = RemoveReplicative(FeaturePo
30、intRight);cout FeaturePointLeft.size() = FeaturePointLeft.size() endl;cout FeaturePointRight.size() = FeaturePointRight.size() endl;SaveList(FeaturePointLeft, d:list1.txt);SaveList(FeaturePointRight, d:list2.txt);/特征點(diǎn)計(jì)算完畢,存儲(chǔ)于vector中/遍歷vector, 在右片中搜尋相關(guān)系數(shù)最大的窗口vector:iterator iter1;vector:iterator iter
31、2;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_window3*m_window3;/new 6ZeroMemory(pTarget, sizeof(BYTE)*m_window3*m_window3);vector MatchedPoints;float MaxR(0);fl
32、oat R(0);double A(0), B(0), C(0), D(0), E(0);/計(jì)算相關(guān)系數(shù)的中間量int lMaxWidth;int lMaxHeight;int Count3(0), Count4(0);for (iter1 = FeaturePointLeft.begin(); iter1 != FeaturePointLeft.end(); +iter1)cout endl Left point ID: Count2+ x y x heightLeft - k | iter1-y widthLeft - k)cout Left point abort: Count3+ en
33、dl;continue;/逐個(gè)搜索/將左片小窗口內(nèi)的數(shù)據(jù)拷貝/可先求出B,Dfor (i = 0; i m_window3; +i)for(j = 0; j y)*_widthLeft + (j+iter1-x);D += pSrcBitsLeft(i+iter1-y)*_widthLeft + (j+iter1-x) * pSrcBitsLeft(i+iter1-y)*_widthLeft + (j+iter1-x);Count4 = 0;/逐個(gè)小窗口計(jì)算Rfor (iter2 = FeaturePointRight.begin(); iter2 != FeaturePointRight.end(); +iter2)if (iter2-x y x heightRight - k | iter2-y widthRight - k)cout Right point abort: Count4+ x;/i,j為中心點(diǎn)i = iter2-y;j -
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026上半年云南事業(yè)單位聯(lián)考省民族宗教事務(wù)委員會(huì)委屬事業(yè)單位公開(kāi)招聘人員參考考試題庫(kù)附答案解析
- 2026年合肥市萬(wàn)泉河路幼兒園、合肥市杭州路幼兒園招聘?jìng)淇伎荚囋囶}附答案解析
- 2026黑龍江哈爾濱市侵華日軍第七三一部隊(duì)罪證陳列館招聘編外人員15人參考考試試題附答案解析
- 2026南昌市勞動(dòng)保障事務(wù)代理中心招聘勞務(wù)派遣人員備考考試題庫(kù)附答案解析
- 2026重慶市萬(wàn)州區(qū)高梁鎮(zhèn)人民政府招聘公益性崗位人員1人備考考試試題附答案解析
- 醫(yī)院制度考試試題及答案
- 2026江西撫州市樂(lè)安縣屬建筑工程有限公司招聘2人(臨聘崗)備考考試題庫(kù)附答案解析
- 局安全生產(chǎn)考核制度
- 廣西物資學(xué)校2026年春學(xué)期招聘兼職教師備考考試試題附答案解析
- 企業(yè)生產(chǎn)作業(yè)管理制度
- 黨群工作部室部管理制度
- 2025至2030年中國(guó)兔子養(yǎng)殖行業(yè)市場(chǎng)現(xiàn)狀調(diào)查及投資方向研究報(bào)告
- 委外施工安全試題及答案
- DBT29-320-2025 天津市建筑工程消能減震隔震技術(shù)規(guī)程
- 產(chǎn)品技術(shù)維護(hù)與保養(yǎng)手冊(cè)
- 2024年國(guó)家電網(wǎng)招聘之電工類(lèi)考試題庫(kù)(突破訓(xùn)練)
- 中建公司建筑機(jī)電設(shè)備安裝工程標(biāo)準(zhǔn)化施工手冊(cè)
- 心臟科醫(yī)生在心血管疾病治療及介入手術(shù)方面的總結(jié)
- 建設(shè)單位項(xiàng)目安全生產(chǎn)方案(2篇)
- 畜牧業(yè)動(dòng)物疫病防控手冊(cè)
- 年度采購(gòu)合同框架協(xié)議
評(píng)論
0/150
提交評(píng)論