设为首页 加入收藏

TOP

立体视觉算法--SAD+DP(二)
2015-11-21 01:12:07 来源: 作者: 【 】 浏览:9
Tags:立体 视觉 算法 --SAD
? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? if (difPixel <= max12Diff) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? Ddynamic[j + 1][k + 1] = Ddynamic[j][k] +1; ??
? ? ? ? ? ? ? ? }else if (Ddynamic[j][k+1] > Ddynamic[j+1][k]) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? Ddynamic[j + 1][k + 1] = Ddynamic[j][k+1]; ?
? ? ? ? ? ? ? ? }else{ ?
? ? ? ? ? ? ? ? ? ? Ddynamic[j+1][k+1] = Ddynamic[j+1][k]; ?
? ? ? ? ? ? ? ? } ?
??
? ? ? ? ? ? ? ? //cout<
? ? ? ? ? ? } ?
? ? ? ? ? ? //cout<<"\n"; ?
? ? ? ? } ?
? ? ? ? //逆向搜索,找出最佳路径 ?
? ? ? ? m = imageWidth - SW2; ?
? ? ? ? n = imageWidth - SW2; ?
? ? ? ? int m2 = m, n2 = n; ?
??
? ? ? ? while( m >= 1 && n >= 1) ?
? ? ? ? { ?
? ? ? ? ? ? if ((m2 == m + 1 && n2 >= n +1) || ( m2 > m +1 && n2 == n + 1)) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? pPixel = (unsigned char *)rightDepth->imageData + i*rightDepth->widthStep + m; ?
? ? ? ? ? ? ? ? *pPixel = (n-m)*10; ?
? ? ? ? ? ? ? ? //标记有效匹配点 ?
? ? ? ? ? ? ? ? pPixel = (unsigned char *)rightValid->imageData + i*rightValid->widthStep + m; ?
? ? ? ? ? ? ? ? *pPixel = 255; ?
??
? ? ? ? ? ? ? ? m2 = m; ?
? ? ? ? ? ? ? ? n2 = n; ?
? ? ? ? ? ? } ?
? ? ? ? ? ? if (Ddynamic[m-1][n-1] >= Ddynamic[m][n -1] && Ddynamic[m-1][n -1] >= Ddynamic[m-1][n]) ?
? ? ? ? ? ? { ?
??
? ? ? ? ? ? ? ? m--; ??
? ? ? ? ? ? ? ? n--; ?
? ? ? ? ? ? }else if (Ddynamic[m-1][n] >= Ddynamic[m][n -1] && Ddynamic[m-1][n] >= Ddynamic[m-1][n -1]) ?
? ? ? ? ? ? { ??
? ? ? ? ? ? ? ? m--; ?
? ? ? ? ? ? } ?
? ? ? ? ? ? else ?
? ? ? ? ? ? { ??
? ? ? ? ? ? ? ? n--; ?
? ? ? ? ? ? } ?
??
? ? ? ? } ?
??
? ? ? ? //cvWaitKey(0); ?
? ? } ?
? ? int t2 = clock(); ?
? ? cout<<"dt: "<
? ? //统计未能匹配点的个数 ?
? ? int count = 0; ?
? ? for (int i = 0 ;i< imageHeight;i++) ?
? ? { ?
? ? ? ? for (int j= 0; j< imageWidth;j++) ?
? ? ? ? { ?
? ? ? ? ? ? pPixel = (unsigned char *)rightValid->imageData + i*rightValid->widthStep + j; ?
? ? ? ? ? ? pixel = *pPixel; ?
? ? ? ? ? ? if (pixel == 0) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? count++; ?
? ? ? ? ? ? } ?
? ? ? ? } ?
? ? } ?
? ? cout<<"rightCount: ?"<
? ? rightFilter = cvCloneImage(rightDepth); ?
? ? //7*7中值滤波 ?
? ? int halfMedianWindowSize = 3; ?
? ? int medianWindowSize = 2*halfMedianWindowSize + 1; ?
? ? int medianArray[100] = {0}; ?
? ? count = 0; ?
? ? int temp = 0; ?
? ? int medianVal = 0; ?
??
? ? for (int i = halfMedianWindowSize + 1 ;i< imageHeight - halfMedianWindowSize;i++) ?
? ? { ?
? ? ? ? for (int j = halfMedianWindowSize; j< imageWidth - halfMedianWindowSize;j++) ?
? ? ? ? { ?
? ? ? ? ? ? pPixel = (unsigned char *)rightValid->imageData + i*rightValid->widthStep + j; ?
? ? ? ? ? ? pixel = *pPixel; ?
? ? ? ? ? ? if (pixel == 0) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? count = 0; ?
? ? ? ? ? ? ? ? for (int m = i - halfMedianWindowSize ; m <= i + halfMedianWindowSize ;m++) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? for (int n = j - halfMedianWindowSize; n <= j + halfMedianWindowSize ;n++) ?
? ? ? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? ? ? pPixel2 = (unsigned char *)rightDepth->imageData + m*rightDepth->widthStep + n; ?
? ? ? ? ? ? ? ? ? ? ? ? pixel2 = *pPixel2; ?
? ? ? ? ? ? ? ? ? ? ? ? if (pixel2 != 0) ?
? ? ? ? ? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? medianArray[count] = pixel2; ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? count++; ?
? ? ? ? ? ? ? ? ? ? ? ? } ?
??
? ? ? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? ? ? //排序 ?
? ? ? ? ? ? ? ? ? ? for (int k = 0; k< count;k++) ?
? ? ? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? ? ? for (int l = k + 1; l< count;l++) ?
? ? ? ? ? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? if (medianArray[l] < medianArray[l-1] ) ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? temp = medianArray[l]; ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? medianArray[l] = medianArray[l-1]; ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? medianArray[l-1] = temp; ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? ? ? medianVal = medianArray[count/2]; ?
? ? ? ? ? ? ? ? ? ? pPixel = (unsigned char *)rightFilter->imageData + i*rightFilter->widthStep + j; ?
? ? ? ? ? ? ? ? ? ? *pPixel = medianVal; ?
? ? ? ? ? ? ? ? } ?
??
? ? ? ? ? ? } ?
? ? ? ? } ?
? ? } ?
??
? ? //两次进行DP计算,分别是左对右和右对左,从右想左扫描 ?
? ? for (int j = 0; j<= imageWidth;j++) ?
? ? { ?
? ? ? ? for (int k = 0;k <= imageWidth;k++) ?
? ? ? ? { ?
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇趋势科技一道编程题 下一篇杭电OJ――1157 Who's in the..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: