色域の許容範囲は足し算・引き算で広げる

JavaScriptとcanvasを使った軽量な色抽出方法を研究しています。色域の許容範囲の計算については、単純に基準のRGBそれぞれの値に、同じ数を足し算、引き算して広げていくのが良いようです。

特定の色だけを抽出したい

赤、青のボールを検出するWebアプリを作っています。しかし、検出精度が非常に悪いです。

検出する色域の許容範囲計算が適切でないのだと思います。

どうやって許容範囲を計算した方がよいのか、検証用のWebアプリを別途作って調べました。

掛け算で許容範囲を計算

前回出した赤ボールの色の平均を基準にして、サンプル画像から赤ボールのみを抽出してみます。

まず色の抽出の許容範囲を、基準から掛け算で算出しました。

例えば基準がR:100 G:20 B:20の色であれば、以下のように掛け算で許容範囲を出します。

下限(基準×0.5)~上限(基準×1.5)
R: 50~150
G: 10~30
B: 10~30

作っているWebアプリもこの掛け算で許容範囲を計算していたのですが、改めてみると、これでは明るい色が抽出できません。

赤の明るい部分はG、Bの値も高くなるので、抽出できなくなります。

意味もなく掛け算を使ったのですが、この方法は誤りです。

足し算・引き算で許容範囲を計算

単純に基準に同じ数を足し算、引き算した方がよいです。

例えば基準をR:100 G:20 B:20の色として、プラスマイナス50で許容範囲を出します。

下限(基準-50)~上限(基準+50)
R: 50~150
G: -30~70 ※実際は0~70
B: -30~70

こちらの方が赤色のボールを抽出できます。

地味に時間をかけて調査しましたが、単純な結論でした。

暗い赤色の抽出は一工夫必要

色抽出はまだ改善の余地があります。

色抽出の許容範囲を広げていくと、赤いボールの暗い部分より先に、ほかの部分の影を検出してしまいます。

ここも色成分の違いを判断すれば、である程度精度を上げられるでしょう。次回試します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)