Strona główna » Algorytmy » Artykuły » Przyciemnianie
 

Przyciemnianie

Cel

Przyciemnianie obrazu polega na zmianie jasności jego pikseli w kierunku wartości zero. Podczas takiej operacji mogą wystąpić takie problemy jak ujemna wartość jasności co nie jest możliwe z punktu obrazka.

Cechy

Operacja przyciemniania jest:

Przykład

Poniżej zostało przedstawione przykładowe zdjęcie. Przy pomocy przycisków można rozpocząć proces jego pociemniania. W celu przywrócenia początkowego obrazka wystarczy kliknąć 'załaduj obrazek ponownie'.

Implementacja

Funkcja realizująca pociemnianie przyjmuje jeden argument zmiana, który określa o ile ma zostać zmieniona jasność. Przyjmując, że zdjęcie jest w skali szarości, a każdy piksel zajmuje dokładnie jeden bajt to możliwe wartości są z przedziału [1, 255].

C++C#
Python
  1. def Przyciemnij(obrazek, zmiana):
  2.   for y in range(len(obrazek)):
  3.     for x in range(len(obrazek[y])):
  4.       if obrazek[y][x] >= zmiana:
  5.         obrazek[y][x] -= zmiana
  6.       else:
  7.         obrazek[y][x] = 0
  8.   return obrazek

Krytyczne jest wychwycenie wszystkich pikseli, których jasność wyszłaby ujemna. W takich przypadkach należy przypisać wartość 0, ponieważ jest to najmniejsza możliwa wartość bajtu. Jeśli taka operacja zachodzi to pociemnianie jest nieodwracalne. (Chyba, że istnieje możliwość cofnięcia w programie np. Ctrl+Z)

Testowanie funkcji

Działanie napisanej funkcji można sprawdzić przy pomocy poniższego fragmentu kodu, który wczytuje macierz reprezentującą obrazek, a następnie wypisuje taką macierz po zmniejszeniu jasności pikseli.

C++C#
Python
  1. print("Podaj rozmiar obrazka szer x wys:");
  2. [szer, wys] = [int(x) for x in input().split()]
  3. print("Podaj wartości tablicy:");
  4. obrazek = []
  5. for i in range(wys):
  6.   tab = [int(x) for x in input().split()]
  7.   obrazek.append(tab)
  8. zmiana = int(input("Podaj wartość przyciemnienia:\n"))
  9. obrazek = Przyciemnij(obrazek, zmiana)
  10. print("Po zmianie otrzymujemy:")
  11. for y in range(len(obrazek)):
  12.   for x in range(len(obrazek[y])):
  13.     print(obrazek[y][x], end=' ')
  14.   print()