Pablo Picasso – życie i twórczość… w liczbach

Co prawda nie jest to teleturniej Wielka Gra, ale tytuł przywodzi na myśl temat “Pablo Picasso – jego życie i twórczość”. Zajmiemy się obrazami i ich analizą.

Oczywiście tytuł nie jest przypadkowy i (starszym) Czytelnikom powinien się z Wielką grą skojarzyć. Ale ilu z Was pamięta ten program? Pięcioro? Myślę nad ankietą, a teraz w planie, mamy badanie!

Celem dzisiejszego wpisu jest sprawdzenie czy “okres czerwony” w malarstwie Picassa rzeczywiście był czerwony. Oczywiście sprawdzimy to przy pomocy R, w pewnym sensie oglądając obrazy (automatycznie). Dowiemy się też kilku rzeczy o strukturze obrazu komputerowego (totalne przedszkole).

Zaczniemy od początku, czyli krok pierwszy:

Pobranie obrazów

Na stronie Wikiart.org znajdujemy listę wszystkich obrazów – lista jest dynamiczna (kolejne obrazy są doładowywane bez przeładowania strony), ale po chwili grzebania w kodzie strony (niezawodne “Zbadaj” z Chrome) ze szczególnym uwzględnieniem zapytań sieciowych, znajdujemy link odpowiedzialny za dociągnięcie kolejnych danych. Kilka eksperymentów i widać, że pod konkretnym URLem jest JSON zwracający po 200 obrazów (przede wszystkim linki do obrazów, ich tytuły i rok powstania – to nam wystarczy). Obrazów w serwisie jest 1129, więc potrzebujemy sześciokrotnie pobrać dane (z kolejnych 6 stron JSONa).

Oglądamy dane (hint: glimpse(paintings_list)) i widzimy, że wszystkie kolumny są typu znakowego, a taki rok jest przecież liczbą. Zmieniamy więc rok na liczbę (a jak się nie uda to olewany konkretny obraz – w efekcie utrata 9 ze 1129 to żadna strata), jednocześnie pozostawiając tylko to co nam potrzebne:

Tak przygotowaną listę obrazów zapisujemy sobie lokalnie (w pliku, jak ktoś chce to w bazie danych).

Kolejny krok to pobranie wszystkich plików graficznych (wpadną do folderu pics/). Zrobimy to 1120 razy przy użyciu odpowiedniej funkcji:

którą wywołamy dla każdego z obrazów:

Cały proces trochę potrwa (w efekcie pobieramy około 350 megabajtów plików graficznych). Uzupełnioną o ścieżki do plików lokalnych listę zapisujemy lokalnie:

Ile obrazów mamy?

Nie znam twórczości Picassa na tyle dobrze, żeby powiedzieć czy namalował (albo narysował – wśród pobranych plików są również grafiki) 1120 obrazów czy więcej. Trzeba było doczytać. Ale to zabawa. Nauka przez zabawę

Ile obrazów powstało w kolejnych latach?

Tutaj pole do popisu dla biografów – dlaczego bywały lata kiedy malował więcej? Nowe kobiety (znając Picassa to może być przyczyna – nowa muza to większa wena). O jednym jestem przekonany: w początkowych latach twórczości artysta (każdy?) jest bardziej płodny, rozwija warsztat, szuka swojej formy wyrazu. Kiedy przychodzi sukces, a spojrzenie na sztukę jest już ugruntowane – powstają dzieła bardziej przemyślane, a ich przygotowanie zajmuje więcej czasu (albo szkoda czasu na wprawki). Tak sobie koncypuję.

Przejdźmy jednak dalej – jak w R wyświetlić plik graficzny (w tym przypadku plik JPEG)? Sposobów jest wiele, prześledzimy jeden, który pozwoli na manipulację danymi graficznymi.

Wyświetlenie pliku JPEG

Nasze zabawy przeprowadzimy na obrazie Scéne de Corrida z 1901 roku. Nie jest to może najbardziej znany (ale taki najbardziej znany, że od razu wiadomo jak to Sylwuś mówił o Szopenie w Dniu świta) obraz, ale wybrałem go nie bez powodu.

Rozmiary obrazka to 965, 1280, 3, gdzie kolejno mamy:

  • wysokość = 965 pikseli
  • szerokość = 1280 pikseli
  • liczbę warstw kolorów – tutaj 3 co odpowiada składowym R, G, B

Możemy pokazać (uwaga – inna funkcja) tylko jedną składową – weźmy czerwoną (jest dość charakterystyczna na przykładowym obrazie):

Przede wszystkim obraz jest przekręcony (można temu zapobiec przekształcając macierz) – wynika to z różnicy w umieszczeniu punktu początkowego układu współrzędnych. rasterImage() rysuje punkty poczynając od lewego górnego rogu, image() tak jak ma to miejsce w kartezjańskim układzie współrzędnych – od lewego dolnego rogu.

Jeśli zaś chodzi o kolory: im bardziej biały punkt na powyższym obrazie tym silniejsza składowa czerwona (R). Zwódźcie uwagę na trybuny i czerwoną płachtę oraz na ziemię i zielone spodnie.

Przekształcenia obrazu

Kolejne manipulacje będziemy przeprowadzać na ramce danych, gdzie każdy wiersz będzie zawierał współrzędne (x, y) punktu oraz składowe jego kolorów (R, G, B). Przygotujmy zatem taką ramkę:

Możemy już usunąć zbędne dane (popatrzcie na rozmiary tych tablic i rozmiar pliku JPEG – widać co oznacza porządna kompresja), aby nie zajmowały nam niepotrzebnie pamięci.

Dodatkowo zmniejszymy sobie nieco obrazek – na przykład zostawiając co piątą linię (i kolumnę):

Kolejny krok to posteryzacja (*color quantization, czyli zmniejszenie liczby kolorów. Algorytmów jest pewnie sporo (w ogóle przekształcenia obrazu to fascynująca sprawa – rozmycia, wyodrębnianie krawędzi – wszystko to są operacje na macierzach), my wykorzystamy k-means. Znajdziemy 8 centrów (punktów w przestrzeni kolorów) i wszystkie kolory przekształcimy do tych ośmiu.

Teraz możemy już narysować obrazek z przekształconymi kolorami. Prawie od razu – najpierw musimy z tabeli danych przejść na macierze kolejnych składowych (czyli drogę odwrotną niż poprzednio):

Co wyszło?

Zwróćcie uwagę na szczegóły. Są dużo mniejsze – wynika to ze zmniejszenia rozdzielczości obrazu ale też zmniejszenia rozdzielczości kolorów (zmniejszenia ich liczby). Zgubiliśmy chociażby niebieskie spodnie torreadora (tego najbardziej z lewej), zniknęły też odcienie zielonego (torreador po prawej) i czerwonego (mamy wielkie czerwone plamy).

Zobaczmy ile punktów obrazu jest danego koloru (ze zmniejszonej palety):

Tych kolorów i informacji o liczbie punktów użyjemy do zobaczymy jak zmieniała się paleta używana przez Picassa na przestrzeni jego życia.

Korzystając z okazji zabawmy się w principal components analysis na przestrzeni oryginalnych kolorów – czy da się wyłowić ze samych składowych (bez informacji o położeniu punktów danego koloru) wyłowić jakieś informacje? Przeprowadźmy analizę PCA i narysujmy jej wynik:

Trudno chyba cokolwiek powiedzieć… ale widać pewne obszary. Można by spróbować zrobić PCA (to już mamy), a później k-means na wyniku PCA i na tej podstawie przypisać kategorie do poszczególnych punktów obrazka. Niewiele się zmieni – przekształcenia (PCA, k-means) robimy na samej przestrzeni barw.

Spróbujmy dodać do tego współrzędne poszczególnych punktów (normalizując je automatycznie – skorzystamy z prcomp() zamiast z princomp())

Nadal widać zarysy. Niewiele w sumie się zmieniło. Widać przejście tonalne po przekątnej co jest ciekawostką i wynikiem dodania składowych X i Y do analizy PCA.

Tyle znęcania się nad jednym obrazem – weźmy na warsztat wszystkie.

Analiza wszystkich obrazów

Wszystkie potrzebne operacje już przeprowadzaliśmy, czas upakować je w funkcję, którą wywołamy dla każdego z obrazów:

Nie będę wnikał w powyższy kod – przeszliśmy to krok po kroku, a i same komentarze dobrze tłumaczą co jest robione.

Potraktujemy tą funkcją wszystkie obrazy:

Po drodze coś nam się wykopyrtnie, coś się zawiesi, a to obrazek się ściągnął z błędem, a to zabraknie pamięci albo prądu. Teoretycznie kod jest poprawny, ale warto czuwać nad całym procesem.

Mając zebrane po 8 najpopularniejszych kolorów (przypominam – po posteryzacji) dla każdego obrazu i wiedząc kiedy obraz został namalowany możemy pokusić się o narysowanie na osi czasu popularności kolorów. Wybierzemy tylko ten najpopularniejszy kolor na danym obrazie i policzymy jaki procent punktów ma ten kolor:

Przy okazji dodałem do wykresów informacje o okresach w twórczości Picassa zaczerpnięte z Wikipedii:

  • Before 1900
  • Blue Period: 1901–1904
  • Rose Period: 1904–1906
  • African art and primitivism: 1907–1909
  • Analytic cubism: 1909–1912
  • Synthetic cubism: 1912–1919
  • Neoclassicism and surrealism: 1919–1929
  • The Great Depression to MoMA exhibition: 1930–1939
  • World War II and late 1940s: 1939–1949
  • Later works to final years: 1949–1973

Czy okres niebieski był rzeczywiście niebieski? A w czerwonym dominowała czerwień? W niebieskim rzeczywiście widać sporo odcieni niebieskiego, ale w czerwonym to chyba raczej czerwone akcenty. Widać zaś coś interesującego – w okresie neoklasycyzmu i surrealizmu obrazy Picassa były jaśniejsze, z barwami o mocnym nasyceniu. Podczas II wojny światowej widać dużo ciemnych barw – czy to wyniki życia prywatnego czy odczuć związanych z trwającą wojną?

Czy jest na sali znawca twórczości (i życia) Pabla Picassa? Proszę o komentarze!

Dodaj komentarz