いつものように、このための組み込みのPHP関数があります。ほんの冗談ですよ。=)
私が見たすべての間取り図はかなり単色です。画像がロゴまたは間取り図であるかどうかをかなり推測するために、色の数と彩度を試してみることができると思います。
例えば:is the image has less than 2 or 3 colors is a floor plan.
例えば:if the sum / average of the saturation is less than X it's a floor plan.
黒と白(およびフロアプランで使用される他の同様の色)の彩度はゼロまたはゼロに非常に近いですが、ロゴは視覚的に魅力的である傾向があるため、より彩度の高い色を使用します。
16進RGBカラーの彩度を計算する簡単な関数は次のとおりです。
function Saturation($color)
{
$color = array_map('hexdec', str_split($color, 2));
if (max($color) > 0)
{
return (max($color) - min($color)) / max($color);
}
return 0;
}
var_dump(Saturation('000000')); // black 0.0000000000000000
var_dump(Saturation('FFFFFF')); // white 0.0000000000000000
var_dump(Saturation('818185')); // grey 0.0300751879699249
var_dump(Saturation('5B9058')); // green 0.3888888888888889
var_dump(Saturation('DE1C5F')); // pink 0.8738738738738738
var_dump(Saturation('FE7A15')); // orange 0.9173228346456692
var_dump(Saturation('FF0000')); // red 1.0000000000000000
var_dump(Saturation('80FF80')); // --- 0.4980392156862745
var_dump(Saturation('000080')); // --- 1.0000000000000000
imagecolorat()とimagecolorsforindex()を使用すると、画像のすべてのピクセルをループして飽和の平均を合計/計算する単純な関数を実装できます。画像の飽和レベルが定義したカスタムしきい値を超えている場合は、画像がロゴであると見なすことができます。
忘れてはならないことの1つは、解像度が高い画像ほど飽和度が高くなる(合計するピクセル数が増える)ことです。したがって、このアルゴリズムとサーバーパフォーマンスのために、すべてのサイズを変更することをお勧めします。画像を一般的な解像度(たとえば100x100または50x50)に分類して分類し、分類すると元の(サイズ変更されていない)画像を使用できます。
提供された画像を使用して簡単なテストを行いました。使用したコードは次のとおりです。
$images = array('./44199.jpg', './68614.jpg', './95205.jpg', './logo.png', './logo.gif');
foreach ($images as $image)
{
$sat = 0;
$image = ImageCreateFromString(file_get_contents($image));
for ($x = 0; $x < ImageSX($image); $x++)
{
for ($y = 0; $y < ImageSY($image); $y++)
{
$color = ImageColorsForIndex($image, ImageColorAt($image, $x, $y));
if (is_array($color) === true)
{
$sat += Saturation(dechex($color['red']) . dechex($color['green']) . dechex($color['blue']));
}
}
}
echo ($sat / (ImageSX($image) * ImageSY($image)));
echo '<hr />';
}
そしてここに結果があります:
green floor plant: 0.0151028053
black floor plant: 0.0000278867
black and white logo: 0.1245559912
stackoverflow logo: 0.0399864136
google logo: 0.1259357324
これらの例のみを使用すると、平均飽和度が0.03または0.035未満の場合、画像は床の植物であると言えます。例を追加することで、画像をもう少し微調整できます。