前回RGB値を元に類似画像を検索しましたが、やはり人間の感覚で言うとHSVを使って画像を検索したほうがより近い画像を得られると考え、下準備として RGB を HSV に変換するプログラムを作りました。
<?php
//RGB値(0~255)
$rgb = array(
"red" => 167,
"green" => 65,
"blue" => 189
);
$hsv = rgb2hsv($rgb);
print_r($hsv);
function rgb2hsv($rgb){
$r = $rgb['red'] / 255;
$g = $rgb['green'] / 255;
$b = $rgb['blue'] / 255;
$max = max($r, $g, $b);
$min = min($r, $g, $b);
$v = $max;
if($max === $min){
$h = 0;
} else if($r === $max){
$h = 60 * ( ($g - $b) / ($max - $min) ) + 0;
} else if($g === $max){
$h = 60 * ( ($b - $r) / ($max - $min) ) + 120;
} else {
$h = 60 * ( ($r - $g) / ($max - $min) ) + 240;
}
if($h < 0) $h = $h + 360;
$s = ($v != 0) ? ($max - $min) / $max : 0;
$hsv = array("h" => $h, "s" => $s, "v" => $v);
return $hsv;
}
逆にHSVからRGBを割り出す場合はこちらを御覧下さい。
計算式は Wikipedia を参考にしています。
Similar Posts:
- [PHP]円グラフを表示する(GD)
- array_slice() の落とし穴
- [PHP]「もしかして: ~」スペルミス時の修正候補を表示する
- [PHP]HSV(HSB)色空間を比較して似た色合いの画像を検索する
- [PHP]似た色合いの画像をRGB値をもとに探す
- [PHP]文章中の単語に自動でリンクを貼る(キーワードリンク)
- [PHP]三次元空間での2点を結ぶ線分の中点
- [PHP]最小公倍数・最大公約数を求める(ユークリッドの互除法)