日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

立体匹配之NCC算法

發布時間:2025/7/25 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 立体匹配之NCC算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

FROM:http://blog.csdn.net/tulun/article/details/6388759

NCC算法(Normal Cross Correlation),具體原理見相關圖像處理書籍。

該程序是opencv中文論壇的牛人貢獻的,感謝他的工作。

?

(程序所需圖片可以在網上找如http://vision.middlebury.edu/stereo/data/scenes2003/)

?

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <math.h>
#include <ctime>

using namespace std;
template<class T> class Image
{
private:
??? IplImage* imgp;

public:
??? Image(IplImage* img=0){imgp=img;}
??? ~Image(){imgp=0;}
??? void operator=(IplImage* img){imgp=img;}
??? inline T* operator[](const int rowIndx)
??? {
??? ??? return((T*)(imgp->imageData+rowIndx*imgp->widthStep));
??? }

};

typedef struct
{
??? unsigned char b,g,r;
}RgbPixel;

typedef struct
{
??? float b,g,r;
}RgbPixelFloat;

typedef Image<RgbPixel> RgbImage;
typedef Image<RgbPixelFloat> RgbImageFloat;
typedef Image<unsigned char> BwImage;
typedef Image<float> BwImageFloat;


void displayImageProperty(IplImage* image)
{
??? cout<<"-------Image Properties--------"<<endl;
??? cout<<"Image width="<<image->width<<endl;
??? cout<<"Image height="<<image->height<<endl;
??? cout<<"Image depth="<<image->depth<<endl;
??? cout<<"Image nSize="<<image->nSize<<endl;
??? cout<<"Image nChannels="<<image->nChannels<<endl;

??? char* origin;
??? char* dataOrder;
??? if (image->origin==0)
??? {
??? ??? origin="Top-left";
??? }
??? else
??? {
??????? origin="Below-left";//image->origin=1
??? }

??? cout<<"Image origin="<<origin<<endl;

??? if (image->dataOrder==0)
??? {
??????? dataOrder="Order_Pixel(Interleaved)";
??? }
??? else
??? {
??????? dataOrder="Order_Plane";//image->dataOrder=1
??? }
??? cout<<"Image dataOrder="<<dataOrder<<endl;
??? cout<<"Image widthStep="<<image->widthStep<<" Bytes"<<endl;
}

// display an image in a new window with title to be given.
void displayImageNewWindow(char* title,CvArr* img)
{
??? cvNamedWindow(title, CV_WINDOW_AUTOSIZE );
??? cvShowImage(title,img);
}


int getMaxMin(double value[],int valueSize, int maxmin)
{
??? int pos=0;
??? int i=0;
??? double max1=-1;//?-999999;
??? double min1=999999;
??????
??? if (maxmin==1)
??? {
??? ??? //find max
??????? for (i=0;i<valueSize;i++)
??? ??? {
??? ??? ??? //find the index with the max ncc;
??????????? if (value[i]>max1)
??? ??? ??? {
??????????????? pos=i;
??????????????? max1=value[i];
??????????? }
???????? }
??? }
??????
??? if (maxmin==0)
??? {
??? ??? //find min
??????? for (i=0;i<valueSize;i++)
??? ??? {
??? ??? ??? //find the index with the max ncc;
??????????? if (value[i]<min1)
??? ??? ??? {
??????????????? pos=i;
??????????????? min1=value[i];
??????????? }
???????? }
??? }
??? return pos;
}

IplImage* generateDisparityImage(IplImage* greyLeftImg32,IplImage* greyRightImg32,int windowSize,int DSR)
{
??? int offset=floor((double)windowSize/2);
??? int height=greyLeftImg32->height;
??? int width=greyLeftImg32->width;
??? double* localNCC=new double[DSR];

??? int x=0, y=0,d=0,m=0;
??? int N=windowSize;???????????

??? IplImage* leftWinImg=cvCreateImage(cvSize(N,N),32,1);//mySubImage(greyLeftImg32,cvRect(0,0,N,N));
??? IplImage* rightWinImg=cvCreateImage(cvSize(N,N),32,1);;//mySubImage(greyRightImg32,cvRect(0,0,N,N));
??? IplImage* disparity=cvCreateImage(cvSize(width,height),8,1);//or IPL_DEPTH_8U
??? BwImage imgA(disparity);
??????
??? for (y=0;y<height;y++)
??? {
??? ??? for (x=0;x<width;x++)
??? ??? {
??? ??? ??? imgA[y][x]=0;
??? ??? }
??? }
??????
??? CvScalar s1;
??? CvScalar s2;
??? for (y=0;y<height-N;y++)
??? {
??? ??? //height-N
??? ??? for (x=0;x<width-N;x++)
??? ??? {
??? ??? ??? //width-N
??????????? //getWindow(i,j,leftim,wl,N);
??????????? cvSetImageROI(greyLeftImg32, cvRect(x,y,N,N));
??????????? s1=cvAvg(greyLeftImg32,NULL);
??????????? cvSubS(greyLeftImg32,s1,leftWinImg,NULL);//zero-means
??????????? cvNormalize(leftWinImg,leftWinImg,1,0,CV_L2,NULL);//0變成1
??????????? d=0;
????????????
??????????? //initialise localNCC
??????????? for (m=0;m<DSR;m++)
??? ??? ??? {
??? ??? ??? ??? localNCC[m]=0;
??? ??? ??? }
????????????
??????????? do{
??? ??? ??? ??? if (x-d>=0)
??? ??? ??? ??? {
??? ??? ??? ??? ??? cvSetImageROI(greyRightImg32, cvRect(x-d,y,N,N));
??????????????????? s2=cvAvg(greyRightImg32,NULL);
??????????????????? cvSubS(greyRightImg32,s2,rightWinImg,NULL);//zero-means
??????????????????? cvNormalize(rightWinImg,rightWinImg,1,0,CV_L2,NULL);//0變成1
??????????????? }
??? ??? ??? ??? else
??? ??? ??? ??? {
??? ??? ??? ??? ??? break;
??????????????? }
??????????????? localNCC[d]=cvDotProduct(leftWinImg,rightWinImg);
??????????????? cvResetImageROI(greyRightImg32);
??????????????? d++;
???????????? }while(d<=DSR);
????????????
???????????? //to find the best d and store
???????????? imgA[y+offset][x+offset]=getMaxMin(localNCC,DSR,1)*16;
???????????? cvResetImageROI(greyLeftImg32);
????????? }//x
????????? if (y%10==0)
??? ??? ??? ? cout<<"row="<<y<<" of "<<height<<endl;
?????? }//y
??????
?????? cvReleaseImage(&leftWinImg);
?????? cvReleaseImage(&rightWinImg);
??????????
??? ?? return disparity;
}

int main (int argc, char * const argv[])
{
??? // insert code here...
??? cout << "Stereo Normalized Cross Correlation"<<endl;
??????
??? //**********image input*********************//
??????

??? char* filename1="im0.ppm";//im2_cone.png
??? IplImage* greyLeftImg= cvLoadImage(filename1,0);
??? char* filename2="im1.ppm";
??? IplImage* greyRightImg= cvLoadImage(filename2,0);
??????
??? if (greyLeftImg==NULL)
??? {
??? ??? cout << "No valid image input."<<endl;
??????? //char c=getchar();
??????? return 1;
??? }
??? else
??? {
??? ??? displayImageProperty(greyLeftImg);
??? }
??????
??? if (greyRightImg==NULL)
??? {
??? ??? cout << "No valid image input."<<endl;
??????? //char c=getchar();
??????? return 1;
??? }

??? int width=greyLeftImg->width;
??? int height=greyLeftImg->height;

??? /****************8U to 32F**********************/
??? IplImage* greyLeftImg32=cvCreateImage(cvSize(width,height),32,1);//IPL_DEPTH_32F
??? IplImage* greyRightImg32=cvCreateImage(cvSize(width,height),32,1);
??? cvConvertScale(greyLeftImg, greyLeftImg32, 1/255.);
??? cvConvertScale(greyRightImg, greyRightImg32, 1/255.);//1/255. equals to 1/255.0
??????
??? //-------------Computing stereo matching----------------
??? time_t tstart, tend;
??? tstart = time(0);
??? int windowSize=11,DSR=20;//Disparity Search Range
??? IplImage* disparity32=generateDisparityImage(greyLeftImg32,greyRightImg32,windowSize,DSR);
??? tend = time(0);
??? cout << "It took "<< difftime(tend, tstart) <<" second(s)."<< endl;

??? displayImageNewWindow("Dispairty Image",disparity32);
??? displayImageNewWindow("Left Image",greyLeftImg32);
??? displayImageNewWindow("Right Image",greyRightImg32);
??? //cvSaveImage("D:/OpenCV_stuff/SampleImages/disparity.jpg",disparity32);

??? //********destroy window************/
??? cvWaitKey(0);
??? cvReleaseImage(&greyLeftImg32);
??? cvReleaseImage(&greyRightImg32);
??? cvReleaseImage(&greyLeftImg);
??? cvReleaseImage(&greyRightImg);
??? cvReleaseImage(&disparity32);
??? cvDestroyWindow("Left Image");
??? cvDestroyWindow("Right Image");
??? cvDestroyWindow("Dispairty Image");
??? return 0;
}

總結

以上是生活随笔為你收集整理的立体匹配之NCC算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产免费一级视频 | 五月激情站 | 欧美一区二区影院 | 亚洲色图在线视频 | 日本三级日本三级日本三级极 | 国产综合视频 | 狠狠ri| 日韩操比 | 啪啪网免费 | 久久精品国产一区二区电影 | 成人国产精品入口 | 成人午夜福利视频 | 激情五月五月婷婷 | 日韩女优在线观看 | av免费网址 | 精品999www| 欧美一a | 精品人妻伦九区久久aaa片 | 91高跟黑色丝袜呻吟在线观看 | 国产精品久久久久高潮 | 美国av片| 五月婷婷狠狠爱 | 粉嫩aⅴ一区二区三区四区五区 | 一本到高清 | 天堂欧美城网站网址 | 在线观看黄网址 | yy77777丰满少妇影院 | 精东影业一区二区三区 | 毛片毛片毛片毛片 | 菲律宾黄色片 | 91秘密入口 | 天天爽天天干 | 欧美高清在线视频 | 黄瓜视频污在线观看 | 伊人免费视频 | 日批视频免费在线观看 | 超污网站在线观看 | 午夜免费影院 | 亚洲狠狠操 | 看片一区二区 | 亚洲图片自拍偷拍 | 日韩三级视频在线观看 | 青草视频在线观看免费 | 明日花绮罗高潮无打码 | 国产综合精品视频 | 一级黄色电影片 | 久久在线视频免费观看 | 日本一区二区三区四区在线观看 | av香港经典三级级 在线 | 日本丰满大乳奶做爰 | 成人免费视频播放 | a毛片| 黄p在线播放 | 草草影院最新网址 | 97在线免费观看 | 美女131爽爽爽 | 中文在线字幕免费观看电 | 91久久精品日日躁夜夜躁国产 | 国产日产精品一区二区三区 | 国产精品亚洲欧美在线播放 | 在线免费看黄网站 | 欧美,日韩,国产在线 | 色臀av| 亚洲九九九九 | 在线免费观看av网站 | 少妇太紧太爽又黄又硬又爽 | 黄色国产片| 中文字幕一区二区三区人妻在线视频 | 国产成人av一区二区三区不卡 | 久久久高清视频 | 超碰爱爱 | 中国极品少妇xxxx | 久久久久久久久久久91 | 国产精品美女 | 日本伦理一区二区 | 国产经典三级在线 | av资源在线 | 在线观看av大片 | 国产玖玖视频 | av体验区| 午夜精品999 | 国产又黄又大又爽 | 日韩大片在线 | 欧美女优在线观看 | 亚洲av电影一区二区 | 色com| 欧美日韩国产一级片 | 国产日韩二区 | 在线电影一区二区 | 午夜黄色剧场 | 亚洲一区二区三区不卡视频 | 火影黄动漫免费网站 | 国产老熟女伦老熟妇露脸 | 日韩免费在线观看视频 | 中文字幕一区二区三区日韩精品 | 中文字幕人妻一区二 | 美女天天干 | 国产乱子伦精品无码专区 | 日本大尺度吃奶做爰视频 |