# chap4PointProcessing

advertisement
```Point Processing
• Basic Image Processing Operations
• Arithmetic Operations
• Histograms
SCCS 476
1
Basic Image Processing Operations
Image-Processing operations may be divided into 3 classes based
on information required to perform the transformation.
• Transforms
– process entire image as one large block
• Neighborhood processing
– process the pixel in a small neighborhood of pixels around
the given pixel.
• Point operations
– process according to the pixel’s value alone (single pixel).
SCCS 476
2
Schema of Image Processing
Image
Transform
Transformed
Image
Image-processing operation
Output
Image
Inverse Transform
SCCS 476
Processed
Transformed
Image
3
Arithmetic Operations
•
•
•
•
•
Addition
Subtraction
Multiplication
Division
Complement
SCCS 476
4
Arithmetic Operations (cont)
Let x is the old gray value, y is the new gray value,
c is a positive constant.
•
•
•
•
•
Addition: y = x + c
Subtraction: y = x - c
Multiplication: y = cx
Division: y = x/c
Complement: y= 255 - x
SCCS 476
5
Arithmetic Operations (cont)
•
•
•
•
•
Addition: y = x + c
Subtraction: y = x - c
Multiplication: y = cx
Division: y = x/c
Complement: y= 255 - x
To ensure that the results are integers in the range [0, 255],
the following operations should be performed
• Rounding the result to obtain an integer
• Clipping the result by setting
• y = 255 if y &gt; 255
• y = 0 if y &lt; 0
SCCS 476
6
Arithmetic Operations (cont)
• MATLAB functions
– Addition: imadd(x,y)
• Add two images or add constant to image
– Subtraction: imsubstract(x,y)
• Subtract two images or subtract constant to image
– Multiplication: immultiply(x,y)
• Multiply two images or multiply image by constant
– Division: imdivide(x,y)
• Divide two images or divide image by constant
– Complement: imcomplement(x)
SCCS 476
7
Addition &amp; Subtraction
• Lighten/darken the image
• Some details may be lost
• MATLAB:
– commands:
• x = imread(‘filename.ext’);
• y = uint8(double(x) + c); or
• y = uint8(double(x) - c);
– function:
• x = imread(‘filename.ext’);
• y = imadd(x, c); or
• y = imsubtract(x, c);
SCCS 476
8
Ex: Addition &amp; Subtraction
Added by 128
Subtracted by 128
Draw graphs of the transformation functions !!!
SCCS 476
9
Multiplication &amp; Division
• Lighten/darken the image
• Some details may be lost (but less than addition/subtraction)
• MATLAB:
– commands:
• x = imread(‘filename.ext’);
• y = uint8(double(x)*c); or
• y = uint8(double(x)/c);
– functions:
• x = imread(‘filename.ext’);
• y = immultiply(x, c); or
• y = imdivide(x, c);
SCCS 476
10
Ex: Multiplication &amp; Division
Multiplied by 2
Divided by 2
Draw graphs of the transformation functions !!!
SCCS 476
11
Comparison: Addition VS Multiplication
SCCS 476
12
Comparison: Subtraction VS Division
SCCS 476
13
Complement
• Create the negative image
• MATLAB:
– commands:
• x = imread(‘filename.ext’);
• y = uint8(255 - double(x));
– function:
• x = imread(‘filename.ext’);
• y = imcomplement(x);
SCCS 476
14
Ex: Complement
Draw a graph of the transformation function !!!
SCCS 476
15
Histogram
• Graph showing the number of pixels for each
intensity
• Normalized histogram: histogram where the
number of pixel is divided by the total number
of pixel so the range is [0,1]
• Cumulative histogram: histogram which shows
the number of pixels whose intensity is less or
equal to each intensity.
SCCS 476
16
Histogram Example
&gt;&gt; p = imread(‘pout.tif’)
&gt;&gt; inshow(p)
&gt;&gt; figure;imhist(p)
SCCS 476
17
What Histogram Describes?
• Brightness
– dark image has gray levels (histogram) clutered at
the lower end.
– bright image has gray levels (histogram) clutered
at the higher end.
• Contrast
– well contrasted image has gray levels (histogram)
spread out over much of the range.
– low contrasted image has gray levels (histogram)
clutered in the center.
SCCS 476
18
Contrast Enhancement by
Spreading Out Histogram
• Histogram Stretching
(Contrast Stretching)
• Histogram Equalization
SCCS 476
19
1. Histogram Stretching
#pixel
#pixel
Imin
Imax
I
0
SCCS 476
I
max
20
Steps of Histogram/Contrast Stretching
• Create the histogram of the image
Gray level ( i )
No. of gray value ( ni )
0……………………………………………. 15
1……………………………………………. . 0
2……………………………………………. . 0
3……………………………………………. .0
4……………………………………………. . 0
5……………………………………………. 70
6……………………………………………110
7……………………………………………. 45
8…………………………………………… 70
9……………………………………………. 35
10………………………………………..... . 0
11………………………………………….. 0
12…………………………………………... 0
13…………………………………………… 0
14…………………………………………… 0
15………………………………………….. 15
SCCS 476
Draw the histogram.
21
Steps of Histogram/Contrast Stretching (cont)
• From the histogram, stretch out the gray levels in the
center of the range by applying the piecewise linear
function
– Ex: [5,9]  [2,14]
– y = [(14 – 2)/(9 – 5)](x – 5) + 2,
Draw a graph of transformation
x y
5
6
7
8
9
2
5
8
11
14
• Gray levels outside this range are either left as original
values or transforming according to the linear function at
the ends of the graph.
SCCS 476
22
Steps of Histogram/Contrast Stretching (cont)
• Change the old gray values to the new gray values by
using the piecewise linear function from the previous
step as a mapping function.
• Create the histogram from the new image
SCCS 476
23
Histogram Stretching: Example
original
output
SCCS 476
24
Histogram before/after Adjustment
After
Before
SCCS 476
25
Histogram Mapping: Piecewise Linear
#pixel
Imin
#pixel
Ix1
Ix2
Imax
I
Imin Iy1
Iy2 Imax
I
Mapping function:
I  Ix1 or I  Ix2
 I;
 ( I  Ix1)

 ( Iy2  Iy1)  Iy1; Ix1  I  Ix2
 ( Ix2  Ix1)
SCCS 476
26
MATLAB: Histogram/Contrast
Stretching
• Command: imadjust
• Syntax: imadjust(x, [a,b], [c,d]);
imadjust(x, [a,b], [c,d], );
– convert intensity x  a to c
– convert intensity x  b to d
– values of a,b,c,d must be between 0 and 1
–  : positive constant (describe the shape of the function,
&lt; 1 concave downward, &gt; 1 concave upward)
SCCS 476
27
Transformation Function with Gamma
(Power –Law Transformation)
Brighten image
Linear mapping
Darken image

 input a 
output 
 ( d  c)  c
 ba 
SCCS 476
28
Example of Adjusting by the PowerLaw Transformation
Adjust by using
Gamma = 0.5
Original
SCCS 476
29
MATLAB: Piecewise Linear
• A MATLAB function for applying a piecewise
linear-stretching function (see Figure 4.15)
• Command: find
• Syntax: find(condition)
• Ex
pix = find(im &gt;= a(i) &amp; im &lt; a(i+1));
pix holds the index for members in im having
intensity between a(i) and a(i+1) include a(i).
SCCS 476
30
2. Histogram Equalization
• The trouble with the methods of histogram
stretching is that they require user input.
• Histogram equalization is an entirely
automatic procedure.
• Idea: Each gray level in the image occurs with
the same frequency.
• Give the output image with uniform intensity
distribution.
SCCS 476
31
Histogram Equalization (cont)
• Mapping function:
g output ( f input ) 
f input
 p(i),
i 0
where p(i) is the PDF of the intensity level i,
obtained from cumulative histogram.
SCCS 476
32
Histogram Equalization: Procedure
Example: Suppose a 4-bit grayscale image has
the histogram associated with a table of the
numbers ni of gray values. (page 78)
SCCS 476
33
Histogram Equalization: Example
BEFORE
AFTER
http://www.mathworks.com/access/helpdesk/help/toolbox/images/histeq.html
SCCS 476
34
MATLAB: Histogram Equalization
• Command: histeq
• Syntax: histeq(image, target_hist)
histeq(image, #bin)
histeq(indexed_im, #bin, target_hist)
histeq(indexed_im, map, #bin)
• Default: #bin = 64
• Output: output_im, [output_im, transform],
new_map, [new_map, transform]
SCCS 476
35
Lookup Tables
• Improve the performance of point processing
• Why?
– one intensity is always mapped to the same value
– reduce the computing time
• Lookup table: array
Input intensity: index in the array
Output intensity: value of the member
SCCS 476
36
Ex: Lookup Table (1)
• Function: output = input/2;
• MATLAB
&gt;&gt; T = uint8(floor(0:255)/2);
&gt;&gt; output = T(input);
SCCS 476
37
Ex: Lookup Table in MATLAB (2)
• Function: 
0.6667 input; input  96

output  2  input 128; 96  input  161
0.6632 input 85.8947;161 input

• MATLAB
&gt;&gt; T1 = 0.6667*[0:95];
&gt;&gt; T2 = 2*[96:160] – 128;
&gt;&gt; T3 = 0.6632*[161:255] + 85.8947;
&gt;&gt; T = uint8(floor([T1 T2 T3]));
SCCS 476
38
```