Digital Halftoning
Digital Halftoning
Digital Halftoning
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