[iadither] [Up] [iaisolines] Halftoning Approximation

iafloyd
Floyd-Steinberg error diffusion.

Synopsis

g = iafloyd( f )

Implemented in Python.

Input

f Image. Gray-scale (uint8 or uint16) or binary image (logical).

input image

Output

g Image. Accepts any image data type.

Description

Floyd-Steinberg error diffusion (1976).

Examples

>>> f1 = iaramp([20,150], 256, [0,255])

              
>>> f2 = iaresize(iaread('woodlog.pgm'), [150,150])

              
>>> f = Numeric.concatenate((f1, f2))

              
>>> g = iafloyd(f)

              
>>> iashow(f)
(170, 150) Min= 0 Max= 255 Mean=95.406 Std=57.48
>>> iashow(g)
(170, 150) Min= 0 Max= 1 Mean=0.374 Std=0.48
f g

Source Code

def iafloyd(f):
    from Numeric import zeros
    f_ = 1.*ianormalize(f, [0,255])
    g = zeros(f_.shape)
    for i in range(f_.shape[0]):
        for j in range(f_.shape[1]):
            if f_[i,j] >= 128:
                g[i,j] = 255
            erro = f_[i,j] - g[i,j]
            if j < f_.shape[1]-1:
                f_[i,j+1] = f_[i,j+1] + 7*erro/16.
            if i < f_.shape[0]-1 and j > 0:
                f_[i+1,j-1] = f_[i+1,j-1] + 3*erro/16.
            if i < f_.shape[0]-1:
                f_[i+1,j] = f_[i+1,j] + 5*erro/16.
            if i < f_.shape[0]-1 and j < f_.shape[1]-1:
                f_[i+1,j+1] = f_[i+1,j+1] + erro/16.
    g = g > 0
    return g
    
[iadither] [Up] [iaisolines] http://www.python.org