首页 OpenCV统计应用-直方图反向投影

OpenCV统计应用-直方图反向投影

举报
开通vip

OpenCV统计应用-直方图反向投影OpenCV统计应用-直方图反向投影 OpenCV统计应用-直方图反向投影 影像处理的统计直方图,可以知道一张图片在该色彩空间的数据分布状况,而这边,就要介绍到直方图反向投影的函式,直方图反向投影,也就是将数据分布的状况依照Look-up table的方式对应回去,实际上,这个函式是跟前面介绍到的cvLUT()是一样的,只不过,差别是差异在cvLUT()的第三个自变量改变成CvHistogram数据结构的输入,直方图反向投影,cvCalcBackProject()的第一个自变量是输入单信道IplImage数据结构,...

OpenCV统计应用-直方图反向投影
OpenCV统计应用-直方图反向投影 OpenCV统计应用-直方图反向投影 影像处理的统计直方图,可以知道一张图片在该色彩空间的数据分布状况,而这边,就要介绍到直方图反向投影的函式,直方图反向投影,也就是将数据分布的状况依照Look-up table的方式对应回去,实际上,这个函式是跟前面介绍到的cvLUT()是一样的,只不过,差别是差异在cvLUT()的第三个自变量改变成CvHistogram数据结构的输入,直方图反向投影,cvCalcBackProject()的第一个自变量是输入单信道IplImage数据结构,第二个自变量是输出单信道IplImage反向投影图形数据结构,第三个自变量是选定要被反向投影的CvHistogram直方图数据结构,而cvCalcBackProject()把前面提到的Look-up table的计算方式包在cvCalcBackProject()函式的底层,因此,它可以整合CvHistogram这个数据结构做更多的应用,下面这个就是修改前面的范例"OpenCV统计应用-CvHistogram直方图数据结构",来做直方图反向投影的程序 灰阶直方图反向投影 #include #include #include int HistogramBins = 50; int HistogramBinWidth; float HistogramRange1[2]={0,255}; float *HistogramRange[1]={&HistogramRange1[0]}; CvPoint Point1; CvPoint Point2; int main() {     IplImage *GrayImage1;     IplImage *Image1;     IplImage *Image2;     IplImage *BackProjectImage;     CvHistogram *Histogram1;     IplImage *HistogramImage1;     Image1=cvLoadImage("Riverbank.jpg",1);     Image2=cvCreateImage(cvGetSize(Image1),IPL_DEPTH_8U,3);     GrayImage1=cvLoadImage("Riverbank.jpg",0);     BackProjectImage=cvCreateImage(cvGetSize(Image1),IPL_DEPTH_8U,1);     Histogram1 = cvCreateHist(1,&HistogramBins,CV_HIST_ARRAY,HistogramRange);     HistogramImage1 = cvCreateImage(cvSize(256,300),8,3);     cvSetZero(HistogramImage1);     HistogramImage1->origin=1;     HistogramBinWidth=256/HistogramBins;     cvCalcHist(&GrayImage1,Histogram1);     cvNormalizeHist(Histogram1,5000);     cvThreshHist(Histogram1,50);     cvCalcBackProject(&GrayImage1,BackProjectImage,Histogram1);     cvCopy(Image1,Image2,BackProjectImage);     for(int i=0;i #include #include IplImage *Image1,*Image2; IplImage *HSVImage; IplImage *HueImage; IplImage *BackProjectHueImage,*BackProjectImage; CvHistogram *Histogram1; IplImage *HistogramImage1; CvPoint Point1,Point2; int HueValue=0; int HistogramBins = 180; int HistogramBinWidth; float HistogramRange1[2]={0,180}; float *HistogramRange[1]={&HistogramRange1[0]}; void onTrackbar(int position); int main() {     Image1 =cvLoadImage("Riverbank.jpg",1);     HSVImage = cvCreateImage( cvGetSize(Image1),8,3);     HueImage = cvCreateImage( cvGetSize(Image1),8,1);     BackProjectHueImage = cvCreateImage( cvGetSize(Image1),8,1);     BackProjectImage = cvCreateImage( cvGetSize(Image1),8,3);     Histogram1 = cvCreateHist(1,&HistogramBins,CV_HIST_ARRAY,HistogramRange);     HistogramImage1 = cvCreateImage(cvSize(180,300),8,3);     HistogramImage1->origin=1;     cvCvtColor( Image1, HSVImage, CV_BGR2HSV );     cvSplit(HSVImage,HueImage,0,0,0);     cvCalcHist( &HueImage, Histogram1);     cvNormalizeHist(Histogram1,5000);     cvZero( HistogramImage1 );     cvNot(HistogramImage1,HistogramImage1);     HistogramBinWidth = HistogramImage1->width/HistogramBins;     for(int i=0;iwidth/HistogramBins;     for(int i=0;i #include #include IplImage *Image1,*Image2; IplImage *HSV; IplImage *HueImage,*SaturationImage,*ValueImage; IplImage *ImageArray[3]; IplImage *BackProjectImage; CvHistogram *Histogram1; IplImage *HistogramImage1; CvPoint Point1,Point2; int HueValue=0; int HistogramBins[3] ={180,256,256}; int HistogramBinWidth; float HistogramRange1[6]={0,180,0,255,0,255}; float *HistogramRange[3]={&HistogramRange1[0],&HistogramRange1[2],&HistogramRange1[4]}; void onTrackbar(int position); int main() {     Image1 =cvLoadImage("Riverbank.jpg",1);     HSV = cvCreateImage( cvGetSize(Image1),8,3 );     HueImage = cvCreateImage( cvGetSize(Image1),8,1 );     SaturationImage = cvCreateImage( cvGetSize(Image1),8,1 );     ValueImage = cvCreateImage( cvGetSize(Image1),8,1);     ImageArray[0]=HueImage;     ImageArray[1]=SaturationImage;     ImageArray[2]=ValueImage;     BackProjectImage = cvCreateImage( cvGetSize(Image1),8,3 );     Histogram1 = cvCreateHist(3,HistogramBins,CV_HIST_SPARSE,HistogramRange);     cvCvtColor( Image1, HSV, CV_BGR2HSV );     cvSplit(HSV,HueImage,SaturationImage,ValueImage,0);     cvCalcHist( ImageArray, Histogram1);     cvNamedWindow("Riverbank",1 );     cvCreateTrackbar("Hue Thresh","Riverbank",&HueValue,200,onTrackbar);     cvShowImage("Riverbank",Image1);     cvWaitKey(0); } void onTrackbar(int position) {     CvHistogram *Histogram2= cvCreateHist(3,HistogramBins,CV_HIST_SPARSE,HistogramRange);     IplImage *Image2=cvCreateImage( cvGetSize(Image1),8,3 );     IplImage *BackProjectImage = cvCreateImage( cvGetSize(Image1),8,1 );     cvCopyHist(Histogram1,&Histogram2);     cvThreshHist(Histogram2,position);     cvCalcBackProject( ImageArray, BackProjectImage, Histogram2);     cvCopy(Image1,Image2,BackProjectImage);     cvShowImage("Riverbank",Image2); } 执行结果: 在三维空间的作法上面,就要参考到前面"OpenCV统计应用-CvHistogram直方图数据结构"关于三维空间制作的部份,除了用cvCvtColor()将色彩空间转换,用cvSplit()将信道做分割,还要做个图形数组(ImageArray)来让cvCalcHist()这个函式做运算,计算出来的结果为一个CvHistogram的三维空间稀疏矩阵直方图,而在onTrackbar()的部份,cvCalcBackProject()直方图反向投影亦是同样要用ImageArray做输入,而输出则是一个单信道的图形,在稀疏矩阵里面,由于维度为三维,所以他所形成的统计直方图数值都是极小,所以门坎值只要一点点就快要全部都分布了,而这个三维空间的反向投影可以如此建构,是基于Look-up table的功能来实现,只不过他的缺点是,每一个维度的Look-up table范围是0~255,因此如果是像Hue值的范围0~180,它的数值就会被模糊化,也就是数据会被些许位移,但是仍不会影响它出来结果的精确度 在这个直方图反向投影的部份,也可以结合连通成分来做去除某一门坎值的连通分量 cvCalcBackProject() 将统计直方图的分布数据根据Look-up table对应回去,也就是说,当今天CvHistogram数据结构内的数据分布是243,110,0,60...则使用cvCalcBackProject()函式单信道的图片像素值会是,当遇到像素值为1的时候变243,像素值为2的时候变110,依此类推,cvCalcBackProject()直方图反向投影可以根据多维度设计,而cvCalcBackProject()第一个自变量为输入单信道IplImage或CvMat数据结构,第二个自变量为输入单通道反向投影IplImage或CvMat数据结构,第三个自变量为输入CvHistogram数据结构 cvCalcBackProject(输入单信道IplImage或CvMat数据结构,输入单信道反向投影IplImage或CvMat数据结构,输入CvHistogram数据结构)
本文档为【OpenCV统计应用-直方图反向投影】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_996453
暂无简介~
格式:doc
大小:121KB
软件:Word
页数:8
分类:工学
上传时间:2011-10-14
浏览量:25