1

私は、青色のオブジェクト、赤色の障害物、および緑色の目的地を認識するために画像処理を行う必要があるロボット工学プロジェクトに取り組んでいます。画像処理にJavaを使用しています。

現在、Blobscanner ライブラリを使用して、赤、緑、青のオブジェクトを見つけることができました。しかし問題は、背景が純粋な黒の場合にのみ、私のアルゴリズムが正常に機能することです。私は RGB カラー モデルを使用しているため、RGB では、黒は 0,0,0、白は 255,255,255 として表され、灰色には赤の成分も含まれているため、アルゴリズムによっても検出されます。他の色を無視して赤い色を正確に特定するアルゴリズムはわかりません。

どの画像でも赤い色 (およびその他の色合い) のみを検出するのを手伝ってください。

4

2 に答える 2

2

さて、@geotheroyが投稿している間、私もこれを試してみましたが、機能し、見るのもクールです:)とにかく投稿しています...同じ基本的なアイデアを考えました...

垂直方向にドラッグしてしきい値を設定し、任意のキーを元に表示します。

PImage original, result;
float t = 0.9;


void setup() {
  //image linked from this question in processing forum
  //http://forum.processing.org/topic/help-random-distribution-of-non-overlapping-circles#25080000001787197

  original = loadImage("http://24.media.tumblr.com/tumblr_lzi0y7OpsC1r87izio1_1280.png");
  if (original != null) {
    size(original.width, original.height);
    result = createImage(original.width, original.height, RGB); 
    result = original.get(0, 0, original.width, original.height);
  }
  else
  {
    println("unable to load the image. Are you connected?");
    exit();
  }
}

void draw() {


  if (keyPressed) {
    image (original, 0, 0);
  }
  else {
    image(result, 0, 0);
  }
}

void mouseDragged() {
  t = map(mouseY, 0, height, 0, 1);
  findReds(original, t);
}


void findReds(PImage orig, float thresh) {
  result = orig.get(0, 0, orig.width, orig.height);
  result.loadPixels();
  for (int i = 0; i < result.pixels.length; i++) { 
    color c = result.pixels[i];
    float r = c >> 16 & 0xFF;
    float g = c >> 8 & 0xFF;
    float b = c & 0xFF;

    float limitR = r - r*thresh;
    if ( g < limitR && b < limitR) {
      result.pixels[i] = color(255);
    }
  }
  result.updatePixels();
}
于 2013-09-01T16:17:47.677 に答える