0

オープン フレームワークを介して xbox kinect から取得している、ビデオから低品質のピクセル ノイズを除去する方法を理解するための助けを探しています。画像の「動く」部分に対してロジックを実行して、どの色が最も動いているかを判断し、それらの領域を使用して、それらのピクセルが動いている深度も検出します。私の問題をよりよく説明するために写真を添付し​​ています。

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;
    }
}

繰り返しますが、私のコードは問題ではないことを繰り返したいと思います。私は盲目的に尋ねているのではないことを理解できるように、ここに投稿しているだけです。私が本当に必要としているのは、ピクセル化された画像を滑らかにする方法に関するいくつかの方向性です。これにより、平均がフレームごとに低品質で台無しにならなくなります。

4

1 に答える 1

1

ofxOpenCVアドオンのいくつかのメソッドを使用して、カメラからの画像を処理できます。そこには、ぼかし、歪み補正、侵食などのメソッドがあります。すでにアドオンであるため、セットアップが簡単です。openFrameworksに同梱されているopenCvExampleをご覧ください。上記の方法の詳細については、こちらをご覧ください。私があなたの問題を正しく理解していれば、画像を少しぼかすとすでに問題が解決する可能性があります。

于 2012-07-14T23:49:40.810 に答える