Zadania
Do zaimplementowania dla obrazów kolorowych i skali odcieni szarości:
Funkcja
colorFit
działającą dla obrazu kolorowego i skali odcieni szarości, która dla podanego przez was koloru piksela zwróci najbliższy mu kolor z podanej palety kolorów. Funkcja przyjmuje na wejściu dwa parametry:- wartość koloru
- paletę kolorów w formie tabeli Nx1 - dla obrazów w skali odcieni szarości lub Nx3 dla obrazów w RGB, gdzie N to ilość kolorów w palecie.
Prawidłowo napisana funkcja wykorzystująca funkcje podpowiedziane w instrukcji powinna działać niezależnie od tego, czy podajecie mu dane w RGB, czy w skali odcieni szarości o ile będą to prawidłowo ustawione dane. (0,2 pkt)
Trzy funkcje realizujące dithering. Poprawnie napisane działająca funkcja powinna działać jednakowo zarówno dla obrazów kolorowych, jak i tych w skali odcieni szarości, o ile dostaną one dostarczoną odpowiednią paletę. Proszę również przetestować (0,2 pkt):
- Losowy (dla obrazów binarnych = jedna warstwa)
- Zorganizowany dla co najmniej M2 (macierz o rozmiarze 4x4)
- Floyd–Steinberga
Przebadać ich skuteczność działania poprawnie wykonanych funkcji ditheringu na załączonych próbkach. Wybrać kilka z nich zarówno dla obrazów kolorowych, jak i w skali odcieni szarości — tu zawsze proszę przetestować na głowie figury i porównać wynik działania z wynikami zaprezentowanymi w instrukcji, żeby mieć pewność, że macie poprawne wyniki. (0,3 pkt)
- Porównać działanie algorytmów oraz czystej kwantyzacji:
- Dla danych w skali odcieni szarości zapisanych na 1,2 oraz 4 bitach.
- Dla danych kolorowych wykorzystać podane wcześniej w instrukcji palety kolorów (8,16 - kolorów).
- Porównać działanie algorytmów oraz czystej kwantyzacji:
Dla obrazów kolorowych porównanie działanie opracowanych algorytmów dla innych przestrzeni koloru. (0,3 pkt)
- Proces przeprowadzić proces zmiany przestrzeni koloru z
RGB
do przestrzeniCMYK
(kod na konwersję poniżej) orazYCbCr
. - Wykonanie funkcji ditheringu w 3 przestrzeniach (
RGB
,CMYK
orazYCbCr
) dla palet wygenerowanych funkcją zamieszczona poniżej (dla 1,2,4-bitów). - Porównać otrzymane wyniki dla tych przestrzeni. Wyniki porównywać w przestrzeni
RGB
, czyli pozostałe przestrzenie przeliczyć na powrót doRGB
- Proces przeprowadzić proces zmiany przestrzeni koloru z
from PIL import Image
def RGBtoCMYK(I):
# zakładamy że I jest na float <0,1>
return np.asarray(Image.fromarray(np.uint8(I*255), 'RGB').convert('CMYK'))/255
def CMYKtoRGB(I):
# zakładamy że I jest na float <0,1>
return np.asarray(Image.fromarray(np.uint8(I*255), 'CMYK').convert('RGB'))/255
def RGBtoYCbCr(I):
# zakładamy że I jest na float <0,1>
return np.asarray(Image.fromarray(np.uint8(I*255), 'RGB').convert('YCbCr'))/255
def YCbCrtoRGB(I):
# zakładamy że I jest na float <0,1>
return np.asarray(Image.fromarray(np.uint8(I*255), 'YCbCr').convert('RGB'))/255
def genPallet(numColor,bits):
# numColors - ilość kolorów (RGB,YCbCr -3 CMYK - 4)
# bits - ilość bitów
=[]
Xfor i in range(numColor):
0,1,(2**bits)).tolist())
X.append(np.linspace(return np.array(np.meshgrid(*X)).T.reshape(-1,numColor)
Do oddania
- kod źródłowy (jeden plik
.py
) - sprawozdanie z obserwacjami i wynikami w formacie
PDF