Drukarka, czyli kłamstwa Twoich oczu

23.11.2009 - Krzysztof Dryś
TrudnośćTrudność

alternative text Wynik zastosowania poprzedniego algorytmu (przy $ p=50 $).
alternative text Wynik zastosowania poprzedniego algorytmu (przy $ p=125 $).
alternative text Wynik zastosowania poprzedniego algorytmu (przy $ p=180 $).

Skomplikowana propagacja błędu

Przed chwilą dostaliśmy wynik jeszcze lepszy, niż w przypadku stosowania szumu. Ale ciągle jeszcze możemy się poprawić. Usprawnijmy nasz algorytm. Do tej pory propagowaliśmy błąd w bardzo prosty sposób - rozdzielaliśmy go po równo między wszystkich sąsiadów. Jednak można to robić w trochę bardziej zaawansowany sposób. Popatrzmy na następujący algorytm:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
U = obrazek wejściowy
T = obrazek z szumem
p = parametr algorytmu
Dla i = 1...n
 Dla j = 1..m
  Jeżeli U[i,j] > p
   T[i,j] = 255
  W przeciwnym razie:
   T[i,j] = 0 
  błąd = U[i,j] - T[i,j]
  U[i,j+1] += 4/21 błąd
  U[i,j+2] += 2/21 błąd
  U[i+1,j-2] += 1/21 błąd
  U[i+1,j-1] += 2/21 błąd  
  U[i+1,j]   += 4/21 błąd    
  U[i+1,j+1] += 2/21 błąd      
  U[i+1,j+2] += 1/21 błąd        
  U[i+2,j-2] += 1/42 błąd
  U[i+1,j-1] += 1/21 błąd  
  U[i+1,j]   += 2/21 błąd    
  U[i+1,j+1] += 1/21 błąd      
  U[i+1,j+2] += 1/42 błąd        

Ten algorytm działa tak samo jak poprzedni, ale rozdziela błąd na większą liczbę sąsiadów.

alternative text Schemat skomplikowanej propagacji błędu. Czarne pola już przetworzyliśmy i nie możemy ich już modyfikować. Szare pole właśnie przetwarzamy. Liczba oznacza jaką część błędy przydzielamy temu polu. Ważne jest, że wszystkie ułamki sumują się do jedynki - chcemy rodzielić cały błąd!
alternative text Wynik zastosowania algorytmu skomplikowanej propagacji błędu (przy $ p=125 $).

Uwaga o tym, że nie wszyscy mają w życiu równie lekko

Ostatni algorytm dał całkiem niezłe wyniki. Ale czy są wystarczająco dobre? Musicie wiedziecie, że wasza drukarka ma trochę prostsze zadanie, niż mogłoby się wydawać w pierwszej chwili. A to dlatego, że rozdzielczość drukarki (nawet atramentowej!) jest dużo większa niż monitora. To znaczy: piksel na monitorze jest zazwyczaj większy od kropel, które drukarka nanosi na papier. Dlatego ostatni algorytm w rzeczywistości już całkiem nieźle nadaje się do stosowania w drukarkach. Sprawdźcie sami! Zamiast drukować te zdjęcia możecie na przykład odejść parę kroków od monitora.

Możecie też sami poszukać najlepszych współczynników dla algorytmu za pomocą programu, który jest na następnej, ostatniej stronie tego artykułu.

5
Twoja ocena: Brak Ocena: 5 (9 ocen)

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com