Instrukcja na temat Histogramów oraz operacjach na nich wykonywanych
Zadania
- Napisać funkcje realizujące poniższe zadania, jeżeli potraficie funkcje 2 i 3 można napisać jako jedną (0,3 pkt):
- Funkcję generującą wektor histogramu dla zadanych \(N\) przedziałów (domyślnie równe 255).
- Funkcję generującą rozciągnięcie liniowe obrazu dla wybranego zakresu \(<x_1,x_2>\).
- Funkcję generującą rozciągnięcie nieliniowe obrazu dla wybranego zakresu \(<x_1,x_2>\) na podstawie funkcji dostarczonej jako parametr.
- Funkcję generująca wyrównanie histogramu.
- Przetestować działanie waszych funkcji na dołączonych obrazach w skali odcieni szarości. Sprawdzić poprawność działania samego liczenia histogramu, jak również wszystkich operacji na histogramie (przetestować również kilka różnych podejść do rozciągnięcia nieliniowego — w instrukcji podane są 4 przykłady). (0,35 pkt)
- Przy użyciu dołączonej poniżej funkcji zmniejszającej w sposób losowy dynamikę jednej warstwy, przetestować działanie waszych funkcji na obrazach kolorowych. Konwertujecie obrazy kolorowe do przestrzeni
YCbCr
,HSV
iLab
, a następnie przekazujecie je do funkcji zmniejszającej dynamikę, wskazując odpowiednią warstwę do zmniejszenia dynamiki (Y
,V
iL
). Następnie staracie się naprawić tę warstwę waszymi metodami (rozciągnięciem i wyrównaniem) i obserwujecie wyniki. (0,35 pkt)
def lowerDynamic(img,layer,m=0,n=255):
=img[:,:,layer]
l=np.random.randint(m+50,n-50)
x=np.random.randint(m,x)
x1=np.random.randint(x,n)
x2=np.zeros((n-m+1,))+m
W=n
W[x2:]=np.linspace(0,1,x2-x1)*(n-m)+m
W[x1:x2]=W.astype(img.dtype)
Wfor i,c in enumerate(range(m,n)):
==c]=W[i]
l[l=l
img[:,:,layer]return img