Poniżej znajduje się kod, którego użyłem i uzasadnienie, dlaczego zastosowałem każdy filtr. Zrobiłem wiele testów na tych funkcjach i ustawieniach, ale nadal będziesz chciał przeprowadzić kilka testów, aby zoptymalizować te ustawienia dla swojego zestawu obrazów.
Użyłem IMagick (obwoluta PHP dla ImageMagick) do pracy przy obliczaniu następujący obraz atrybuty:
$Image = new Imagick($image_path);
$height = $Image->getImageHeight();
$width = $Image->getImageWidth();
$histogram = $Image->getImageHistogram();
$num_colors = $image->getImageColors();
Stosunek wysokości do szerokości
filtrowania obrazów stosunek wysokości do szerokości eliminuje duży procent śmieci. Im bliżej ustawienia filtra na 1: 1, tym lepszy będzie ten filtr, ale zaczniesz także filtrować wiele dobrych zdjęć. Jest to jeden z najcenniejszych filtrów Mam stosowanych:
// max height to width ratio we allow on images before we junk them
$max_size_ratio = 3;
if($size_ratio > $max_size_ratio)
throw new Exception("image height to width ratio exceeded max of $max_size_ratio");
ilość kolorów
zdjęć filtracyjne poniżej 32 kolorach zazwyczaj tylko usuwa niepotrzebne obrazy, ale ja również utracone du? O czarno-białe diagramy i rysunki.
// min number of colors allowed before junking
$min_colors = 32;
if($num_colors < $min_colors)
throw new Exception("image had less than $min_colors colors");
Minimalna wysokość i szerokość
obrazy filtrowania na podstawie bezwzględnej minimalnej wysokości i szerokości, że zarówno wymiary muszą przechodzić, a także o nieco większej wartości, że co najmniej jeden wymiar musi przejść pomógł odfiltrować trochę śmieci.
// min height and width in pixels both dimensions must meet
$min_height_single = 50;
$min_width_single = 50;
if(
$width < $min_width_single
OR $height < $min_height_single
)
throw new Exception("height or width were smaller than absolute minimum");
// min height and width in pixels at least one dimension must meet
$min_height = 75;
$min_width = 75;
if(
$width < $min_width
&& $height < $min_height
)
throw new Exception("height and width were both smaller than minimum combo");
Barwa Entropia Korzystanie z histogramu obrazu
Wreszcie obliczyć entropię kolorów obrazu (jak sugeruje @Jason w swojej odpowiedzi) dla każdego obrazu w moim systemie. Kiedy wybieram obrazy do wyświetlenia, generalnie uporządkuję je w rankingu według tej entropii w malejącej kolejności. Im wyższa entropia, tym bardziej prawdopodobne jest, że obraz będzie fotografią rzeczywistości, a nie grafiki. Istnieją trzy główne problemy związane z tą metodą:
Wysoce stylizowane grafiki mają zwykle wyższe entropii powodu wielkiej zmienności głębokości kolorów i barw.
Zdjęcia, które zostały poddane photoshopped w celu uzyskania jednolitego tła i tła studyjnego, mają zazwyczaj niższą entropię z powodu dominującego jednolitego koloru.
To nie działało dobrze jako filtr absolutny ze względu na duże różnice między obrazami w moim zestawie, ich typami plików, głębi kolorów itd. Jednak w przypadku wybrania najlepszego zdjęcia z mały podzbiór w całym moim zestawie. Przykładem może być wybór obrazu wyświetlanego jako obraz główny ze wszystkich obrazów znalezionych na jednej stronie.
Oto funkcja użyć do obliczenia obrazu entropię:
function set_image_entropy()
{
// create Imagick object and get image data
$Image = new Imagick($this->path);
$histogram = $Image->getImageHistogram();
$height = $Image->getImageHeight();
$width = $Image->getImageWidth();
$num_pixels = $height * $width;
// calculate entropy for each color in the image
foreach($histogram as $color)
{
$color_count = $color->getColorCount();
$color_percentage = $color_count/$num_pixels;
$entropies[] = $color_percentage * log($color_percentage, 2);
}
// calculate total image color entropy
$entropy = (-1) * array_sum($entropies);
return $entropy;
}
Można użyć biblioteki GD, aby móc przetwarzać surowe dane obrazu i sprawdzić takie rzeczy jak krawędzie, Obraz podobieństwa i inne rzeczy. Chciałbym opublikować coś bardziej precyzyjnego, ale php.net wydaje się być w tym momencie niedostępny. Użyłem GD wcześniej, aby wstawić znaki wodne i tym podobne, jest to trochę skomplikowane, ale można też z nim wiele zrobić. –
co powiesz na sprawdzenie 'exif'? - http://php.net/manual/en/book.exif.php – ajreal