Color sensor

カラーセンサ モジュール(ADJD-S371-QR999

aa

ADJD-S371-QR999

Arduino を使ったRGB値の取得

Processing : キャリブレーション

キャリブレーション用チャート

キャリブレーション用チャート

キャリブレーションの設定

キャリブレーションの設定

  • PCCSカラーカードRGB&CMYK対応表を参考にさせてもらい、上の写真の自作の器具を使って取得したRGB値と理想値の差を算出するなど、プログラムでキャリブレーションを自動化するアルゴリズムを考えました。
キャリブレーションの補正値アルゴリズムを探る

キャリブレーションの補正値アルゴリズムを探る

  • 例えば、左の2列目の数値を理想値として、右の4列に並ぶ数字がカラーセンサが出力した数値。
    理想値に補正する割合をオレンジ色の数値として算出し、アルゴリズムを考えた。

Processing : RGB to HSB

  • Arduino を使って取得したカラー値を、Processing で RGB から HSB へ変換しました。AS3でRGBとHSBを相互変換するを参考にさせていただきました。

[java]
/** RGB to HSB
* @param r (0 255)
* @param g (0 255)
* @param b (0 255)
* @return HSB([0]=hue, [1]=saturation, [2]=brightness)
*/

float[] RGBtoHSB(int r, int g, int b){

float cmax = max(r, g, b);
float cmin = min(r, g, b);
//println(“cmax:”+cmax+”, cmin:”+cmin);
float brightness = cmax / 255.0;
float hue = 0;
/*float saturation;
if(cmax != 0) {
saturation = (cmax – cmin) / cmax;
println(saturation);
}
else saturation = 0;*/
float saturation = (cmax != 0) ? (cmax – cmin) / cmax : 0;
//println(saturation);

if (saturation != 0) {
float redc = (cmax – r) / (cmax – cmin);
float greenc = (cmax – g) / (cmax – cmin);
float bluec = (cmax – b) / (cmax – cmin);

if (r == cmax) {
hue = bluec – greenc;
}
else if (g == cmax) {
hue = 2.0 + redc – bluec;
}
else {
hue = 4.0 + greenc – redc;
}

hue = hue / 6.0;

if (hue < 0) {
hue = hue + 1.0;
}
}

float[] hsb = {hue, saturation, brightness};
//println(hsb);
return hsb;
}
[/java]

- – - -

システムソフトウェアでキャリブレーション、HSB に変換したあと、下の写真のように出力し、アプリケーションソフトウェアに使っている。

システムソフトウェアでの確認

システムソフトウェアでの確認

コメントをどうぞ