4

写真のウェブサイトで色の機能で検索しました。これを行うために、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
    } 
} 
4

1 に答える 1

0

写真内の何かを無視したい場合は、白黒に変換して最大の白い領域を取得することをお勧めします (変換の詳細を設定して、まだ白ではない色がすべて黒として取得されないようにする必要があります)。

私は赤を意味し、肌の色は白、紫は黒に設定する必要があります。この場合、背景と暗い表面は黒になります。http://www.switchonthecode.com/tutorials/csharp-tutorial-convert-a-color-image-to-grayscaleをお読みください1。

これにより、画像の適切な部分に焦点を合わせることができます。

B&W フォーム認識が正確であるほど、色を付ける対象をより適切に識別できます。パターン認識の詳細については、 http://en.wikipedia.org/wiki/Pattern_recognitionを参照してください。

元の画像で見たい座標のセットを取得します。

申し訳ありませんが、私は PHP の人ではありません。このように具体的に説明することはできませんが、これがお役に立てば幸いです...

于 2012-07-26T13:45:42.783 に答える