Wpisany przez Dariusz Rorat,
09 sierpnia 2010 20:40
Sepia jest jedną z technik tonowania odbitek fotograficznych. Jest to obraz o charakterystycznym brązowym zabarwieniu. Aby wykonać obraz w sepii należy najpierw obraz kolorowy przekształcić w obraz o odcieniach szarości. Następnie dokonuje się koloryzacji tego obrazu określoną barwą. W tym celu odczytuje się barwę piksela dla obrazu w odcieniach szarości. Później dokonuje się wyodrębnienia każdej składowej R, G, B. Po tej operacji dodaje się do składowej zielonej zadany współczynnik wypełnienia W a do czerwonej dwukrotność tego współczynnika. Składowa niebieska pozostaje bez zmian.
Po tej operacji dokonuje się syntezy koloru z trzech składowych. Operacje wykonuje się w pętli dla każdego piksela obrazu.
Zdjęcie z lewej to obraz oryginalny, po środku obraz w odcieniach szarości i z prawej obraz w sepii.
Ustaw ścieżkę do pliku (lub pozostaw tą domyślną), wczytaj plik a następnie użyj przycisku "Sepia" by sprawdzić działanie metody.
Ze względu na zabezpieczenia w przeglądarkach, skrypt otwiera wyłącznie pliki graficzne w obrębie naszego serwisu, np:
http://www.algorytm.org/images/stories/po/anaglif_lewy.jpg
http://www.algorytm.org/images/stories/po/orig.gif
http://www.algorytm.org/images/stories/mb/hsv.jpg
R = R + 2*W\\
G = G + W\\
B = B
gdzie W to zadany współczynnik wypełnienia barwą (od 20 do 40).Po tej operacji dokonuje się syntezy koloru z trzech składowych. Operacje wykonuje się w pętli dla każdego piksela obrazu.
Zdjęcie z lewej to obraz oryginalny, po środku obraz w odcieniach szarości i z prawej obraz w sepii.
Przykład w JavaScript:
Ustaw ścieżkę do pliku (lub pozostaw tą domyślną), wczytaj plik a następnie użyj przycisku "Sepia" by sprawdzić działanie metody.
Ze względu na zabezpieczenia w przeglądarkach, skrypt otwiera wyłącznie pliki graficzne w obrębie naszego serwisu, np:
http://www.algorytm.org/images/stories/po/anaglif_lewy.jpg
http://www.algorytm.org/images/stories/po/orig.gif
http://www.algorytm.org/images/stories/mb/hsv.jpg
|
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Tomasz Lubiński | C# | Visual Studio C# 2010 Express | .cs | .cs | ***** / 0 |
Dariusz Rorat | C/C++ | Borland Builder 6 | .cpp | .cpp | ***** / 5 |
Dariusz Rorat | Delphi/Pascal | Borland Delphi 7 | .pas | .pas | ***** / 1 |
Tomasz Lubiński | JavaScript | Firefox 3.0+, Safari 3.0+, Chrome 3.0+, Opera 9.5+, IE 9.0+ | .js | .js | ***** / 0 |
Poprawiony: 17 sierpnia 2012 19:26
Komentarze
+1
#
ryjek
2013-04-26 11:47
Heh, korzystają z zaprezentowaneg o sposobu pojawiają mi się artefakty w postaci jasnoniebieskic h plam (tam, gdzie jest biały).
Odpowiedz | Odpowiedz z cytatem | Cytować
0
#
Tomasz Lubiński
2015-09-07 07:56
Zapewne nie zabezpieczyłeś się przed przekroczeniem zakresu przez wartości R i G. One w trakcie działania algorytmu są zwiększane i trzeba uważać by nie przekroczyć ich wartości maksymalnej (w przypadku gdyby wyliczona nowa wartość przekraczała maksymalną dopuszczalną wartość, należy użyć po prostu tej wartości maksymalnej)
Odpowiedz | Odpowiedz z cytatem | Cytować
0
#
kaś
2013-09-15 17:11
Witam, jak zrobić by te implementacje działały?
Odpowiedz | Odpowiedz z cytatem | Cytować
0
#
a
2015-09-06 23:27
Podszkolić się ;]
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz