一如既往,有一個built-in PHP function for this。只是在開玩笑。 =)
我見過的所有平面圖都非常單調,我認爲你可以用顏色和顏色飽和度來玩一個很好的猜測,就是圖像是一個標誌或一個平面圖。
如: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.
黑色和白色(以及在平面圖中使用其他類似的顏色)的飽和是零,或者非常接近於零,而標誌往往更具視覺吸引力,因此使用更飽和的顏色。
下面是一個簡單的函數來計算一個十六進制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()你可以實現一個簡單的函數,環槽的所有圖像和和的像素/計算飽和度的平均值。如果圖像的飽和度高於您定義的自定義閾值,則可以假定圖像是徽標。
有一件你不應該忘記的是,具有更高分辨率的圖像通常會有更多的飽和度(更多的像素進行求和),所以爲了這個算法以及爲了您的服務器性能,它會是明智地將所有圖像調整爲通用分辨率(比如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,你可以調整通過添加額外的例子它遠一點。
你可能會更適合在自由程序員的網站上尋找;這有點超出了單個問題的範圍。 – Amber 2009-12-20 08:32:34
除非這些平面圖文檔易於表徵,否則您不需要自由程序員,因爲您需要一個充滿博士學位的研發部門。沒有人會在PHP中寫出這樣的想法。 – 2009-12-20 08:35:53
http://www.townsvillefloorplans.com.au/images/logo.jpg既是...... – 2009-12-20 11:59:44