画像の赤/緑/青のピクセルのみを抽出して表示する非常に基本的なアルゴリズムを作成しました。ただし、一部の画像ではうまく機能し、一部の画像では予期しない結果が生じます。緑だけ残したいときのように、ターコイズも残しておきます。
ターコイズは緑の色合いですが、表示したいものではありません. 「視覚的に」緑色のものだけが欲しい。
アルゴリズムは、犬が座っている
植木鉢のターコイズ色を検出しました。元画像はこちら。
私のアルゴリズムは以下のとおりです (緑色のもの)。すべてのアルゴリズムは互いに似ています。
void keepGreen() {
for (int i = 0; // iterate over the pixels of the image
i < img.pixels.length;
i++) {
float inputRed = red(img.pixels[i]); // extract red
float inputGreen = green(img.pixels[i]); // extract green
float inputBlue = blue(img.pixels[i]); // extract blue
int pixel = -1;
float outputRed = -1;
float outputGreen = -1;
float outputBlue = -1;
if(inputRed <= inputGreen*0.9 && inputBlue <= inputGreen*0.9){ // check if the pixel is visually green
outputRed = inputRed; // yes, let it stay
outputGreen = inputGreen;
outputBlue = inputBlue;
}else{ // no, make it gray
int mostProminent =(int) max(inputRed, inputGreen, inputBlue);
int leastProminent =(int) min(inputRed, inputGreen, inputBlue);
int avg = (int) ((mostProminent + leastProminent) / 2);
outputRed = avg;
outputGreen = avg;
outputBlue = avg;
pixel = color(avg, avg, avg);
}
img.pixels[i] = color(outputRed, outputGreen, outputBlue); // set the pixel to the new value
}
img.updatePixels(); // update the image
image(img, WIDTH/2, HEIGHT/2, calculatedWidth, calculatedHeight); // display
}
これらのエラーを回避するにはどうすればよいですか?