2014-04-17 5 views
1

저는 현재 Floyd-Steinberg-Dithering 알고리즘을 Java로 구현하려고합니다. 몇 번의 시도가 실패한 후에 나는 Wikipedia에 나열된 의사 코드를 읽은 후 질문을 보게되었습니다. 내가 달성하기 위해 노력하고있어Floyd-Steinberg-Dithering은 어떻게 작동합니까?

for each y from top to bottom 
for each x from left to right 
    oldpixel := pixel[x][y] 
    newpixel := find_closest_palette_color(oldpixel) 
    pixel[x][y] := newpixel 
    quant_error := oldpixel - newpixel 
    pixel[x+1][y ] := pixel[x+1][y ] + 7/16 * quant_error 
    pixel[x-1][y+1] := pixel[x-1][y+1] + 3/16 * quant_error 
    pixel[x ][y+1] := pixel[x ][y+1] + 5/16 * quant_error 
    pixel[x+1][y+1] := pixel[x+1][y+1] + 1/16 * quant_error 

는 16 색 팔레트에 이미지를 함부로 대하지 입니다. 그러나 픽셀에 오류를 추가 한 후에 팔레트에도 존재하지 않는 완전히 새로운 색상을 만들지 않습니까?

하지만이 이미지를 만들려면 색상 팔레트에 전체 이미지를 다시 넣어야합니까?

미리 감사드립니다.

답변

1

아직 양자화 된 오류는 아직 팔레트에 매핑되지 않은 (양자화 된) 픽셀에만 추가된다는 점에 유의하십시오!

오류가 추가 된 후에도 이러한 픽셀이 매핑되고 해당 오류가 처리되지 않은 다른 픽셀로 전달되는 것을 의미합니다.

알고리즘이 끝나면 모든 픽셀이 매핑되고 마지막 남은 오류는 무시됩니다.

결과적으로 양자화 작업이 끝날 때 팔레트 외부에 픽셀이 없어야합니다.

+0

고마워요! 이것은 많은 의미를 가지며 완벽하게 해결하는 데 도움이되었습니다. –

0

나는 수정 된 알고리즘을 사용하고 있습니다 :

for each y from 0 to ImageHeight-1 
    for each x from 1 to ImageWidth-1 
     oldpixel := pixel[x][y] 
     newpixel := find_closest_palette_color(oldpixel) 
     pixel[x][y] := newpixel 
     quant_error := oldpixel - newpixel 
     pixel[x+1][y ] := pixel[x+1][y ] + 7/16 * quant_error 
     pixel[x-1][y+1] := pixel[x-1][y+1] + 3/16 * quant_error 
     pixel[x ][y+1] := pixel[x ][y+1] + 5/16 * quant_error 
     pixel[x+1][y+1] := pixel[x+1][y+1] + 1/16 * quant_error 

and i have used this 16 colors palette: 
       **B G R** 
black:   0, 0, 0 
blue:   127, 0, 0 
green:   0, 127, 0 
cyan:   127, 127, 0 
red:   0, 0, 127 
magenta:  127, 0, 0 
brown:  127, 0, 127 
gray:   191, 191, 191 
dark gray:  63, 63, 63 
light blue: 255, 0, 0 
light green: 0, 255, 0 
light cyan: 255, 255, 0 
light red:  0, 0, 255 
pink:   255, 0, 255 
yellow:   0, 255, 255 
white:  255, 255, 255 

결과는 뱀 검사하지 않고, 더 나은이 팔레트이었다 위키 백과에서 권장.

+0

실수로 죄송합니다. 마젠타 색 : 127, 0, 127 갈색 : 0, 127, 127 –