? ? 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++) ?
? ? ? ? { ?