前回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]最小公倍数・最大公約数を求める(ユークリッドの互除法)