Pytanie:
Czy mój pomysł na technikę poklatkową był już używany?
Karl
2020-03-30 15:13:06 UTC
view on stackexchange narkive permalink

Niedawno pomyślałem o technice poklatkowej i chcę wiedzieć, czy istnieje na nią nazwa lub czy była już szeroko stosowana.

Chcę zrobić zdjęcie poklatkowe w moim ogrodzie w 1 klatka dziennie przez długi czas, powiedzmy rok (podobnie jak w tym poście): Robienie odstępu czasu mojego podwórka przez 1 rok

Oczywiście duży problem z tą metodą jest to, że istnieje wiele rzeczy, które powodują migotanie lub drgania obrazu, takie jak różne poziomy jasności chmur, wzory wschodu i zachodu słońca oraz wiatr wiejący na drzewach.

Mój pomysł polegał na użyciu malinowego pi, tysiące zdjęć dziennie, powiedzmy jedno co kilka sekund, i usuwaj je wszystkie każdego dnia oprócz jednego. Zachowywany jest ten, który jest najbliższy kadrze z poprzedniego dnia.

Napisałem prosty skrypt, aby wybrać najlepszą klatkę na dzień, porównując piksel po pikselu i wybierając klatkę z minimalną sumą kwadratów różnic.

Oczywiście pierwsza klatka musi być wybierane ręcznie.

Początkowe wyniki po tygodniu wyglądają obiecująco, udało się uzyskać ramki na każdy dzień z minimalną różnicą między sobą.

Chcę wiedzieć, czy to jest nową technikę lub jeśli została ona wcześniej zbadana i istnieją dodatkowe wskazówki lub wskazówki, które inni ludzie odkryli na temat tej konkretnej metody.

Edycja: poświęcono temu dużo więcej uwagi, niż się spodziewałem, więc zrobię kilka uwag o sprawach często poruszanych w komentarzach.

  • Cienie : jeśli na scenie występują silne cienie, oznacza to, że obrazy muszą być wybierane niemal dokładnie o tej samej porze każdego dnia, aby uniknąć szarpanych cieni powodowanych przez słońce pod różnymi kątami. Odkryłem, że mogę łatwo tego uniknąć, wybierając pierwszą klatkę, gdy scena nie jest oświetlona bezpośrednim światłem słonecznym, na przykład o świcie lub o zmierzchu lub gdy zachmurzenie jest lekkie. Zwykle jest kilka godzin każdego dnia, w których jest wystarczająco dużo światła, aby zrobić dobre zdjęcie, ale nie ma bezpośrednich cieni, a oświetlenie jest na średnim poziomie, więc następnego dnia dość łatwo jest znaleźć ramkę z dopasowanym poziomem oświetlenia.
  • Opad śniegu lub inne obiekty, które nie występują na scenie przez bardzo długi czas . Jest całkiem jasne, że tylko porównanie z klatką z poprzedniego dnia w funkcji kosztu może spowodować całkiem spore problemy. Aby temu przeciwdziałać, zdecydowanie pomogłoby użycie więcej niż jednej poprzedniej klatki w funkcji kosztu. Nie jest jasne, jak to zrobić, ponieważ przychodzi mi do głowy kilka różnych technik, ale z kilkoma eksperymentuję. Mogłyby one obejmować uczynienie funkcji kosztu sumą różnicy między poprzednią klatką a także pierwszą klatką lub skonstruowanie sztucznej ramki dla dzisiejszej funkcji kosztu przy użyciu modalu lub średnich pikseli z klatek z ostatnich 5 dni (kwota niepewna).
  • „Roczny timelapse najbardziej podobnych klatek może wyglądać nieco nudno i nudno, ponieważ nie byłoby prawie żadnej„ zmiany ”w sekwencji” . Oczywiście algorytm będzie starał się ukryć zmiany tak dalece, jak to możliwe, takie jak zmiany jasności lub zmiany położenia drzew pod wpływem wiatru, ale są rzeczy, które zmienią się w sekwencja, której algorytm nie może ukryć, na przykład rośliny rosnące stopniowo w czasie, co mnie interesuje.
  • „pamiętaj, że 365 zdjęć daje bardzo krótki film przy 30 klatkach na sekundę” : To prawda, prawdopodobnie wybiorę 10 klatek na sekundę.

Dla zainteresowanych zobaczeniem wyników mojego projektu, zamierzam umieścić kod na github i połączyć go z powrotem tutaj, gdy już go uporządkuję i naprawię kilka drobnych problemów. Podam również link do wygenerowanych filmów, ale oczywiście uzyskanie takich wyników może zająć dużo czasu.

Odpowiedzi tutaj dają mi wystarczająco dużo pomysłów, aby zaimplementować co najmniej 3 różne algorytmy. spraw, aby kod umieścił wyniki w różnych folderach, aby były całkowicie oddzielne. Ciekawie będzie zobaczyć, czym różnią się powstałe filmy.

Jeśli masz tylko jeden obraz dziennie, nie możesz mieć zarówno wschodu, jak i zachodu słońca ... IMHO Problem z twoją techniką polega na tym, że możesz skończyć wybierając zdjęcia, na których cienie są w przeciwnych kierunkach, a to może być jeszcze bardziej problematyczneniż różne poziomy światła (które można wyrównać).
@xenoid: Posiadanie cieni w przeciwnych kierunkach będzie wiązać się z kosztami, a przy wystarczającej liczbie zdjęć wykonywanych dziennie, koszt ten powinien być zoptymalizowany.Innymi słowy, powinno być dość łatwo znaleźć zdjęcie następnego dnia z cieniem w tym samym kierunku, a posiadanie cienia w tym samym kierunku zminimalizuje różnicę, co spowoduje, że ten obraz będzie bardzo prawdopodobny.
Świetny pomysł!Czy planujesz udostępnić skrypt?
@kahovius: Tak, ale zanim to zrobię, wiedza, czy ktoś inny zrobił coś podobnego, byłaby bardzo pomocna, stąd pytanie!
W takim przypadku możesz zawęzić czas przechwytywania do kilku godzin dziennie, tak aby wszystkie cienie i tak były w przybliżeniu w tym samym kierunku.Ale nawet robiąc to, mam przeczucie, że skończysz z gwałtownymi cieniami.
@xenoid: Odkryłem, że zwykle jest kilka godzin dziennie, w których jest wystarczająco dużo światła, aby zrobić dobre zdjęcie, ale światło nie jest bezpośrednie, więc nie ma żadnych cieni.Na przykład, gdy słońce jest tuż za horyzontem lub za chmurami.
Jak twój algorytm poradzi sobie z pierwszymi opadami śniegu?:)
@ pipe: w takich sytuacjach myślę, że pomogłoby, gdyby funkcja kosztu uwzględniała różnicę nie tylko z poprzedniej klatki, ale także z niektórych wcześniejszych klatek, prawdopodobnie zsumuj różnicę między poprzednią klatką i zawsze pierwszą klatką?
Koszt = różn. (Ramka n, ramka n-1) + różn. (Ramka n, ramka 0)
@xenoid OP może to naprawić, ograniczając obrazy do określonego przedziału czasu każdego dnia, powiedzmy między 13:00 a 14:00, gdzie długość i kierunek cienia nie zmieniają się zbytnio, a jasność prawdopodobnie będzie dobra.Mała podstawowa korekta ekspozycji usunie później wszelkie drobne rozbieżności.
@Graham Już powiedziałem to w komentarzu (5 miejsce w dół)
Jako programista, który lubi fotografię, myślę, że twój projekt jest naprawdę fajny.Chciałbym jednak zwrócić uwagę, że roczny timelapse najbardziej podobnych klatek może wyglądać nieco nudno i nudno, ponieważ w sekwencji nie byłoby prawie żadnej „zmiany”.Np .: zima → szara i pochmurna, lato → jasna i słoneczna;jeśli pierwsze zdjęcie zostanie zrobione zimą, algorytm może wybrać zdjęcia letnie, na których światło nie było tak jasne, być może takie, na których samotna chmura stonowała kolory, więc lepiej pasują do zimowych.Spodziewałbym się, że 1-letni timelapse lepiej zobrazuje zmiany sezonowe.
Proponuję nie usuwać „nieużywanych” zdjęć.Jeśli twoje zdjęcia mają 10 MB, całkowita przestrzeń dyskowa na zdjęcie co 5 minut w świetle dziennym wynosiłaby 500 GB, co jest w pełni zarządzalne i nigdy nie wiesz, co _ naprawdę interesujące_ może się dziać na tym zdjęciu „to jest inne”!
Witam, nie mogę odpowiedzieć na Twoje pytanie, ale możesz chcieć sprawdzić [ten film] (https://www.youtube.com/watch?v=WTGmxCpo89c) Sama Morrisona.To wideo złożone z ponad tysięcy zdjęć z Instagrama.Jest „trochę” podobny do twojego projektu.
Jeśli wybierzesz zdjęcie rano, a następnego dnia wszystkie zdjęcia z tego czasu będą znacznie ciemniejsze z powodu deszczu, zdjęcie z popołudnia może być znacznie bliższe, pomimo cienia w innym kierunku.Nie ma gwarancji, że zostaną wybrane te same cienie.
Nie jestem pewien, co chcesz z tym zrobić na końcu, ale pamiętaj, że 365 zdjęć daje bardzo krótki film przy 30 klatkach na sekundę.
Czy nie byłoby możliwe odrzucenie „niedopuszczalnych” (tj. Czarnych / nocnych lub bardzo wczesnych porannych) obrazów, a następnie uśrednienie razem niektórych, powiedzmy, 100 obrazów _ tego samego dnia_ działałoby lepiej?To powinno wyeliminować bardzo zauważalne zmiany jasności i w większości zamortyzować cienie, ponieważ coś jest w cieniu rano lub po południu, zwykle nie jedno i drugie.Poradzi sobie także z poruszającymi się obiektami lub ludźmi przechodzącymi przez retuszowaną scenę oraz z hałasem.Pozwoliłoby to również na opadanie śniegu (zakładając, że nie topi się w ciągu 2-3 godzin) i dobrze radzi sobie z godzinnym deszczem.
@user69960: Problem z uśrednianiem polega na tym, że (na przykład) drzewo, które jest dmuchane przez wiatr, będzie wyglądać na rozmazane
Zgadza się, ale wybranie pojedynczej klatki nie jest dużo lepsze, powoduje, że szarpie się ona dziko i powoduje, że ludzie i przedmioty pojawiają się i znikają.Nie jestem pewien, czy naprawdę wygląda lepiej w ten sposób.Obejrzyj powyższy link wideo wykonany ze zdjęć z Instagrama.Ale rób to tylko wtedy, gdy nie cierpisz na epilepsję, wiesz ... to dość niepokojące, nawet dla zdrowych ludzi.
@user69960: Dlatego pracuję nad tym „najbardziej podobnym” algorytmem, który ma na celu wykorzystanie zalet obu.Powinien minimalizować szarpanie i ilość rzeczy pojawiających się i wychodzących tak daleko, jak to możliwe, a także nie być rozmyte.
Jak dotąd (dwa tygodnie zdjęć) stwierdziłem, że szarpanie jest niezwykle minimalne.Jeśli robisz tysiące zdjęć dziennie, w końcu znajdziesz takie, w którym warunki oświetlenia i wiatru są odpowiednie
Sześć odpowiedzi:
user91253
2020-03-30 15:43:15 UTC
view on stackexchange narkive permalink

Cóż, jest to tak zwany chciwy algorytm, który może niepotrzebnie prowadzić w ślepe zaułki, a ich ponowne wydostanie się jest kosztowne. Jeśli zamiast tego chcesz zminimalizować całkowitą zmianę, zachowaj wszystkie obrazy i nagrywaj dla każdego obrazu a) najlepszy poprzedni obraz dla optymalnej sekwencji przybywającej tutaj b) koszt przybycia tutaj przez optymalną sekwencję.

Możesz przyciąć porównania, zauważając, że każda sekwencja, która jest już droższa od obecnego optymalnego kandydata bez dodawania nawet najnowszej odległości, może zostać usunięta bez wykonywania rzeczywistego porównania. Obrazy, które kończą się w „martwych sekwencjach”, które nigdy nie mogą być częścią sekwencji optymalnej, niezależnie od tego, co nastąpi później, można całkowicie przyciąć. W ten sposób aktywny zestaw obrazów, które należy zachować, jest ograniczony, chociaż przy dużym podobieństwie twoich zdjęć mogą istnieć „bliskie wyścigi” przez długi czas, utrzymując wielu kandydatów aktywnych.

+1 To ma sens i jest świetnym dodatkiem do techniki, o której nie pomyślałem.Bez takich ograniczeń przez długi czas może dojść do niepożądanego stanu, na przykład w noc.Chociaż nie jest to dokładna odpowiedź na pytanie: czy zdajesz sobie sprawę, że ta technika była wcześniej znana lub badana przez innych?
Takie podejście jest dobrym kandydatem do tak zwanego programowania dynamicznego.Aby znaleźć ścieżkę z minimalną różnicą prowadzącą do dnia 10, po prostu dodaj koszt kroku do kosztu ścieżki minimalnej różnicy dla każdego wyboru z dnia 9. Aby znaleźć ścieżki z minimalną różnicą do dnia 9, dodaj koszt kroku do minimum- koszty ścieżek różnicowych na dzień 8 i tak dalej.Przy N obrazach w każdym z T punktów czasowych jest to metoda O (TN ^ 2), a nie naiwna O (N ^ T) budowania każdej sekwencji od zera.
Równoważny sposób (do rozwiązania do programowania dynamicznego @NuclearWang's), aby o tym pomyśleć, polega na tworzeniu wykresu węzłów O (TN) zawierających krawędzie O (TN ^ 2), a następnie znajdowaniu najkrótszej ścieżki.Zaletą zrobienia tego w ten sposób jest to, że wystarczy obliczyć sąsiadów węzłów, które są faktycznie rozwijane podczas wyszukiwania.
Innymi słowy, algorytm Dijkstry
scottbb
2020-03-30 17:40:02 UTC
view on stackexchange narkive permalink

To, co opisujesz, przypomina to, co astrofotografowie nazywają szczęśliwym obrazowaniem (lub obrazowaniem plamek). Ideą szczęśliwego obrazowania jest wykonanie kilku (setek, a nawet tysięcy) bardzo krótkich ekspozycji i zachowanie tylko kilku zdjęć, które wydają się najmniej zakłócane przez zniekształcenia atmosferyczne.

Ogólnie biorąc, więcej zdjęć obrazy niż potrzebne, aby później wybrać najlepsze, nazywa się (czasem szyderczo) spray & pray . =)

Jeśli chodzi o nowość w konkretnym przypadku użycia, widziałem, jak kamerzyści tworzyli upływ czasu, rejestrując segmenty wideo o wysokiej rozdzielczości dla każdego okresu klatki poklatkowej i albo uśredniając klatki każdego segmentu wideo lub wybierz najlepszą klatkę z każdego segmentu.

Pray & Spray: Metoda goto-fotografii każdego aparatu uniesionego w powietrze, aby uzyskać ujęcie akcji.Zrobiłeś kilka świetnych zdjęć na studiach podczas meczów piłkarskich, ale pamiętaj - miałeś tylko 36 szans.
@J Hirsch w czasach filmowych, można było odróżnić profesjonalistę od hobbystów, ponieważ zrobił dużo zdjęć.Jednak w przypadku technologii cyfrowej profesjonalista może powiedzieć, ile zdjęć musi wykonać.Wstyd mi powiedzieć, że czasami po prostu przytrzymuję migawkę i karabin maszynowy, aż opóźnienie bufora stanie się zbyt irytujące ...
... lub weź najlepsze * piksele * z każdego obrazu, aby uzyskać jakąś definicję „najlepszego”.Wybranie najbardziej powszechnej wartości (trybu) jest jednym ze sposobów usuwania przeszkód na pierwszym planie i tworzenia złożonego obrazu tła (np. Usuwanie turystów ze zdjęć seryjnych słynnego punktu orientacyjnego).W przypadku OP „best” byłby tym, który najlepiej pasuje do dowolnej używanej przez nich funkcji podobieństwa.
@AC: Alternatywnie, weź średnią wartość piksela we wszystkich ujęciach, zidentyfikuj wszystkie piksele we wszystkich ujęciach, które są zasadniczo różne, a następnie weź średnią wszystkich pikseli ze wszystkich ujęć, z wyłączeniem tych, które odbiegały od średniej, i zmniejsz wagętych, którzy są blisko wykluczonych.
@scottbb Całkowicie się z tobą zgadzam.Zawsze było 3: 1 dla filmu, a teraz jest 1: 3 dla cyfrowego.Nadal nienawidzę montażu cyfrowego o wiele bardziej niż w przypadku filmu.Jest o wiele więcej.
jpa
2020-03-31 20:28:10 UTC
view on stackexchange narkive permalink

Wiele kamer poklatkowych już to robi, ale w krótszej skali czasu. Na przykład GoPro wspomina w dokumentacji TimeWarp:

Aby uzyskać najlepsze wyniki, spróbuj zwiększyć prędkość 10x i wyższą podczas nagrywania materiału, który może być nierówny. Wyższa prędkość często zapewnia lepszą stabilizację, ponieważ TimeWarp ma więcej klatek do wyboru

To brzmi tak, jakby wybierało klatki z najmniejszym ruchem z poprzedniej klatki. Podobnie w tej publikacji firmy Microsoft Tworzenie hiperlapsów w czasie rzeczywistym poprzez optymalny wybór klatek:

Optymalnie wybieramy klatki z wejściowego wideo, które najlepiej pasują do pożądanego docelowego przyspieszenia, skutkuje również możliwie płynnym ruchem kamery.

Oprócz kryterium podobieństwa, wybierają najbardziej stabilną prędkość ruchu między klatkami. Gdy kamera się porusza, technika ta jest zwykle nazywana „Hyperlapse”, ale nie mogłem znaleźć przykładów zastosowania jej do nieruchomej kamery i interwałów 24-godzinnych.

Zaakceptowani ze względu na link do badań Microsoftu, który najbardziej pasuje do algorytmu, który próbuję opracować, po prostu użyli ruchomej kamery zamiast stacjonarnej.
Nat
2020-04-01 23:43:50 UTC
view on stackexchange narkive permalink

tl; dr - Wygląda na to, że potrzebujesz nagrania wideo z wektoryzacją funkcji, w którym drobne / przejściowe cechy są odfiltrowywane, tworząc film pokazujący koncepcyjną ewolucję scenę w czasie.


Prawdopodobnie chcesz nagrać film przedstawiający ewolucję głównych funkcji.

Jeśli chcesz po prostu nagrywać obrazy poklatkowe, możesz po prostu zrobić to.

Jednak pytasz o sekwencję poklatkową z minimalnymi zmianami między klatkami. Domyślam się, że naprawdę chcesz filmu, który skupia się na nadrzędnej narracji uchwyconej przez kamerę. To jest:

  • do chcesz uchwycić, jak główne cechy sceny zmieniają się w czasie.

  • Nie chcesz, aby film wyglądał na roztrzęsiony z powodu, na przykład, pewnego dnia pochmurno, a następnego nie, lub przypadkowego , nieciekawe obiekty pojawiają się jednego dnia, ale żadnego innego.

Na przykład, powiedzmy, że na scenie jest zegar:

  • Zrobisz chcesz uchwycić, jak wygląd tego zegara zmienia się w czasie, jeśli na przykład jego farba jaśnieje w słońcu lub jeśli zaczyna się rysować / pękać czas.

  • Nie chcesz, aby zegar przeskakiwał losowo od klatki do klatki.

Idź o krok dalej:

  • do chcesz móc aby odtworzyć film poklatkowy z wyższą liczbą klatek na sekundę, pokazując czas zegara płynnie przechodzący, tak jakby to był film w czasie rzeczywistym, mimo że kamera nie ver faktycznie przechwycone obrazy zegara przez cały ten czas.

Innymi słowy, prawdopodobnie nie chcesz, aby komputer zapisywał losowe piksele, jak w bitmapie, ale raczej chcesz wideo składające się z koncepcyjnych komponentów, które komputer może wyświetlić.


Wygeneruj wektoryzowane wideo, wyodrębniając cechy z surowych map bitowych.

Wyodrębnianie funkcji izoluje funkcje ze sceny.

Czy widziałeś na przykład jedną z tych „ Law & Order "- programy telewizyjne, w których osoba będąca świadkiem przestępstwa opisałaby podejrzanego policyjnemu rysownikowi, który następnie spróbuje narysować podejrzanego?

Potrzebujesz algorytmu który jest świadkiem surowych danych z aparatu, a następnie tworzy plik wideo, który opisuje to, czego był świadkiem, zamiast dosłownie kopiować / wklejać piksele. W takim razie potrzebujesz oprogramowania, które animuje scenę na podstawie opisu tego pliku wideo, podobnie jak artysta szkicownika policyjnego rysującego każdą klatkę na podstawie wspomnień świadka, zamiast tradycyjnego odtwarzacza wideo wyświetlającego tylko kolorowe kropki.

Odfiltruj zaszumione funkcje, aby uzyskać żądane wideo.

Jeśli w pełni zwektoryzujesz surowe wideo, otrzymasz nowy plik wideo, który pokazuje dokładnie to samo, właśnie zapisane / przetworzone w innym formacie.

Magia polega na możliwości wyświetlania wideo bez drobnych funkcji. Na przykład załóżmy, że przypadkowa osoba idzie przed kamerą w jednym ujęciu; obecność tej osoby w tym kadrze jest cechą, którą prawdopodobnie chciałbyś wykluczyć. Wystarczy więc powiedzieć odtwarzaczowi wideo, które funkcje wyświetlić - prawdopodobnie chciałbyś pokazać funkcje, które płynnie rozciągają się na nietrywialną liczbę klatek.


Techniczne implementacja: jakiego oprogramowania użyć?

Nie będę polecał żadnego konkretnego oprogramowania, bibliotek itp. Po części należy być leniwym, a po części dlatego, że jest to nowa praktyka, w której rzeczy mogą się szybko zmieniać.


Podsumowanie

Wygląda na to, że chcesz generować wektoryzowane filmy wideo z poklatkowych obrazów nieruchomych, umożliwiając oglądanie filmów przedstawiających koncepcyjną ewolucję w czasie scena bez hałaśliwych elementów rozpraszających.

W tej dziedzinie trwa wiele badań, ponieważ jest to przydatne w wielu przypadkach; na przykład wektoryzacja szeregu klatek z kamer samochodu samojezdnego może wygenerować model świata wokół samochodu, umożliwiając mu podejmowanie właściwych decyzji dotyczących jazdy. Podobnie jak Ty, samochody autonomiczne nie przejmują się hałasem; chcą po prostu zrozumieć ważne cechy sceny, np. gdzie znajdują się obiekty, a nie dokładne dane na poziomie pikseli z surowych obrazów.

Fajnie byłoby zobaczyć, jak ktoś zastosuje to do wideografii poklatkowej!

+1 za wymowny opis rzeczy, które robię i czego nie chcę.Chociaż nie jestem wystarczająco zaznajomiony z techniką rozwiązania, które opisujesz, aby wykonać implementację z ograniczonymi szczegółami technicznymi opisanymi tutaj.
Zillakon
2020-04-01 22:26:22 UTC
view on stackexchange narkive permalink

Skoro używasz malinowego pi, czy myślałeś o podłączeniu go do niektórych świateł wypełniających. Możesz ustawić to tak, aby światła włączały się tylko przy niektórych zdjęciach, jeśli nadal chcesz zrobić dużo zdjęć w ciągu dnia. Przynajmniej w ten sposób Twoja roślina będzie miała jakąś standardową ilość światła, niezależnie od tego, co dzieje się w tle obrazu.

Dobry pomysł, ale chciałem stworzyć algorytm, który nie musi polegać na zewnętrznym wsparciu, aby można go było zastosować w szerszym zakresie scenariuszy.Na przykład, co się stanie, jeśli mieszkam w mieszkaniu w mieście z dobrym widokiem na niektóre trwające projekty budowlane i chcę, aby w czasie powstawały drapacze chmur?
Buttonwood
2020-04-02 20:35:54 UTC
view on stackexchange narkive permalink

Jeśli chodzi o trwałe terminy, moim bohaterem w tej dziedzinie jest Joe DiGiovanna. Z wybrzeża Weehawken w stanie New Jersey robi co 30 sekund zdjęcie, wyrównując je do Nowego Jorku (2880 zdjęć każdego dnia). W rzeczywistości jest to 30-letni projekt, który rozpoczął ponad 4 lata temu. Korzystanie z interwałometru opartego na ardunio, dedykowanego laptopa, zasilania awaryjnego itp. Zobacz jego stronę internetową lub raport CNN style na jego temat, w tym przykłady takie jak 13 lipca 2019 r. ( większe zaciemnienie miasta) lub pojawienie się drapaczy chmur.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...