Kiedyś napisałem program który radził sobie z lekkim rozmyciem konturów bez strzelania z sieci neuronowych, kod był beznadziejny, algorytm też taki w kit, rozwiązanie chałupnicze i pewnie nikt tak nie robi, ale działał. Liczyłem sumy pikseli w linii, osobno dla każdego koloru, sumy par kolorów, stosunki kolorów w każdym pixcelu, sumy dla najbardziej znaczących bitów, dla każdego koloru, | i & na kolorach,ilość pikseli spełniających kryterium xyz itd, i jakieś podobne obliczenia dal kilku pikseli w lini, tu trzeba "uważać" bo np. liczenie sum lub lub średnich r g b da te same informacje co sumy liczone dla całej linii, tak samo
Kopiuj
suma[0 do n] (n.R - n.B) == suma[0 do n](n.R) - suma[0 do n](n.B)
wiec to też nie nie się nowych informacji w stosunku do sum, nawet jeśli wynik jest inny.
A potem sprawdzałem czy drugi obraz spełnia kryteria z wybraną dokładnością, ważne jest to że jeśli korzystasz z dokładności to powinieneś sprawdzać błąd bezwzględny i procentowy np. kolor 'czarny' to rgb(1,1,1) i delikatny szum będzie miał olbrzymią wartość procentową, z jasnymi kolorami jest na odwrót.
Można to wszystko napisać ze złożonością O(n), fajną optymalizacją było zaczynanie sprawdzania od ostatnio odrzuconego fragmentu i wybieranie linii w innym porządku niż jedna po drugiej. Program chodził w jednym wątku dla ~1mln pikseli w czasie rzędu dziesiątek od dziesiątek ms do kilku s(miałem pesymistycznie n^2 :P ) wiec się nadaje do kilku obrazów.
Możesz, też podzielić obrazek na kwadraty, obliczyć dla każdego jakieś parametry charakterystyczne potem policzyć funkcje aproksymujące dla tych paramentów np w po przekątnej itd. Potem porostu sprawdzasz czy obraz się w t funkcje łapie. To by była taka sieć neuronowa bez sieci neuronowej, szału może nie będzie ale jest proste i powinno działać :D
Ogólnie to są takie chałupnicze metody, może ktoś Ci podpowie jak to się robi profesjonalnie , bo na pewno są na to algorytmy :P