2009-08-11 14 views
11

Jaki jest dobry algorytm tworzenia obrazów rastrowych (takich jak this)? Szybkie wyszukiwanie w wyszukiwarce Google wywołuje mnóstwo artykułów na ten temat, ale trudno jest ocenić, które z nich są dobre, skuteczne itd. Czy istnieje najlepszy wybór do robienia tego typu rzeczy?Algorytm do robienia półtonów?

+0

jest tam coś więcej do pytania, które lubisz odpowiedział? Więcej szczegółów? – NoMoreZealots

Odpowiedz

16
  • Przefiltruj do rozdzielczości, którą chcesz , aby "kropki" oddzieliły.
  • Uzyskaj średnią intensywność grupy pikselowej w tym obszarze.
  • Narysuj kropkę w taki sposób, aby powierzchnia kropki była równa wartości procent od bieli do czerni średniej intensywności .

Pomyśl o grupach pikseli jako o siatce sześciokątnej. Użyj funkcji koła, aby zdecydować, które piksele trafią do grupy. Możesz dostroić nakładanie się okręgów, aby dostosować czerń/nasycenie wyjścia. Jest to naprawdę przeznaczone do wyświetlania w wysokiej rozdzielczości, takich jak wydruk. Jeśli robisz to, aby wyświetlać się na ekranie jako efekt wizualny, upewnij się, że używasz procedury wygładzania z kołem aliasingowym, aby zrekompensować niską rozdzielczość ekranu. (W porównaniu z drukiem, nawet HD nie jest tak wysoki.)

Jeśli robisz to, ponieważ podoba ci się efekt, to fajnie. Ale jeśli chcesz tylko ditherować do czarno-białego obrazu, rozważ użycie ditheringu "Floyd-Steinberg". Zapewnia wysoką jakość wyników i rozprowadza błąd na całym obrazie. http://en.wikipedia.org/wiki/Floyd-Steinberg_dithering

+0

http://en.wikipedia.org/wiki/Dither – kenny

+0

Oni mają dobry przykład "floyd-stienberg". Dało mi to najlepsze wyniki w przeszłości. – NoMoreZealots

+0

Przedstawiony tutaj algorytm "narysuj kropkę" osiąga efekt "czarnej kropki" na cytowanej przykładowej stronie internetowej. Ale skonstruowanie ekranu i dostosowanie kształtu kropki do efektu "czarnej kropki" będzie szybsze w czasie wykonywania. –

0

Najprostszym sposobem, aby to zrobić, to iść piksel po pikselu i używać losowości: dla każdego piksela, prawdopodobieństwo barwienia go back = ciemność oryginalnego koloru.

To może dać dwu-liniowy algorytm ditheringu. Nie będzie wyglądać tak ładnie, jak Floyd-Steinberg (ponieważ ten będzie śledził błędy), lub tak artystycznie jak "kafelek, a następnie umieścić dyski w każdym z płytek, tak aby ułamek czerni = średnia ciemność w oryginalnym kafelku", ale w praktyce działa całkiem nieźle.

+0

Powoduje to, że gęstość wyjściowa wpływa na poziom szarości wejściowej, ale nie uzyskuje klastrowego wyglądu określonego cytowanego przykładu. –

+0

Halftone oznacza (cytat wikipedia) "Halftone to technika reprograficzna, która symuluje ciągłe obrazy tonalne za pomocą kropek, różniących się rozmiarem lub odstępami." Próbka, którą pokazał, różni się rozmiarem, moja jest różna. Oba zająkają półtonami, choć z pewnością nie będę udawał, że moje wygląda tak dobrze, jak na przykład: jak powiedziałem, wartość tej odpowiedzi jest taka, że ​​jest niezwykle prosta do zrealizowania. – redtuna

+0

hare -> są (oops, przepraszam za literówkę! Chciałabym móc edytować moje komentarze) – redtuna

4

Półtonowanie jest bardzo wydajne.

Półton jednoosobowy: Wejście: Piksele z obrazu; prekonstruowany "ekran" zawierający wartości progowe. W czasie wykonywania: Dla każdego kanału koloru dla każdego piksela wybierz jedną wartość progową (indeks na tablicę progową modulo wymiary tablicy). Jedno porównanie między pikselem a progiem określa, czy wartość wyjściowa jest włączona, czy wyłączona.

Generalizuje również wielopoziomowe wyjście, korzystając z wielu ekranów.

Interesującą częścią jest konstrukcja ekranów (tablic progowych). Istnieje wiele odmian - skupiona kropka (AM), stochastyczna (FM), wiele odmian i hybryd, w tym niebieski szum i zielony szum (AM/FM). Zwykle chcesz mieć inny ekran dla każdego kanału kolorów. Tradycyjne zgrupowane ekrany punktowe umieszczają swoje kropki w prostokątnych siatkach, które można opisać na podstawie ich częstotliwości (niska częstotliwość = duże kropki) i kąta nachylenia (zazwyczaj 15 ° dla Cyan, 75 ° dla Magenta, 90 ° dla żółtego i 45 ° dla Czarnego) .

Jeśli chcesz poeksperymentować, metoda bitmapowa programu Photoshop z metodą rastra półtonowego (patrz: tutorial) ma wewnętrzny generator ekranu i wyświetla obraz w odcieniach szarości w bitmapę, tak jak na przykład.

Metody ditheringu sugerowane przez innych wymagają większej liczby pikseli, a dane wyjściowe nie przypominają pokazanego na rastrze półkola z klastrami.

+1

Animowany przykład: http://www.openprocessing.org/visuals/?visualID=911 – biziclop

1

Istnieje wiele implementacji algorytmów do generowania rastrowych obrazów. Możesz rzucić okiem na kody źródłowe. Poniżej przedstawiono kilka implementacji opracowanych w Javie przy użyciu Marvin Image Processing Framework.

obrazu wejściowego:
enter image description here

rozpraszanie błędów (source)
enter image description here

Rylanders (source)
enter image description here

Roztrząsanie (source):
enter image description here

Circles (source):
enter image description here