Otrzymać jak najbliższy obraz do oryginału za pomocą grafik wektorowych

0

Przedstawienie problemu

Mam zbiór 105 grafik wektorowych. Te grafiki są w formacie SVG(jakby to miało jakieś znaczenie). Te grafiki to na przykład: koło, trójkąt, kwadrat, prostokąt, grafika samolotu, grafika gwizdy, grafika czołgu, grafika tarczy oraz wiele innych. Ogólnie na potrzeby wyobrażenia jest to zbiór ikon/symboli.

Operacje jakie możemy wykonać na tych grafikach wektorowych są następujące:

  • Przesuwanie- czyli po prostu przemieszczanie z miejsca na miejsce,
  • Skalowanie - czyli zwiększanie lub zmniejszanie danego elementu,
  • Transformacja - czyli możemy z kwadrata(kwadratu? nie jest dobry z języka polskiego) zrobić prostokąt. W skrócie manipulować osią x lub y danego elementu,
  • Obracanie - czyli to co mówi nazwa obrócić dany element o ileś stopni,

Spośród 105 mogę wybrać tylko 40 grafik wektorowych! Nie mniej nie więcej! 40 wybranych grafik działa w systemie warstw. Taki system jest znany z różnych programów graficznych typu: Photoshop lub gimp i to co tutaj chcę opisać działa tak samo jak w tych nadmienionych programach. Takich warstw może być tylko 40! To znaczy, że na każdej warstwie może znajdować się tylko jedna grafika wektorowa! Grafika znajdująca się w najwyższej warstwie jest widoczna dla użytkownika jako pierwsza. Grafika znajdująca się na warstwie najniższej jest widziana jako ostatnia. Oczywiście, możemy bawić się warstwami. W skrócie zmieniać ich kolejność. Ostatnia może być pierwszą, a pierwsza ostatnią itd...

Grafiki są umieszczane na scenę o rozmiarach 966px na 966px. Jeżeli umieścimy grafikę na scenie i przesuniemy ją poza obszar sceny to taki element nie jest widoczny. W skrócie, widoczne jest tylko to co jest w granicach takiej sceny.

To co chce uzyskać

Ogólnie, chce wygenerować jak najbliższy obraz do oryginału używając tylko grafik wektorowych i to jest główny problem jaki chce rozwiązać. Brzmi prosto, ale jak jest w praktyce?

research na własną rękę

Kilkukrotnie pytałem chatGPT z dokładnym opisem zadania w jaki sposób ten problem rozwiązać. ChatGPT doszedł do następującej konkluzji:

Użyj algorytmu genetycznego na przykład gotowych bibliotek: pyGAD lub DEAP. Dobrze opisz metodę "fitness" w algorytmie genetycznym, używając SSIM(structural similarity index) lub MSE(mean squared error). Dopisał jeszcze użycie: Python3 oraz open-cv/PIL.

Ogólnie nie podoba mi się ta sugestia. z kilku powodów:

Skąd miałbym wiedzieć jaki zbiór 40 elementów da mi najbliższy wynik?

Tutaj ewidentnie potrzebne jest napisanie "małego" AI, który będzie wybierał najlepszy podzbiór 40 elementów. W skrócie, potrzebny jest program/AI do ewaluacji podzbioru na podstawie wygenerowanego przybliżenia/wyniku.

Skąd algorytm genetyczny ma pamiętać że przesunięto np grafikę kwadrat i nie utracono tej informacji?

Również ważna jest kolejność elementów oraz danie możliwości programowi do "tasowania" tych grafik, bo jak pamiętamy posiadamy system warstw. Z tego co sie dowiedzialem algorytm genetyczny akceptuje na wejście dane w postaci binarnej. Dokonuje operacji na całej reprezentacji  wartości binarnej. W skrócie może dojść do mutacji bitów, które są odpowiedzialne za identyfikację danego kształtu.

pomoc

Ogolnie prosze o pomoc w nakierowaniu na dobrze tory. Jakie są możliwe podejścia rozwiązania tego problemu? Czy jest nim algorytm genetyczny? Czy jest nim sieć neuronowa? Może istnieją inne rozwiązania tego problemu? Dziekuje za pomoc z góry.

0

Jaki jest problem, nie chce mi się wszystkiego czytać, no jak algorytm genetyczny to musisz zrobić funkcję oceny czyli porównać oba obrazy doecloewy z twoim i masz jakąś ocenę jak bardzo rózni się twój od docelowego jak to ocenisz to już twoja sprawa, można naiwnie każdy pixel z każdym lub użyć jakiejś sieci neuronowej do similarities.

Potem musisz metody mutacji okręslić czyli jakieś losowe przekształcenia obrazu.

Jak to masz to teraz możesz tworzyć maina czyli bierzesz obraz dodajesz mutację jakąś transformację, robisz to na 10-100 przykładach jednocześnie i potem dajesz do funkcji oceny najlepszych 10 dalej mutujesz i kilku najlepszych bez mutacji zostawiasz na wszelki wypadek jakby kolejne mutacje wyszyły gorzej od porzednich
i tyle to jest najprostszy algorytm genetyczny, jeśli zapiszesz obrazy w genie czyli jakimś bitowym formacie to możesz też krzyżować najlepsze rozwiązania na obrazach to będzie trochę trudniejsze do wykonania i tak będzie git.

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