写真のウェブサイトで色の機能で検索しました。これを行うために、1 つの画像のすべてのピクセルをループ処理し、上位 10 個をデータベースに記録しました。私が抱えている問題は、私の写真には人物の被写体が含まれているため、検索者は背景 (空、舗装、草など) ではなく、被写体の色を実際に検索していることです。これを完全に取り除くのは非常に難しいことはわかっていますが、より良い結果を得るには、色を少し変更する必要があると考えています.
1 つの写真のこの例を参照してください。
左の例は、すべてのピクセルを収集して行っていたことです。黒とグレーが上位 3 色を占め、ピンクの色合いが 4 位、背景の女の子のドレスのネイビー ブルーが 5 位でした。ピクセルをループする方法を変更して、緑色のボックス (右) 内の色のみを選択できれば、私のコレクションにわずかな違いが生じると思います。これは私が数学を見るのに苦労しているところです。
すべてのピクセルをループするために、これを行っていました:
$size = @getimagesize($imageFile);
for ($x = 0; $x < $size[0]; $x += $granularity) {
for($y = 0; $y < $size[1]; $y += $granularity) {
// do stuff here
}
しかし、これを変更して、上部と下部を約 5% オフにし、側面を約 8 ~ 10% オフにしてから、新しい選択範囲をループする必要があります。
私はこれを開始しましたが、計算が奇数または1.030044858のような数値を返すかどうかわからなかったため、停止しました。
これは私がどこまで到達したかであり、誰かがそれを片付けて一線を越えてくれることを願っています:
$granularity = 4;
$granularity = max(1, abs((int)$granularity));
$size = @getimagesize($imageFile);
$sizeX = $size[0];
$sizeY = $size[1];
$xPerCent = 8; // for me to set & adjust
$yPerCent = 5; // for me to set & adjust
$xSelectionWidth = ($sizeX/100) * $xPerCent;
$xSelectionWidth = $sizeX - ($xSelectionWidth * 2);
$xSelectionHeight = ($sizeY/100) * $yPerCent;
$xSelectionHeight = $sizeY - ($ySelectionHeight * 2);
$xSelectionStart = 0;
$xSelectionEnd = 0;
$ySelectionStart = 0;
$ySelectionEnd = 0;
for($x = 0; $x < $size[0]; $x += $granularity) {
for($y = 0; $y < $size[1]; $y += $granularity) {
// do stuff here
}
}