前提
ProcessingでREALSENSEを動かすサンプルをいじっています。
REALSENSE D455を使用しており、奥行き情報が映像でわかるためにgetDepthImage()を描画しています。
実現したいこと
このライブラリでは奥行きの最大値が16mまで設定できるらしいのですが
getDepthImage()で描画する際に、最大値の設定がうまくいっておらず
約6mが奥行きの最大値に設定されているように見られます。
下画像がProcessingを実行したときの画像です。
図1
下画像(図2)のように0.5~16mの範囲で色が変わるようにgetDepthImage()で描画するためにはどのように設定をすればいいのか
(正確には画像では廊下の長さの関係で奥行きが分かりにくくなってしまったため最大値を13.1mに設定している)
~追記~
距離が0.5mでは白、16mでは黒になるように設定したいということです。
図1,2の画像は家の廊下をデプス画像にしています。
家の廊下は7,8m先に壁があるため
図2では壁の色が灰色になっていますが、
図1では5,6m先が真っ暗になってしまっているためこれをどうにか設定したいというのが私の希望です。
分かる方、ぜひ教えてください。
よ
試したこと
サンプルの「ControlThresholdFilter」が問題解決に近いプログラムだと思い、数値を変えてみたが理想通りにならなかった。
私の勘違いでなければ以下のような変更で図2と同じ描画がされると考える。
ControlThresholdFilter.pde
import ch.bildspur.realsense.*; import ch.bildspur.realsense.type.*; import ch.bildspur.realsense.processing.*; RealSenseCamera camera = new RealSenseCamera(this); RSThresholdFilter thresholdFilter; float minDistance = 0.0f; float maxDistance = 4.0f; float size = 0.5f; // ここを以下のように変更 // float minDistance = 0.5f; // float maxDistance = 13.1f; // float size = 12.6f; boolean filterOn = false; void setup() { size(1280, 720, FX2D); // enable depth stream camera.enableDepthStream(1280, 720); // enable colorizer to display depth camera.enableColorizer(ColorScheme.Warm); // add threshold filter thresholdFilter = camera.addThresholdFilter(); camera.start(); } void draw() { background(0); // adjust filter float filterCenter = map(mouseX, 0, height, minDistance, maxDistance); if (filterOn) { thresholdFilter.setMinDistance(constrain(filterCenter - (size * 0.5f), minDistance, maxDistance - size)); thresholdFilter.setMaxDistance(constrain(filterCenter + (size * 0.5f), minDistance + size, maxDistance)); } // read frames camera.readFrames(); // show color image image(camera.getDepthImage(), 0, 0, width, height); } void keyPressed() { thresholdFilter.setMinDistance(minDistance); thresholdFilter.setMaxDistance(maxDistance); filterOn = !filterOn; }
変更した後の実行画面が図3である。
※キー入力、マウス操作を行った後の実行結果である。
https://github.com/cansik/realsense-processing
また、この下にマニュアルが書いてあり、フィルターの設定のところでいろいろいじってみたが理想通りにいかなかった。
↑サイトの自分がいじったところのコピーを貼っておきます。
// include the following package for the types import ch.bildspur.realsense.type.*; // list of all supported filters camera.addThresholdFilter(0.0f, 1.0f); camera.addSpatialFilter(2, 0.5f, 20, 0); camera.addDecimationFilter(2); camera.addDisparityTransform(true); camera.addHoleFillingFilter(HoleFillingType.FarestFromAround); camera.addTemporalFilter(0.4f, 20, PersistencyIndex.ValidIn2_Last4); // The following filters have not been tested yet: camera.addUnitsTransform(); camera.addZeroOrderInvalidationFilter();
// include the processing package import ch.bildspur.realsense.processing.*; // in setup RSThresholdFilter thresholdFilter = camera.addThresholdFilter(); // in draw thresholdFilter.setMinDistance(5.0); thresholdFilter.setMaxDistance(8.0);
プログラミング初心者で申し訳ないですが、わかる方ご協力お願いします。
あなたの回答
tips
プレビュー