Porównywanie rozmiarów obrazków

0

Szukam algorytmu (albo jakiegoś pomysłu) jak wykonać porównywanie obrazków. O co chodzi? za pomocą funkcji glob, z dwóch rożnych katalogów, wczytuje 2 różne zestawy zdjęć do tablicy np. zdjecia1 i zdjecia2. No i teraz chce wybrać po jednym zdjęciu z tych tablic, które mają jak najbardziej podobne rozmiary. Przedstawiam mój dotychczasowy algorytm, jakoś działa, ale pewnie nie jest to najbardziej dokładne/najszybsze rozwiązanie. Dodatkowo w algorytmie interesują mnie tylko zdjęcia pionowe, czyli te co ich wysokość jest większa od szerokości.

$a_zdjecia1=glob("images/galerie1/*.jpg");
$a_zdjecia2=glob("images/galerie2/*.jpg");
	
	$temp_size=1000;	//jakas tymczasowa zmienna
	
	//smigamy po zdjeciach z 1 tablicy
	foreach($a_zdjecia1 as $v_zdjecie1)
	{
		$a_wymiary1=getimagesize($v_zdjecie1);
		
		//sprawdzamy czy nie jest poziome
		if($a_wymiary1[1]>$a_wymiary1[0])
		{
			//smigamy po zdjeciach z drugiej tablicy
			foreach($a_zdjecia2 as $v_zdjecie2)
			{
				$a_wymiary2=getimagesize($v_zdjecie2);
				
				//sprawdzamy czy nie jest poziome
				if($a_wymiary2[1]>$a_wymiary2[0])
				{
					$roznica_wysokosci=abs($a_wymiary1[1]-$a_wymiary2[1]);
					$roznica_szerokosci=abs($a_wymiary1[0]-$a_wymiary2[0]);
					$roznica_calkowita=$roznica_wysokosci+$roznica_szerokosci;
					
					if($roznica_calkowita==0)
					{
						echo "hurra, zdjecia v_zdjecie1 i v_zdjecie2 maja identyczny rozmiar";
					}
					else
					{
						if($roznica_calkowita<$temp_size)
						{
							$temp_size=$roznica_calkowita;
							$temp_foto1=$v_zdjecie1;
							$temp_foto2=$v_zdjecie2;
						}
					}
				}
			}
		}	
	}

	echo "zdjecia $temp_foto1 i $temp_foto2 sa podobne do siebie";
0

nie wiem czy są do tego gotowe algorytmy, ale najsensowniej wydaje mi się porównywać różnicę pola zajmowanego przez obrazy:

$roznica_calkowita=abs($a_wymiary1[0]*$a_wymiary2[0] - $a_wymiary1[1]*$a_wymiary2[1]);

ewentualnie rozszerzyć to o sprawdzanie czy proporcje wysokości i szerokości są podobne.

$proporcje = 1 + abs(1-($a_wymiary1[0]*$a_wymiary2[1])/($a_wymiary1[1]*$a_wymiary2[0]));

im proporcje są bardziej zbliżone, tym $proporcje jest bliższe 1 (ale zawsze >= 1).
można to połączyć:

$roznica_calkowita=$roznica_calkowita*$proporcje*$wspolczynnik

gdzie $wspolczynnik to dodatnia liczba (może być zmiennoprzecinkowa) która określa jak wielką wagę przywiązywać do różnicy w proporcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1