26.07.2013 Views

Digital Halftoning

Digital Halftoning

Digital Halftoning

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Digital</strong> Image Processing<br />

Ming-Sui (Amy) Lee<br />

Apr. 26, 2007


Announcement<br />

Class Information<br />

Course<br />

No class on May 10<br />

Homework #3<br />

Due on 5/17<br />

Other information<br />

資訊系專題研究說明會<br />

4/27 Fri. 12:40pm, Room103


<strong>Digital</strong> <strong>Halftoning</strong>


<strong>Digital</strong> <strong>Halftoning</strong><br />

Goal<br />

Render the illusion of a continuous-tone<br />

image based on two-tone (half-tone)<br />

display<br />

Applications<br />

Computer hardcopies<br />

Laser printers/dot-matrix printers/color printers<br />

Fax machine<br />

Implementation<br />

Thresholding at 1/2 ?


<strong>Digital</strong> <strong>Halftoning</strong><br />

Basic idea<br />

Spatial modulation<br />

Black/white gray-level image<br />

Darker area denser black points per area<br />

Whiter area sparser black points per area<br />

Three approaches<br />

Patterning<br />

Dithering<br />

Error Diffusion


<strong>Digital</strong> <strong>Halftoning</strong><br />

Patterning<br />

p<br />

p<br />

1 Dot pattern 1 Gray-level pixel<br />

If p=4<br />

16 binary pixels<br />

256 gray levels<br />

Quantization<br />

17 levels (0~16)<br />

Rylander’s recursive<br />

patterning matrices


<strong>Digital</strong> <strong>Halftoning</strong><br />

Patterning<br />

Four steps<br />

Read in the given grey-level image<br />

Quantization<br />

Design the patterning table<br />

Map each pixel to its corresponding pattern<br />

Notes<br />

Simplest way<br />

Generates image with higher spatial resolution<br />

than the source image<br />

Point-to-point ? OR region-to-region?


<strong>Digital</strong> <strong>Halftoning</strong><br />

Dithering<br />

Create an image with the same number of<br />

dots as the number of pixels in the source<br />

image<br />

Idea<br />

F(<br />

j,<br />

k)<br />

N(<br />

j,<br />

k)<br />

H ( j,<br />

k)<br />

Threshold<br />

G(<br />

j,<br />

k)


<strong>Digital</strong> <strong>Halftoning</strong><br />

Dithering<br />

Why adding noise?<br />

Under fixed thresholding taking MSB<br />

E.g. before and after adding noise<br />

To break the monotonicity of accumulated error<br />

in the area of constant (nearly constant) gray<br />

level<br />

White noise/pink noise/blue noise/green noise


<strong>Digital</strong> <strong>Halftoning</strong><br />

Dithering<br />

Noise Type<br />

Power spectral density<br />

White noise Pink noise Blue noise<br />

f f f<br />

Robert Ulichney, “<strong>Digital</strong> <strong>Halftoning</strong>”<br />

http://www.hpl.hp.com/personal/Robert_Ulichney/


<strong>Digital</strong> <strong>Halftoning</strong><br />

Dithering<br />

Another approach<br />

Adaptive thresholding<br />

Threshold the source image with a dither matrix<br />

Whenever the pixel value of the image is greater than<br />

the value in the matrix, a dot on the output image is<br />

filled<br />

Notes<br />

No randomness<br />

Region-to-region<br />

Recursive definition allowed


<strong>Digital</strong> <strong>Halftoning</strong><br />

Dithering<br />

Dither matrix<br />

⎡1<br />

2⎤<br />

⎡3<br />

1⎤<br />

I2 ( i,<br />

j)<br />

= ⎢ ;<br />

3 0<br />

⎥ I<br />

2(<br />

i,<br />

j)<br />

= ⎢ ⎥<br />

⎣ ⎦<br />

⎣0<br />

2⎦<br />

0 lowest threshold<br />

3 highest threshold


<strong>Digital</strong> <strong>Halftoning</strong><br />

Dithering<br />

The general form of the dither matrix<br />

2x2 4x4 8x8 16x16…<br />

I<br />

2n<br />

( i,<br />

j)<br />

=<br />

⎡4I<br />

⎢<br />

⎣4I<br />

I<br />

( i,<br />

( i,<br />

Eg. What is ?<br />

4<br />

n<br />

n<br />

( i,<br />

j)<br />

j)<br />

+ 1<br />

j)<br />

+<br />

3<br />

4I<br />

4I<br />

n<br />

n<br />

( i,<br />

( i,<br />

j)<br />

+ 2⎤<br />

j)<br />

+ 0<br />

⎥<br />


<strong>Digital</strong> <strong>Halftoning</strong><br />

Dithering<br />

Determine the threshold matrix<br />

T ( i,<br />

j)<br />

=<br />

255⋅<br />

I(<br />

i,<br />

j)<br />

+<br />

2<br />

N<br />

0.<br />

5<br />

Eg.<br />

⎡ 5 9 6 10⎤<br />

⎢<br />

13 1 14 2<br />

⎥<br />

I 4(<br />

i,<br />

j)<br />

= ⎢<br />

⎥,<br />

T4<br />

( i,<br />

j)<br />

= ?<br />

⎢ 7 11 4 8 ⎥<br />

⎢<br />

⎥<br />

⎣15<br />

3 12 0 ⎦


<strong>Digital</strong> <strong>Halftoning</strong><br />

Dithering<br />

128 128 128 128<br />

128 128 128 128<br />

128 128 128 128<br />

128 128 128 128


<strong>Digital</strong> <strong>Halftoning</strong><br />

Error diffusion<br />

1975 Floyd & Steinberg<br />

A practical algorithm to implement blue noise<br />

dithering<br />

Framework<br />

F(<br />

j,<br />

k)<br />

~<br />

F(<br />

j,<br />

k)<br />

Error<br />

diffusion<br />

Threshold<br />

G(<br />

j,<br />

k)<br />

error


<strong>Digital</strong> <strong>Halftoning</strong><br />

Error diffusion<br />

1975 Floyd & Steinberg<br />

Normalize F(j,k) to lie between [0,1]<br />

Set threshold=0.5<br />

Output image: 0 or 1<br />

if<br />

~<br />

F(<br />

j,<br />

k)<br />

≥<br />

0.<br />

5 → G(<br />

j,<br />

k)<br />

= 1<br />

if<br />

~<br />

F(<br />

j,<br />

k)<br />

< 0.<br />

5 → G(<br />

j,<br />

k)<br />

= 0<br />

Define<br />

~<br />

E(<br />

j,<br />

k)<br />

= F(<br />

j,<br />

k)<br />

− G(<br />

j,<br />

k)


<strong>Digital</strong> <strong>Halftoning</strong><br />

Error diffusion<br />

Error diffusion filter masks<br />

1975 Floyd Steinberg:<br />

1976 Jarvis et al:<br />

1<br />

48<br />

⎛0<br />

⎜<br />

⎜0<br />

⎜0<br />

⎜<br />

⎜3<br />

⎜<br />

⎝1<br />

1<br />

16<br />

0<br />

0<br />

0<br />

5<br />

3<br />

⎛0<br />

⎜<br />

⎜0<br />

⎜<br />

⎝3<br />

0<br />

0<br />

0<br />

7<br />

5<br />

0<br />

0<br />

5<br />

0<br />

0<br />

7<br />

5<br />

3<br />

0⎞<br />

⎟<br />

7⎟<br />

1⎟<br />

⎠<br />

0⎞<br />

⎟<br />

0⎟<br />

5⎟<br />

⎟<br />

3⎟<br />

1<br />

⎟<br />


<strong>Digital</strong> <strong>Halftoning</strong><br />

Error diffusion<br />

Error diffusion + serpentine scanning<br />

Right to Left<br />

Step 1 Left to Right<br />

1<br />

16<br />

⎛0<br />

⎜<br />

⎜0<br />

⎜<br />

⎝3<br />

0<br />

0<br />

5<br />

0⎞<br />

⎟<br />

7⎟<br />

1⎟<br />

⎠<br />

1<br />

16<br />

⎛0<br />

⎜<br />

⎜7<br />

⎜<br />

⎝1<br />

0<br />

0<br />

5<br />

0⎞<br />

⎟<br />

0⎟<br />

3⎟<br />

⎠<br />

Left to Right Right to Left<br />

Step 2<br />

//One complete cycle//


<strong>Digital</strong> <strong>Halftoning</strong><br />

Multi-scale Error diffusion<br />

Several issues<br />

Region-to-region mapping<br />

Multi-resolution<br />

Time series/causal error diffusion process<br />

Easy to implement<br />

Causality appears to be artificial in images<br />

Is non-causal error diffusion possible?<br />

Quality metrics of halftoned images


<strong>Digital</strong> <strong>Halftoning</strong><br />

Multi-scale Error diffusion<br />

“A multiscale error diffusion technique for digital halftoning”<br />

Ioannis Katsavounidis and C. –C. Jay Kuo<br />

Problem set-up<br />

X ( i,<br />

j)<br />

∈[<br />

0,<br />

1]<br />

Input image <br />

Output image B(<br />

i,<br />

j)<br />

∈{<br />

0,<br />

1}<br />

Error image E( i,<br />

j)<br />

= X ( i,<br />

j)<br />

− B(<br />

i,<br />

j)<br />

Intermediate stage <br />

X<br />

( i , j ), 0 ≤ k ≤ r,<br />

r = log N<br />

X<br />

k<br />

k<br />

( i<br />

k<br />

k<br />

,<br />

j<br />

k<br />

k<br />

)<br />

=<br />

1<br />

1<br />

∑∑<br />

i= 0 j=<br />

0<br />

X<br />

k + 1<br />

( 2i<br />

k<br />

2<br />

+ i,<br />

2 j<br />

k<br />

+<br />

j)


<strong>Digital</strong> <strong>Halftoning</strong><br />

Multi-scale Error diffusion<br />

input output error<br />

X<br />

X<br />

M<br />

X<br />

0<br />

1<br />

r<br />

B<br />

B<br />

M<br />

0<br />

1<br />

Br<br />

Ek ( ik<br />

, jk<br />

) = X k ( ik<br />

, jk<br />

) − Bk<br />

( ik<br />

, jk<br />

), 0 ≤ k ≤ r<br />

Goal: minimize the error pyramid in a certain way!<br />

E<br />

E<br />

M<br />

0<br />

1<br />

Er


<strong>Digital</strong> <strong>Halftoning</strong><br />

Multi-scale Error diffusion<br />

//Step 1// Initialization<br />

Set the entire output image pyramid to “0”<br />

//Step 2// Dot assignment<br />

1 parent node distributes its dots (integer numbers)<br />

to 4 children<br />

//Step 3// Error diffusion process<br />

1<br />

12<br />

⎛1<br />

2 1⎞<br />

⎛0<br />

0 0⎞<br />

⎛0<br />

0 0⎞<br />

⎜ ⎟ 1 ⎜ ⎟ 1<br />

⎜ ⎟<br />

⎜2<br />

−12<br />

2⎟<br />

⎜2<br />

−8<br />

2⎟<br />

⎜0<br />

− 5 2⎟<br />

⎜ ⎟ 8<br />

⎝1<br />

2 1⎠<br />

⎜ ⎟<br />

5 ⎜ ⎟<br />

⎝1<br />

2 1⎠<br />

⎝0<br />

2 1⎠<br />

center side corner


<strong>Digital</strong> <strong>Halftoning</strong><br />

Multi-scale Error diffusion<br />

Quality management<br />

MSE vector<br />

MSEV<br />

Notes<br />

⎛ MSE<br />

⎜<br />

⎜ MSE<br />

= ⎜ M<br />

⎜<br />

⎝<br />

0<br />

1<br />

MSEr<br />

⎞<br />

⎟<br />

⎟<br />

⎟<br />

⎟<br />

⎠<br />

MSE<br />

−12<br />

∑∑<br />

i= 0 j=<br />

0<br />

Preserve contrast of the original image<br />

Does not over-smooth the image<br />

k<br />

=<br />

1<br />

N<br />

2<br />

2<br />

k k<br />

−1<br />

E<br />

2<br />

k<br />

( i,<br />

j)


<strong>Digital</strong> <strong>Halftoning</strong><br />

Experimental results


<strong>Digital</strong> <strong>Halftoning</strong><br />

Experimental results


<strong>Digital</strong> <strong>Halftoning</strong><br />

Experimental results<br />

Visual cryptography<br />

“visual cryptography based on void-and-cluster halftoning<br />

technique” E. Myodo, S. Sakazawa and Y. Takishima<br />

+ =?


Texture Analysis


Texture Analysis<br />

Image analysis and its applications<br />

Noise removal<br />

Enhancement<br />

restoration<br />

Edge detection,<br />

Texture analysis<br />

Input image<br />

preprocessing<br />

Feature<br />

extraction<br />

segmentation<br />

Classification &<br />

Symbolic<br />

representation<br />

Object understanding &<br />

Scene interpretation<br />

Image analysis<br />

( Low-level of<br />

Computer vision tasks)<br />

Computer vision


Texture Analysis<br />

What is texture?<br />

No mathematical definition<br />

Semi-regular structured patterns of object<br />

surfaces such as sand, grass, wool, cloth, leaves,<br />

etc.<br />

Why texture analysis?<br />

People started to be interested in late 50’s and<br />

early 60’s<br />

Analyze aerial images, e.g.


Texture Analysis<br />

Example


Texture Analysis<br />

History of texture analysis<br />

Fourier Spectra methods<br />

Edge Detection Methods<br />

Autocorrelation Methods<br />

Decorrelation Methods<br />

Dependency Matrix Method


Texture Analysis<br />

Fourier Spectra methods<br />

No continuous work for a long while<br />

Edge Detection Methods<br />

Edge detection<br />

Use edge density and orientation as texture<br />

features


Texture Analysis<br />

Autocorrelation Methods<br />

Treat the texture pattern as a 2D random process<br />

Statistical approach<br />

E{ F(<br />

x,<br />

y)<br />

F(<br />

x −<br />

Δx,<br />

y − Δy)}


Texture Analysis<br />

Decorrelation Methods<br />

2D whitening filter<br />

2D<br />

whitening<br />

filter<br />

2<br />

σ


Texture Analysis<br />

Dependency Matrix Method<br />

Joint probability<br />

P(<br />

a,<br />

b |<br />

j,<br />

k,<br />

Δj,<br />

Δk)<br />

= Pr ob{<br />

F(<br />

j,<br />

k)<br />

= a,<br />

F(<br />

j − Δj,<br />

k − Δk)<br />

= b,<br />

0 ≤ a,<br />

b ≤ L −1}<br />

Not successful!!


Texture Analysis<br />

Laws, 1979, a conference paper<br />

Micro structure method<br />

Multi-channel method<br />

Find local features<br />

F ( j,<br />

k)<br />

m i<br />

( j,<br />

k)<br />

For 3x3 mask<br />

i=1,2,3,…,9<br />

M i<br />

( j,<br />

k)<br />

Energy<br />

computation<br />

i T

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!