blog

Ewolucja AutoSplitter

Opublikowano: 27 października 2026

Ewolucja AutoSplitter

2012 – Wykrywanie narożników

Kiedy zacząłem pracować nad AutoSplitterem, nie miałem żadnego konkretnego punktu odniesienia. Jedynym oprogramowaniem, które wypróbowałem, był podstawowy program do skanowania dostarczony przez producenta mojego skanera płaskiego, a jego możliwości były naprawdę ograniczone.

Chciałem stworzyć coś lepszego, a moim jedynym zestawem testowym były mój własny skaner i moje własne rodzinne zdjęcia. Nie były przyklejone do pożółkłego albumu — to był po prostu stos zdjęć w kartonowym pudełku.

Założyłem więc, że skanowanie zdjęć na białawym tle skanera płaskiego będzie jedynym przypadkiem użycia dla niemal wszystkich.

To zainspirowało pierwszą wersję mojego algorytmu wykrywania zdjęć. Zadanie wydawało się oczywiste: na zeskanowanym obrazie zawierającym wiele zdjęć znaleźć je, ustalając, które piksele należą do zdjęcia, a które do szyby skanera. Wszystkie zdjęcia są prostokątne i mają (zazwyczaj) ostre narożniki. W pobliżu narożnika zdjęcia 25% sąsiednich pikseli będzie należeć do zdjęcia, a 75% do tła. Tło jest zwykle prawie białe, natomiast zawartość zdjęcia na ogół znacznie różni się od bieli.

Analizowanie grup pikseli zgodnie z tą logiką pozwala wykrywać narożniki… przynajmniej najczęściej. Niektóre wykrycia są fałszywie pozytywne (w rzeczywistości nie są to narożniki), a niektóre fałszywie negatywne (niewykryte narożniki). Wykryte narożniki można łatwo sklasyfikować jako lewy górny, prawy górny, lewy dolny lub prawy dolny — zależnie od tego, które obszary wokół piksela narożnika wyglądają na tło, a które na część zdjęcia.

Dwa lub trzy narożniki mogą wystarczyć do dość dokładnego określenia położenia zdjęcia. To podejście sprawdzało się całkiem dobrze w przypadku moich zestawów zdjęć. Niektóre niewykryte narożniki powodowały problemy, na przykład przypadkowe połączenie kilku zdjęć, ale i tak było to znacznie lepsze niż fabryczne oprogramowanie dołączone do skanera.

Na marginesie: wykrywanie krawędzi to kolejny dobry sposób na znajdowanie prostokątnych kształtów na obrazie. Nie mogę powiedzieć, że nigdy nie odgrywało roli w moich algorytmach, ale było wykorzystywane wyłącznie jako pomocniczy sposób oceny wykrytych zdjęć. Nigdy nie stanowiło głównej metody.


2019 – Kwadraty i bloki… oraz narożniki

Sąsiadujące kwadraty wykryte przez algorytm wykrywania zdjęć AutoSplitter – widok debugowania

Jesienią 2019 roku, po latach kolejnych prób ulepszania algorytmu automatycznego wykrywania, wciąż nie poczyniłem większych postępów. Udało mi się nieco poprawić wyniki przez dopracowanie metody wykrywania narożników, ale zmiany nigdy nie były rewolucyjne. Dodałem kilka warstw filtrów do algorytmu wykrywania narożników, aby działał nawet wtedy, gdy użytkownicy nie skanowali na białym tle. To całkiem pomogło, ale nie wystarczająco.

Kolejnym dużym krokiem naprzód była „metoda kwadratów”. W informatyce nazywa się to etykietowaniem spójnych składowych i dopasowaniem otoczki wypukłej. Pomysł jest dość prosty: za pomocą różnych filtrów oznaczyć wszystkie piksele obrazu wejściowego jako tło albo zdjęcie, a następnie znaleźć grupy pikseli, które wyglądają na części zdjęcia. Sąsiadujące kwadraty łączy się w grupy; każda z nich w przybliżeniu obrysowuje wykryte zdjęcie.

To podejście działało całkiem dobrze przy nierównomiernym tle. Znacznie zaostrzyłem algorytm wykrywania narożników, aby wykrywał tylko oczywiste zdjęcia. Metoda kwadratów przetwarzała potem pozostałe, niewykryte obszary, aby znaleźć inne zdjęcia. Niestety nie udało mi się ustalić, jak dokładnie wykrywać kąty obrotu zdjęć, więc zawsze były wykrywane bez obrotu (pod kątem 0 stopni). Mimo to był to duży postęp w porównaniu z podejściem opartym wyłącznie na narożnikach.


Lato 2026 – Kwadraty w końcu się obracają

Po wielu nieudanych próbach dalszego ulepszania moich metod automatycznego wykrywania w końcu udało mi się określić kąty obrotu wykrytych grup kwadratów. Skłoniło mnie to do porzucenia wykrywania kwadratów, które było główną przyczyną wielu fałszywych alarmów i połączonych wykryć. Jednak po raz kolejny nie udało mi się dalej poprawić wyników.


Wczesna jesień 2026 – Głębokie uczenie

Sąsiadujące kwadraty wykryte przez algorytm wykrywania zdjęć AutoSplitter – widok debugowania

Nie było już dokąd pójść. Kwadraty i narożniki nie mogły zapewnić lepszych wyników. Niezależnie od tego, jak bardzo dostrajałem algorytm, pozostawał jeden nieunikniony fakt: znajdowanie prostokątnych obiektów na obrazie jest ŁATWE. Ustalenie, które piksele należą do zdjęć, jest trudne — BARDZO trudne. Wszystko zależy od tej prostej binarnej klasyfikacji każdego piksela. Nie ma znaczenia, jak dobrze dostrojona jest metoda wykrywania prostokątów, jeśli nie potrafisz dokładnie określić, które piksele należą do prostokąta, prawda?

Głębokie uczenie wykorzystuje sieci neuronowe — algorytmy, które do pewnego stopnia naśladują ludzki mózg. Trenowanie sieci neuronowych wymaga wielu danych przykładowych (i odpowiadających im odpowiedzi), które pozwalają uczyć i oceniać sieć. Trenowanie systemu wykrywania zdjęć na zeskanowanych obrazach nie jest łatwe. W internecie nie da się znaleźć całej ciężarówki zeskanowanych zdjęć. Nie mogłem ich też uzyskać od klientów, ponieważ oprogramowanie NIGDY nie przesyłało zeskanowanych obrazów, a klienci z pewnością nie zgodziliby się na taki proces.

Głębokie uczenie daje odpowiedź na niezwykle ważne pytanie: CZY TEN PIKSEL NALEŻY DO ZDJĘCIA, CZY NIE? Jeśli można na nie odpowiedzieć wiarygodnie, prosty algorytm etykietowania spójnych składowych (który lubię nazywać „kwadratami”) może bardzo niezawodnie wykrywać zdjęcia.

Znalazłem sposób na uzyskanie wystarczającej liczby danych przykładowych do trenowania sieci neuronowej bez naruszania czyjejkolwiek prywatności. Dzięki temu AutoSplitter bardzo niezawodnie wykrywa zdjęcia od wersji 1.16.1.


Przyszłość

Na razie nie wiem, co będzie dalej. Prawdopodobnie trzeba dopracować dane treningowe, aby jeszcze bardziej ulepszyć automatyczne wykrywanie. Wyniki z pewnością nie są jeszcze w 100% dokładne i prawdopodobnie nigdy nie będą. W każdym razie, jeśli zobaczę sposób na ich poprawę, spróbuję.