Zabawa z grak z programem Scilab Jacek Tabor
Rozdziaª 1 Zmiana skali Na dobry pocz tek: http://wwwtheinvisiblegorillacom/gorilla_experimenthtml 11 CIE 1931 Color Matching Functions Sposób w jaki widzimy konwencja 1931 CIE do±wiadczalnie wyznaczyªa w jaki sposób przetwarzamy/odbieramy ±wiatªo http://wwwciecoat/main/freepubshtml Prosz zobaczy na http://wwwcisritedu/mcsl/research/1931php http://enwikipediaorg/wiki/cie_1931_color_space Prawo Grassmana (1801-1897) - odbieranie ±wiatªa Rysunek 11: RGB matching functions Standardowy sposób zapisu RGB do niektórych aplikacji nie jest najlepszy, gdy» tak naprawd te kanaªy maj ró»n wag Cz sto przechodzimy do innych sposobów zapisu barw zazwyczaj takich w których jeden kanaª odpowiada za luminacje (jasno±, czyli jakby za zdj cie czarno-biaªe), a pozostaªe dwa za chrominacje Najprostsza i dosy cz sto u»ywana jest YCbCr (wi cej informacji na http://plwikipediaorg/wiki/ycbcr): 1
clear ; stacksize ( "max" ) ; RGB=imread ( " lena jpg " ) ; imshow ( RGB ) ; YCbCr=rgb2ycbcr ( RGB ) ; // daje czarne // k o l e j n o s c j e s t tak jak byla RGB // G odpowiada czarnemu YCbCr ( :, :, 1 ) =05; YCbCr ( :, :, 3 ) =05; Y=ycbcr2rgb ( YCbCr ) ; imshow ( Y ) ; // wspolczynnik B YCbCr=rgb2ycbcr ( RGB ) ; YCbCr ( :, :, 1 ) =05; YCbCr ( :, :, 2 ) =05; Cb=ycbcr2rgb ( YCbCr ) ; imshow ( Cb ) ; // wspolczynnik R YCbCr=rgb2ycbcr ( RGB ) ; YCbCr ( :, :, 2 ) =05; YCbCr ( :, :, 3 ) =05; Cr=ycbcr2rgb ( YCbCr ) ; imshow ( Cr ) ; 12 Zmiana skali: próbkowanie i uci glanie Chcemy dokona zapisu d¹wi ku b d¹ obrazu Nagrany lm b d¹ d¹wi k mo»emy traktowa jako kompresj peªnego obrazu Wprost ze swojej denicji jest to kompresja stratna Problem który napotykamy polega na tym,»e nasze zjawisko odbywa si w czasie który jest ci gªy b d¹ obraz jest ci gªy, a na komputerze mo»emy przechowywa wyª cznie dyskretne dane, i mo»emy zapisa nasze zjawisko tylko w pewnych odst pach czasu (np dla lmu co 1/24, 1/30 czy 1/60 sekundy, dla d¹wi ku odpowiednio cz ±ciej), lub mo»emy zrobi zdj cie z okre±lon rozdzielczo±ci Powstaje podstawowe pytanie, czy (i kiedy/przy jakich zaªo»eniach) na podstawie takiego próbkowania da si nam odzyska prawdziwy d¹wi k/obraz, lub przynajmniej dokona aproksymacji Matematyczne sformuªowanie powy»szego problemu jest nast puj ce Problem 11 Zakªadamy,»e mamy dan funkcj R t f(t) R (lub R 2 w przypadku zdj cia) Jak wspomnieli±my nie mo»emy jej ani zmierzy (mierzenie jest z okre±lon dokªadno±cia) ani tym bardziej zapisa na komputerze, dokonujemy wi c jej dyskretyzacji (zapisujemy muzyk co staª jednostk czasu, dla prostoty przyjmujemy tu T = 1, lub robimy zdj cie z okre±lon rozdzielczo±ci ) Dostajemy w konsekwencji ci g Z k f k = f(k) R lub Z 2 (w praktyce mamy podzbiór sko«czony), przypominam Z to liczby caªkowite (notacja ze studiów) Pytamy si czy (i ewentualnie przy jakich zaªo»eniach) i w jaki sposób mo»emy odtworzy funkcj f(t) tylko na podstawie znajomo±ci ci gu f k Po co? Dlatego,»e mo»emy chcie powi kszy /zmniejszy, zmieni skal, lub dokona innego typu operacji (obrót) W przypadku d¹wi ku mo»emy chcie odtwarza z inn cz stotliwo±ci (inne urz dzenie): stacksize ( "max" ) ; A=wavread( "w wav" ) ; 2
playsnd ( A,44100) ; B=wavread( "C: \ Users \ Jacek \Desktop\dydaktyka\wyklad kompresja \ dzwiek \rammstein wav" ) ; playsnd ( B,44100) ; playsnd ( B,60000) ; playsnd ( B,38000) ; playsnd ( B ( :, $ : 1:1),44100) ; Analogiczny problem dla lmów: Wagon Wheel Eect (warto przegl dn lmiki na youtube) 13 Graka Aproksymacja/interpolacja liniowa/dwuliniowa i kubiczna PODSTAWOWY SCHEMAT INTERPOLACJI: ustalamy ϕ : R R takie,»e ϕ(0) = 1, ϕ(k) = 0 dla k = ±1, ±2, Deniujemy dla danej funkcji f : Z R rozszerzenie wzorem f ϕ (t) = + f( 1) ϕ(t ( 1)) + f(0) ϕ(t 0) + f(1) ϕ(t 1) + Widzimy,»e f ϕ rozszerza f Pytanie jakie dobra ϕ zale»y od kontekstu Jako dobry test który werykuje jako± danej metody rozszerzenia dla danego zdj cia czy muzyki, mo»na rozszerzy a potem zmniejszy do tej samej skali 131 Rozszerzanie zerem Je»eli chodzi o rozszerzanie: Najprostsza metoda zast pujemy jakim± neutralnym kolorem/warto±ci Tak jest w przypadku wy±wietlania z aktywnymi okularami, lub w przypadku rozszerzania d¹wi ku (potem zrobimy uzasadnienie przy pomocy transformaty Fouriera [pryzmat dla d¹wi ku] dlaczego sªyszymy orientacyjnie to samo byª na poprzednim wykªadzie przykªad) Funkcja przy pomocy której rozszerzamy: jeden w zerze i zero poza tym Mo»na nawet zrobi dla zdj cia, ale nie jest to za dobre: jest dosy ryzykowne, szczególnie je»eli chcemy potem obrabia, na przykªad ±cie±ni ; bardzo szybkie, nie wymaga oblicze«; nie trzeba kombinowa na brzegu; mo»na dwa razy, ale wi cej jest ryzykowne 132 Najbli»szy s siad Nast pna w sensie prostoty i szybko±ci metoda: metoda najbli»szego s siada Warto± w punkcie przybli»amy za pomoc najbli»szej warto±ci Mo»emy zapisa ϕ := 1 [ 1/2,1/2), Stosuje si przy konwersji lmów ameryka«skich na europejskie (pr d - co± wi cej powiedzie ), tak»e przy zdj ciach: plus,»e nie powoduje powstania nowych barw 3
bardzo szybkie mo»e powodowa artefakty nie za dobre w przypadku wi kszego przeskalowania bo jest kwadratowe nie ma problemu z brzegiem 133 Aproksymacja liniowa Kªadziemy ϕ(x) = max(0, 1 x ) Czyli ª czymy kawaªkami linii Odpowiednik dla zdj (czyli dwuwymiarowy) to aproksymacja dwuliniowa Aproksymacja liniowa/dwuliniowa: rozszerzamy za pomoc linii Dosy cz sto dla zdj, lmy (mpeg) tak»e, dla d¹wi ku: wymaga rozszerzenia zakresu w miar dobre dla zdj Analogiczna jest tak»e aproksymacja (bi)kubiczna - bardziej skomplikowana Wi cej informacji na http://enwikipediaorg/wiki/bicubic_interpolation stacksize ( "max" ) ; // pakiet SIVP I= ones (10, 10) // generate gray image M=diag ( [ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 ] ) ; Pion=I M ; Poziom=M I ; imshow ( Pion ) ; imshow ( Poziom ) ; Lena=imread ( " lena png" ) ; imshow ( Lena ) ; // moˆ na zmieniaä skalä TM! : ima = imresize ( Lena, 0 5 ) ; imb = imresize ( Lena, 1 5, " b i l i n e a r " ) ; a=imresize ( ima, 2 ) ; imshow ( a ) ; imshow (10 imabsdiff ( Lena, a ) ) ; // to j e s t juˆ de f a c t o f i l t r do wykrywania krawä TM dzi! imc = imresize ( Lena, [ 1 0 0, 2 0 0 ], " b i c u b i c " ) ; 134 Funkcje trygonometryczne, czyli D¹wi k Pytamy, czy da si tak dobra by zgadzaªo si na funkcjach trygonometrycznych (kluczowe bo najcz ±ciej wyst puj w naturze, a oprócz tego bardzo istotne dla d¹wi ku) Jak dobra φ? Najpro±ciej: bierzemy ϕ(x) := sinc(πx), gdzie sinc(x) = sin(x)/x dla x 0 oraz 1 dla x = 0 (czasami si spotyka znormalizowane) Oczywi±cie, nie uda si nam zawsze odzyska, bo dla przykªadu funkcja sin(πx) pokrywa si na caªkowitych z funkcj stale równ zero Okazuje si,»e ta warto± jest graniczna (i dla cz sto±ci mniejszych ni» π si daje) Prosz sobie zobaczy na plik 4
Twierdzenie 11 (Twierdzenie Shannona o próbkowaniu) Niech f(t) = k 1 a k cos(α k t)+ k 1 sin(β kt), gdzie α k, β k [0, π) Wtedy f = f sinc(π ) Uwaga 11 Powy»sze twierdzenie mo»emy rozumie jako obserwacj,»e przy pewnych zaªo»eniach próbkowanie jest kompresj bezstratn zamiast pami ta caª funkcj wystarczy pami ta dla warto±ci na caªkowitych W ogólno±ci mo»emy powiedzie,»e je»eli w danej funkcji wyst puj cz stotliwo±ci mniejsze ni» pewne Ω (cz stotliwo± to jeden przez okres), to wystarczy do odtworzenia próbkowa co T = 1 2Ω staªa Nyquista (Nyquist frequency) Albo inaczej mówi c: trzeba próbkowa przynajmniej dwa razy cz ±ciej ni» minimalny okres z rozkªadu na cz stotliwo±ci (funkcja sin(πx) ma okres dwa, czyli»eby j odtworzy trzeba próbkowa z okresem T mniejszym ni» 1) W konsekwencji poniewa» czªowiek nie sªyszy cz stotliwo±ci wy»szych ni» 22kHz, pªyty muzyczne maj cz sto± próbkowania 441kHz Prosz sobie uruchomi nast puj cy program/skrypt napisany w Scilabie: // dokonuj probkowania danej f u n k c j i // domyslnie b i o r e 50 w przod i t y l od x // probkujemy co T function y=aproks ( f, x, T ) y=zeros (1, s i z e ( x, "c" ) ) ; for i=1: s i z e ( x, "c" ) for k=round( x ( i ) /T ) T 50 T : T : round( x ( i ) /T ) T+50 T y ( i )=y ( i )+f ( k ) sinc ( %pi ( x ( i ) k ) /T ) ; end end endfunction // zle, bo za rzadko clf ( ) ; x = 20:001:20; y=aproks ( sin, x, 4 ) ; plot ( x, y ) ; plot ( x, sin ( x ) ) ; // dobrze bo s i n u s ktorego okres j e s t 2 Pi probkujemy co 3<(2 Pi ) /2 clf ( ) ; x = 20:001:20; y=aproks ( sin, x, 3 ) ; plot ( x, y ) ; plot ( x, sin ( x ) ) ; 5