2012-07-14 69 views
0

我正在尋找一些幫助搞清楚如何從視頻中刪除一些低質量的像素噪聲,我通過開放框架從xbox kinect獲得。我運行的邏輯是針對圖像的「移動」部分,確定哪種顏色移動最多,並使用這些區域來檢測這些像素的移動深度。我附上了一張照片,試圖更好地解釋我的問題。如何從xKinect視頻中​​刪除像素噪聲?

http://imago.bryanmoyles.com/xxw80

我當然知道代碼將被要求,所以我會後我有什麼,到目前爲止,但我正在尋找比什麼都重要,可用於平滑像素化的一個好的算法用C++

for(int y = 0; y < kinect.height; y += grid_size) { 
    for(int x = 0; x < kinect.width * 3; x += 3 * grid_size) { 
     unsigned int total_r = 0, total_b = 0, total_g = 0; 

     for(int r = 0; r < grid_size; r++) { 
      for(int c = 0; c < grid_size; c++) { 
       total_r += color_pixels[(y * kinect.width * 3 + r * kinect.width * 3) + (c * 3 + x + 0)]; 
       total_b += color_pixels[(y * kinect.width * 3 + r * kinect.width * 3) + (c * 3 + x + 1)]; 
       total_g += color_pixels[(y * kinect.width * 3 + r * kinect.width * 3) + (c * 3 + x + 2)]; 
      } 
     } 

     unsigned char average_r = total_r/(grid_size * grid_size), 
      average_b = total_b/(grid_size * grid_size), 
      average_g = total_g/(grid_size * grid_size); 

     for(int r = 0; r < grid_size; r++) { 
      for(int c = 0; c < grid_size; c++) { 
       color_pixels[(y * kinect.width * 3 + r * kinect.width * 3) + (c * 3 + x + 0)] = average_r; 
       color_pixels[(y * kinect.width * 3 + r * kinect.width * 3) + (c * 3 + x + 1)] = average_b; 
       color_pixels[(y * kinect.width * 3 + r * kinect.width * 3) + (c * 3 + x + 2)] = average_g; 
      } 
     } 
    } 
} 

for(int y = 0; y < kinect.height; y++) { 
    for (int x = 0; x < kinect.width * 3; x += 3) { 
     int total_difference = abs(color_pixels[y * kinect.width * 3 + x + 0] - rgb[0]) 
      + abs(color_pixels[y * kinect.width * 3 + x + 1] - rgb[1]) 
      + abs(color_pixels[y * kinect.width * 3 + x + 2] - rgb[2]); 

     unsigned char defined_color; 

     if(total_difference < 40) { 
      defined_color = (unsigned char) 255; 
     } else { 
      defined_color = (unsigned char) 0; 
     } 

     color_pixels[y * kinect.width * 3 + x + 0] = defined_color; 
     color_pixels[y * kinect.width * 3 + x + 1] = defined_color; 
     color_pixels[y * kinect.width * 3 + x + 2] = defined_color; 
    } 
} 

再次在照片的區域,我想重申,我的代碼是沒有問題的,我只是在這裏張貼,讓你明白我並不只是一味的要求。我真正需要的是如何平滑像素化圖像的一些方向,以便我的平均值不會因質量差而逐幀混亂。

回答

1

您可以使用ofxOpenCV插件的某些方法處理來自相機的圖像。在那裏你會有模糊,不破壞,侵蝕等方法。它易於設置,因爲它已經是一個插件。看看應該與openFrameworks一起打包的openCvExample。有關上述方法的更多信息,請參閱here。如果我正確理解你的問題,那麼圖像上的一點模糊可能已經解決了你的問題。