2014-02-26 4 views
1

floyd 알고리즘을 구현하려고하는데 작동하지 않는 것 같습니다. Floyd-Steinberg 디더링이 작동하지 않음

내가 플로이드없이 위키 피 디아 에서 의사 알고리즘을 사용 http://img15.hostingpics.net/pics/298623Capturedcran20140226165024.png 플로이드와

http://img15.hostingpics.net/pics/968250Capturedcran20140226165035.png

이 내 코드입니다 :

template<> 
Image<ubyte>* Image<ubyte>::floydSteinberg() const 
{ 
    Image<ubyte>* tmp = new Image<ubyte>(this->width, this->height); 

    for (int i=0; i < width*height; i++) 
      tmp->array[i]= this->array[i]; 


    for (int y = 0; y< this->height; y++){ 

     for (int x = 1; x<this->width; x++){ 

      ubyte oldpixel = tmp->pixel(x, y); 
      ubyte newpixel = (oldpixel > 128) ? 255 : 0; 
      tmp->pixel(x,y) = newpixel; 
      ubyte propagationErreur = oldpixel - newpixel; 

      tmp->pixel(x+1,y) =tmp->pixel(x+1,y) + 7.0/16 * propagationErreur; 
      tmp->pixel(x-1,y+1) = tmp->pixel(x-1,y+1) + 3.0/16 * propagationErreur ; 
      tmp->pixel(x,y+1) = tmp->pixel(x,y+1) + 5.0/16 * propagationErreur ; 
      tmp->pixel(x+1,y+1) = tmp->pixel(x+1,y+1) + 1.0/16 * propagationErreur ; 

     } 
    } 


    return tmp; 
} 
+0

플로이드는 [Steinberg의 라이브러리] (http://www.2038bug.com/ptrans/ptrans.c.html)에 반드시 사용됩니다. 도서관 없이는 –

+0

할 수 없습니까? –

+0

@ Pépito 왜 그것이 작동하지 않는다고 생각합니까? – anatolyg

답변

3
ubyte newpixel = (oldpixel > 128) ? 0 : 255; 

이어야합니다

ubyte newpixel = (oldpixel > 128) ? 255 : 0; 

또 다른 가능한 문제 : propagationErreur에 서명해야한다고 제안합니다.

+0

예. 나는 이미 그것을 둡니다. 나는 시험을하고 싶었고 그것을 잊어 버리는 것을 잊어 버렸다. 결과는 다음과 같습니다. http://zupimages.net/up/14/09/cz98.png –

+0

@ Pépito 그림이 cz98.png 인 것처럼 보입니다 - 네거티브 이미지, 255 : 0으로 수정하기 전입니까? 그리고 내 새 편집 – MBo

+0

고마워요. 그것은 서명 된 유형 도움이 보인다. 그래서 http://zupimages.net/up/14/09/sct8.png처럼 보입니다. –