Załóżmy, że w galerii znajduje się 10 000 obrazów JPEG, PNG, jak znaleźć wszystkie obrazy z podobnymi paletami kolorów na wybranym obrazie posortowane według malejącego podobieństwa?Znajdź obrazy z podobną paletą kolorów za pomocą Pythona
Odpowiedz
Utwórz histogram kolorów dla każdego obrazu. Następnie, gdy chcesz dopasować obraz do kolekcji, po prostu uporządkuj listę, jak blisko histogram jest do histogramu wybranego obrazu.
Liczba wiaderek zależy od tego, jak dokładnie chcesz być. Typ danych połączonych w celu utworzenia segmentu definiuje sposób ustalania priorytetów wyszukiwania.
Na przykład, jeśli jesteś najbardziej zainteresowany w Hue, to można określić, które wiadro swój każdy pojedynczy piksel obrazu idzie w jak:
def bucket_from_pixel(r, g, b):
hue = hue_from_rgb(r, g, b) # [0, 360)
return (hue * NUM_BUCKETS)/360
Jeśli chcesz także ogólny mechanizm dopasowywania, to można wybierz wiadro w oparciu o pełną wartość RGB.
Korzystając z PIL, można użyć wbudowanej funkcji histogram
. Histogramy "bliskości" można obliczyć za pomocą dowolnej miary odległości. Na przykład, odległość L1 może być:
hist_sel = normalize(sel.histogram())
hist = normalize(o.histogram()) # These normalized histograms should be stored
dist = sum([abs(x) for x in (hist_sel - hist)])
L2 będzie:
dist = sqrt(sum([x*x for x in (hist_sel - hist)]))
Normalize
tylko zmusza sumę histogramu równa jakąś stałą wartość (1,0 działa poprawnie). Jest to ważne, aby duże obrazy można było poprawnie porównać z małymi obrazami. Jeśli zamierzasz używać odległości L1, powinieneś użyć miary L1 w normalize
. Jeśli L2, to L2.
@Frank, dziękuję za poradę. Czy możesz podać mi przykładowy kod w Pythonie? Wbudowana funkcja histogramu() PIL zwraca listę, jak określić, jak blisko są dwa histogramy obrazów? – jack
@Frank, wygląda na to, że wymaga 10 000 obliczeń odległości podczas wybierania zdjęć o podobnym histogramie na 10 000 kandydatów? czy możliwe jest powiązanie wartości numerycznych z każdym obrazem i zapisanie ich w bazie danych, więc porównanie można uprościć do niektórych zapytań sql? – jack
@jack, 10,000 calcs nie jest tak drogie. Najlepszym sposobem na przyspieszenie kodu nie jest redukcja histogramów do liczb całkowitych (co nie może być wykonane tak, jak myślisz), ale po prostu ** buforowanie ** wyników. Buforuj kolejność sortowania (na obraz) w bazie danych lub buforuj ją w pamięci. Upewnij się, że przechowujesz histogram w bazie danych lub w pamięci, aby przebudowywanie pamięci podręcznej sortowania nie było drogie. –
Twoje pytanie zostało już odebrane. Spójrz na te inne tak odpowiada:
Powinien być komentarzem ... – ChristopheD
Nie powiedziałbym, że odpowiedziano. Utknął w PIL-landzie. –
- 1. Znajdź najlepsze parametry montaż za pomocą Pythona
- 2. Krzywe wypełnione gnuplotem z paletą
- 3. Znajdź hiperłącza w tekście za pomocą Pythona (związane z twitterem)
- 4. Znajdź zduplikowane obrazy różnych rozmiarów
- 5. Znajdź i zamień wartości w XML za pomocą Pythona
- 6. Wykrywanie kolorów za pomocą C#
- 7. Znajdź nazwy kolorów dla kolorów zbliżonych do palety kolorówBrewer
- 8. Jak ustawić selektor kolorów otwarty za pomocą wprowadzania kolorów HTML5?
- 9. Znajdź dokładne dopasowanie za pomocą wyszukiwania pełnotekstowego.
- 10. Odczytaj plik z serwera za pomocą ssh za pomocą pythona
- 11. Zaawansowane mieszanie kolorów za pomocą GDI +
- 12. Różne paski kolorów za pomocą wielu serii
- 13. Skrobanie danych z Facebooka za pomocą Pythona
- 14. Jak zmniejszyć paletę kolorów za pomocą PIL
- 15. Jak przekonwertować przestrzeń kolorów za pomocą JMagick?
- 16. Sposób określania różnych kolorów za pomocą ggplot
- 17. Zmienianie kolorów linii za pomocą ggplot()
- 18. Drukowanie kolorów w terminalu Pythona
- 19. Jak porównać obrazy podobieństwa za pomocą java
- 20. Identyfikacja kodu kolorów arkusza Excel za pomocą pakietu XLRD
- 21. Zastąpić niedostępne obrazy za pomocą CSS?
- 22. Przekierowanie wejścia za pomocą pythona
- 23. Parsowanie SQL za pomocą Pythona
- 24. Jak porównać dwa obrazy za pomocą Node.js
- 25. Jak ładować obrazy za pomocą operatora sieci?
- 26. Wykrywanie anomalii za pomocą Pythona
- 27. Generowanie palety kolorów z obrazu za pomocą ImageMagick
- 28. Wyświetlacz TextView z 2 oddzielnych kolorów za pomocą maski
- 29. Skrobanie ekranu za pomocą Pythona
- 30. Narysuj teren za pomocą pythona?
Możliwy duplikat: http://stackoverflow.com/questions/593925/how-do-i-find-images-with-a -similar-color-using-python-and-pil – ChristopheD
Tak, ale nie ma dobrych odpowiedzi na to pytanie. :-) –
Istnieje wiele podobnych dyskusji tutaj: http://stackoverflow.com/questions/1034900/near-duplicate-image-detection/1048723#1048723 – Paul