Uploaded by Half Mad

Digital Image Processing S. Jayaraman, S. Esakkirajan And T. Veerakumar

advertisement
Scilab Textbook Companion for
Digital Image Processing
by S. Jayaraman, S. Esakkirajan And T.
Veerakumar1
Created by
R.Senthilkumar
M.E., Assistant Professor
Electronics Engineering
Inst. of Road and Transport Tech., Erode
College Teacher
Dr. R.K.Gnanamurhty, Principal,V. C. E. W.
Cross-Checked by
Anuradha Amrutkar, IIT Bombay
July 31, 2019
1 Funded
by a grant from the National Mission on Education through ICT,
http://spoken-tutorial.org/NMEICT-Intro. This Textbook Companion and Scilab
codes written in it can be downloaded from the ”Textbook Companion Project”
section at the website http://scilab.in
Book Description
Title: Digital Image Processing
Author: S. Jayaraman, S. Esakkirajan And T. Veerakumar
Publisher: Tata McGraw - Hill Education Pvt. Ltd, New Delhi
Edition: 3
Year: 2010
ISBN: 978-0-07-014479-8
1
Scilab numbering policy used in this document and the relation to the
above book.
Exa Example (Solved example)
Eqn Equation (Particular equation of the above book)
AP Appendix to Example(Scilab Code that is an Appednix to a particular
Example of the above book)
For example, Exa 3.51 means solved example 3.51 of this book. Sec 2.3 means
a scilab code whose theory is explained in Section 2.3 of the book.
2
Contents
List of Scilab Codes
4
1 Introduction to Image Processing System
6
2 2D Signals and Systems
9
3 Convolution and Correlation
12
4 Image Transforms
20
5 Image Enhancement
30
6 Image Restoration and Denoising
40
7 Image Segmentation
60
8 Object Recognition
69
9 Image Compression
73
10 Binary Image Processing
77
11 Colur Image Processing
81
12 Wavelet based Image Processing
95
3
List of Scilab Codes
Exa 1.3
Exa
Exa
Exa
Exa
Exa
Exa
Exa
Exa
Exa
1.13
2.12
2.16
3.1
3.2
3.3
3.7
3.8
3.11
Exa 3.12
Exa 3.13
Exa
Exa
Exa
Exa
Exa
Exa
Exa
Exa
3.14
3.15
3.16
3.17
3.18
4.4
4.5
4.6
Exa 4.10
Exa 4.12
Program to calculate number of samples required for an image . . . . . . . . . . . . . .
False contouring Scilab code . . . . . . . . .
Frequency Response . . . . . . . . . . . . .
Frequency Response . . . . . . . . . . . . .
2D Linear Convlolution . . . . . . . . . . .
2D Linear Convolution . . . . . . . . . . . .
2D Linear Convolution . . . . . . . . . . . .
2D Linear Convolution . . . . . . . . . . . .
2D Linear Convolution . . . . . . . . . . . .
Linear Convolution of any signal with an impule signal given rise to the same signal . .
Circular Convolution between two 2D matrices
Circular Convolution exspressed as linear convolution plus alias . . . . . . . . . . . . . .
Linear Cross correlation of a 2D matrix . . .
Circular correlation between two signals . .
Circular correlation between two signals . .
Linear auto correlation of a 2D matrix . . .
Linear Cross correlation of a 2D matrix . . .
DFT of 4x4 grayscale image . . . . . . . . .
2D DFT of 4X4 grayscale image . . . . . . .
Scilab code to intergchange phase information
between two images . . . . . . . . . . . . . .
Program to compute discrete cosine transform
Program to perform KL tranform for the given
2D matrix . . . . . . . . . . . . . . . . . . .
4
6
7
9
9
12
12
13
14
14
15
15
16
17
17
18
18
19
20
20
21
22
24
Exa 4.13
Exa
Exa
Exa
Exa
Exa
Exa
5.5
5.7
5.9
5.13
5.16
5.20
Exa
Exa
Exa
Exa
Exa
6.1
6.5
6.7
6.9
6.13
Exa 6.18
Exa 6.21
Exa 6.23
Exa 6.24
Exa 7.23
Exa 7.25
Exa 7.27
Exa 7.30
Exa 8.4
Exa 8.5
Exa 8.9
Exa 9.9
Exa 9.59
Program to find the singular value decomposition of given matrix . . . . . . . . . . . . .
Scilab code for brightness enhancement . . .
Scilab code for brightness suppression . . . .
Scilab code for Contrast Manipulation . . .
Scilab code to determine image negative . .
Scilab code that performs threshold operation
Program performs gray level slicing without
background . . . . . . . . . . . . . . . . . .
Scilab code to create motion blur . . . . . .
Scilab code performs inverse filtering . . . .
Scilab code performs inverse filtering . . . .
Scilab code performs Pseudo inverse filtering
Scilab code to perform wiener filtering of the
corrupted image . . . . . . . . . . . . . . . .
Scilab code to Perform Average Filtering operation . . . . . . . . . . . . . . . . . . . . .
Scilab code to Perform median filtering . . .
Scilab code to Perform median filtering of colour
image . . . . . . . . . . . . . . . . . . . . .
Scilab code to Perform Trimmed Average Filter . . . . . . . . . . . . . . . . . . . . . . .
Scilab code for Differentiation of Gaussian function . . . . . . . . . . . . . . . . . . . . . .
Scilab code for Differentiation of Gaussian Filter function . . . . . . . . . . . . . . . . . .
Scilab code for Edge Detection using Different
Edge detectors . . . . . . . . . . . . . . . .
Scilab code to perform watershed transform
To verify the given matrix is a covaraince matrix . . . . . . . . . . . . . . . . . . . . . . .
To compute the covariance of the given 2D
data . . . . . . . . . . . . . . . . . . . . . .
Develop a perceptron AND function with bipolar inputs and targets . . . . . . . . . . . .
Program performs Block Truncation Coding
BTC . . . . . . . . . . . . . . . . . . . . . .
Program performs Block Truncation Coding
5
28
30
32
32
34
34
36
40
41
44
46
50
51
53
55
57
60
63
65
65
69
69
71
73
75
Exa 10.17
Exa 10.19
Exa 11.4
Exa 11.12
Exa 11.16
Exa 11.18
Exa 11.21
Exa 11.24
Exa 11.28
Exa 11.30
Exa 11.32
Exa 12.9
Exa 12.42
Exa 12.57
Exa 12.63
Scilab Code for dilation and erosion process
77
Scilab Code to perform an opening and closing operation on the image . . . . . . . . . .
78
Read an RGB image and extract the three
colour components red green blue . . . . . .
81
Read a Colour image and separate the colour
image into red green and blue planes . . . .
82
Compute the histogram of the colour image
84
Perform histogram equalisation of the given
RGB image . . . . . . . . . . . . . . . . . .
86
This program performs median filtering of the
colour image . . . . . . . . . . . . . . . . . .
87
Fitlering only the luminance component . .
89
Perform gamma correction for the given colour
image . . . . . . . . . . . . . . . . . . . . .
90
Perform Pseudo Colouring Operation . . . .
91
Read an RGB image and segment it using the
threshold method . . . . . . . . . . . . . . .
93
Scilab code to perform wavelet decomposition 95
Scilab code to generate different levels of a
Gaussian pyramid . . . . . . . . . . . . . . .
96
Scilab code to implement watermarking in spatial domain . . . . . . . . . . . . . . . . . .
97
Scilab code to implement wavelet based watermarking . . . . . . . . . . . . . . . . . . 100
6
List of Figures
1.1
False contouring Scilab code . . . . . . . . . . . . . . . . . .
8
2.1
2.2
Frequency Response . . . . . . . . . . . . . . . . . . . . . .
Frequency Response . . . . . . . . . . . . . . . . . . . . . .
10
11
4.1
4.2
4.3
Scilab code to intergchange phase information between two
images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Program to compute discrete cosine transform . . . . . . . .
Program to compute discrete cosine transform . . . . . . . .
23
25
26
5.1
5.2
5.3
5.4
5.5
5.6
Scilab code for brightness enhancement . . . . . . . . . .
Scilab code for brightness suppression . . . . . . . . . . .
Scilab code for Contrast Manipulation . . . . . . . . . .
Scilab code to determine image negative . . . . . . . . .
Scilab code that performs threshold operation . . . . . .
Program performs gray level slicing without background
31
33
35
35
37
39
6.1
6.2
6.3
6.4
6.5
6.6
6.7
Scilab
Scilab
Scilab
Scilab
Scilab
Scilab
Scilab
code
code
code
code
code
code
code
.
.
.
.
.
.
.
.
.
.
.
.
to create motion blur . . . . . . . . . . . . . . .
performs inverse filtering . . . . . . . . . . . . .
performs inverse filtering . . . . . . . . . . . . .
performs inverse filtering . . . . . . . . . . . . .
performs Pseudo inverse filtering . . . . . . . . .
to perform wiener filtering of the corrupted image
to Perform Average Filtering operation . . . . .
7
41
43
45
47
49
52
54
6.8 Scilab code to Perform median filtering . . . . . . . . . . . .
6.9 Scilab code to Perform median filtering of colour image . . .
6.10 Scilab code to Perform Trimmed Average Filter . . . . . . .
56
57
59
7.1
7.2
7.3
7.4
7.5
7.6
Scilab
Scilab
Scilab
Scilab
Scilab
Scilab
61
62
63
64
66
68
9.1
Program performs Block Truncation Coding . . . . . . . . .
76
10.1 Scilab Code for dilation and erosion process . . . . . . . . .
10.2 Scilab Code to perform an opening and closing operation on
the image . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
code
code
code
code
code
code
for Differentiation of Gaussian function . . . . .
for Differentiation of Gaussian function . . . . .
for Differentiation of Gaussian Filter function . .
for Differentiation of Gaussian Filter function . .
for Edge Detection using Different Edge detectors
to perform watershed transform . . . . . . . . .
11.1 Read an RGB image and extract the three colour components
red green blue . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2 Read a Colour image and separate the colour image into red
green and blue planes . . . . . . . . . . . . . . . . . . . . . .
11.3 This program performs median filtering of the colour image .
11.4 Fitlering only the luminance component . . . . . . . . . . .
11.5 Perform gamma correction for the given colour image . . . .
11.6 Perform Pseudo Colouring Operation . . . . . . . . . . . . .
11.7 Read an RGB image and segment it using the threshold method
80
83
85
88
90
91
93
94
12.1 Scilab code to generate different levels of a Gaussian pyramid 98
12.2 Scilab code to implement watermarking in spatial domain . . 100
8
Chapter 1
Introduction to Image
Processing System
Scilab code Exa 1.3 Program to calculate number of samples required for an image
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// C a p t i o n : Program t o c a l c u l a t e number o f s a m p l e s
r e q u i r e d f o r an image
// Example1 . 3
// p a g e 12
clc ;
close ;
// d i m e n s i o n o f t h e image i n i n c h e s
m = 4;
n = 6;
N = 400; // number o f d o t s p e r i n c h i n e a c h d i r e c t i o n
N2 = 2* N ; // number o f d o t s p e r i n c h i n b o t h
horizontal & vertical
Fs = m * N2 * n * N2 ;
disp ( Fs , ’ Number o f s a m p l e s r e u q i r e d t o p r e s e r v e t h e
i n f o r m a t i o n i n t h e image= ’ )
// R e s u l t
// Number o f s a m p l e s r e u q i r e d t o p r e s e r v e t h e
i n f o r m a t i o n i n t h e image=
// 1 5 3 6 0 0 0 0 .
9
check Appendix AP 4 for dependency:
gray.sci
check Appendix AP 5 for dependency:
grayslice.sci
Scilab code Exa 1.13 False contouring Scilab code
1 // C a p t i o n : F a l s e c o n t o u r i n g S c i l a b c o d e
2 // F i g 1 . 1 3
3 // p a g e 13
4 clc ;
5 close ;
6 a = ReadImage ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 \ t i g e r p u b . j p g
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
’ );
a = uint8 ( a ) ;
figure
imshow ( a )
title ( ’ O r i g i n a l image ’ ) ;
// u s i n g 128 g r a y l e v e l s
figure
a_128 = grayslice (a ,128) ;
gray_128 = gray (128) ;
ShowImage ( a_128 , ’ Image w i t h 128 g r a y l e v e l s ’ ,
gray_128 ) ;
// u s i n g 64 g r a y l e v e l s
figure
a_64 = grayslice (a ,64) ;
gray_64 = gray (64) ;
ShowImage ( a_64 , ’ Image w i t h 64 g r a y l e v e l s ’ , gray_64 ) ;
// u s i n g 32 g r a y l e v e l s
figure
a_32 = grayslice (a ,32) ;
10
Figure 1.1: False contouring Scilab code
24 gray_32 = gray (32) ;
25 ShowImage ( a_32 , ’ Image w i t h 32 g r a y l e v e l s ’ , gray_32 ) ;
26 // u s i n g 16 g r a y l e v e l s
27 figure
28 a_16 = grayslice (a ,16) ;
29 gray_16 = gray (16) ;
30 ShowImage ( a_16 , ’ Image w i t h 16 g r a y l e v e l s ’ , gray_16 ) ;
31 // u s i n g 8 g r a y l e v e l s
32 a_8 = grayslice (a ,8) ;
33 gray_8 = gray (8) ;
34 ShowImage ( a_8 , ’ Image w i t h 8 g r a y l e v e l s ’ , gray_8 ) ;
11
Chapter 2
2D Signals and Systems
Scilab code Exa 2.12 Frequency Response
1 // C a p t i o n : F r e q u e n c y R e s p o n s e
2 // F i g 2 . 1 2
3 // p a g e 60
4 clc ;
5 close ;
6 [X , Y ] = meshgrid ( - %pi :.09: %pi ) ;
7 Z = 2* cos ( X ) +2* cos ( Y ) ;
8 surf (X ,Y , Z ) ;
9 xgrid (1)
Scilab code Exa 2.16 Frequency Response
1
2
3
// C a p t i o n : F r e q u e n c y R e s p o n s e
// F i g 2 . 1 6
// p a g e 64
12
Figure 2.1: Frequency Response
4 clc ;
5 close ;
6 [X , Y ] = meshgrid ( - %pi :.05: %pi ) ;
7 Z = 2 - cos ( X ) - cos ( Y ) ;
8 surf (X ,Y , Z ) ;
9 xgrid (1)
13
Figure 2.2: Frequency Response
14
Chapter 3
Convolution and Correlation
Scilab code Exa 3.1 2D Linear Convlolution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// C a p t i o n : 2−D L i n e a r C o n v o l u t i o n
// Example3 . 1 & Example3 . 4
// p a g e 85 & p a g e 107
clc ;
x =[4 ,5 ,6;7 ,8 ,9];
h = [1;1;1];
disp (x , ’ x= ’ )
disp (h , ’ h= ’ )
[y ,X , H ] = conv2d2 (x , h ) ;
disp (y , ’ L i n e a r 2D c o n v o l u t i o n r e s u l t y = ’ )
// R e s u l t
// L i n e a r 2D c o n v o l u t i o n r e s u l t y =
//
//
4.
5.
6.
//
11.
13.
15.
//
11.
13.
15.
//
7.
8.
9.
Scilab code Exa 3.2 2D Linear Convolution
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// C a p t i o n : 2−D L i n e a r C o n v o l u t i o n
// Example3 . 2 & Example3 . 5 & Example3 . 9
// p a g e 91 & p a g e 108 & p a g e 116
clc ;
x =[1 ,2 ,3;4 ,5 ,6;7 ,8 ,9];
h = [1 ,1;1 ,1;1 ,1];
y = conv2d2 (x , h ) ;
disp (y , ’ L i n e a r 2D c o n v o l u t i o n r e s u l t y = ’ )
// R e s u l t
// L i n e a r 2D c o n v o l u t i o n r e s u l t y =
//
//
1.
3.
5.
3.
//
5.
12.
16.
9.
//
12.
27.
33.
18.
//
11.
24.
28.
15.
//
7.
15.
17.
9.
//
Scilab code Exa 3.3 2D Linear Convolution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// C a p t i o n : 2−D L i n e a r C o n v o l u t i o n
// Example3 . 3 & Example3 . 6 & Example3 . 1 0
// p a g e 100 & p a g e 109 & p a g e 119
clc ;
x =[1 ,2 ,3;4 ,5 ,6;7 ,8 ,9];
h = [3 ,4 ,5];
y = conv2d2 (x , h ) ;
disp (y , ’ L i n e a r 2D c o n v o l u t i o n r e s u l t y = ’ )
// R e s u l t
// L i n e a r 2D c o n v o l u t i o n r e s u l t y =
//
//
3.
10.
22.
22.
15.
//
12.
31.
58.
49.
30.
//
21.
52.
94.
76.
45.
16
Scilab code Exa 3.7 2D Linear Convolution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// C a p t i o n : 2−D L i n e a r C o n v o l u t i o n
// Example3 . 7
// p a g e 111
clc ;
x =[1 ,2;3 ,4];
h = [5 ,6;7 ,8];
y = conv2d2 (x , h ) ;
disp (y , ’ L i n e a r 2D c o n v o l u t i o n r e s u l t y = ’ )
// R e s u l t
// L i n e a r 2D c o n v o l u t i o n r e s u l t y =
// L i n e a r 2D c o n v o l u t i o n r e s u l t y =
//
//
5.
16.
12.
//
22.
60.
40.
//
21.
52.
32
Scilab code Exa 3.8 2D Linear Convolution
1
2
3
4
5
6
7
8
9
10
11
12
// C a p t i o n : 2−D L i n e a r C o n v o l u t i o n
// Example3 . 8
// p a g e 113
clc ;
x =[1 ,2 ,3;4 ,5 ,6;7 ,8 ,9];
h = [1;1;1];
y = conv2d2 (x , h ) ;
disp (y , ’ L i n e a r 2D c o n v o l u t i o n r e s u l t y = ’ )
// R e s u l t
// L i n e a r 2D c o n v o l u t i o n r e s u l t y =
// // 1 .
2.
3.
//
5.
7.
9.
17
13
14
15
//
//
//
12.
11.
7.
15.
13.
8.
18.
15.
9.
Scilab code Exa 3.11 Linear Convolution of any signal with an impule signal given
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// C a p t i o n : L i n e a r C O n v o l u t i o n o f any s i g n a l w i t h an
impulse s i g n a l gives
// r i s e t o t h e same s i g n a l
// Example3 . 1 1
// p a g e 121
clc ;
x =[1 ,2;3 ,4];
h = 1;
y = conv2d2 (x , h ) ;
disp (y , ’ L i n e a r 2D c o n v o l u t i o n r e s u l t y = ’ )
// R e s u l t
// L i n e a r 2D c o n v o l u t i o n r e s u l t y =
// // L i n e a r 2D c o n v o l u t i o n r e s u l t y =
//
//
1.
2.
//
3.
4.
Scilab code Exa 3.12 Circular Convolution between two 2D matrices
1
2
3
4
5
6
7
// C a p t i o n : C i r c u l a r C o n v o l u t i o n b e t w e e n two 2D
matrices
// Example3 . 1 2
// p a g e 122
clc ;
x = [1 ,2;3 ,4];
h = [5 ,6;7 ,8];
X = fft2d ( x ) ; // 2D FFT o f x m a t r i x
18
8 H = fft2d ( h ) ; // 2D FFT o f h m a t r i x
9 Y = X .* H ;
// Element by Element m u l t i p l i c a t i o n
10 y = ifft2d ( Y ) ;
11 disp (y , ’ C i r c u l a r C o n v o l u t i o n R e s u l t y = ’ )
12 // R e s u l t
13 // C i r c u l a r C o n v o l u t i o n R e s u l t y =
14 //
15 //
70.
68.
16 //
62.
60.
Scilab code Exa 3.13 Circular Convolution exspressed as linear convolution plus al
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// C a p t i o n : C i r c u l a r C o n v o l u t i o n e x p r e s s e d a s l i n e a r
convolution plus a l i a s
// Example3 . 1 3
// p a g e 123
clc ;
x = [1 ,2;3 ,4];
h = [5 ,6;7 ,8];
y = conv2d (x , h ) ;
y1 = [ y (: ,1) + y (: , $ ) ,y (: ,2) ];
y2 = [ y1 (1 ,:) + y1 ($ ,:) ; y1 (2 ,:) ]
disp (y , ’ L i n e a r C o n v o l u t i o n r e s u l t y= ’ )
disp ( y2 , ’ c i r c u l a r c o n v o l u t i o n e x p e s s e d a s l i n e a r
convolution plus a l i a s =’)
// R e s u l t
// L i n e a r C o n v o l u t i o n r e s u l t y=
//
//
5.
16.
12.
//
22.
60.
40.
//
21.
52.
32.
//
// c i r c u l a r c o n v o l u t i o n e x p e s s e d a s l i n e a r
convolution plus a l i a s =
//
19
21
22
23
//
//
//
70.
62.
68.
60.
Scilab code Exa 3.14 Linear Cross correlation of a 2D matrix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// C a p t i o n : l i n e a r c r o s s c o r r e l a t i o n o f a 2D m a t r i x
// Example3 . 1 4
// p a g e 129
clc ;
x = [3 ,1;2 ,4];
h1 = [1 ,5;2 ,3];
h2 = h1 (: , $ : -1:1) ;
h = h2 ( $ : -1:1 ,:) ;
y = conv2d (x , h )
disp (y , ’ L i n e a r c r o s s C o r r e l a t i o n r e s u l t y= ’ )
// R e s u l t
// L i n e a r c r o s s C o r r e l a t i o n r e s u l t y=
//
//
9.
9.
2.
//
21.
24.
9.
//
10.
22.
4.
Scilab code Exa 3.15 Circular correlation between two signals
1
2
3
4
5
6
7
8
// C a p t i o n : C i r c u l a r c o r r e l a t i o n b e t w e e n two s i g n a l s
// Example3 . 1 5
// p a g e 131
clc ;
x = [1 ,5;2 ,4];
h = [3 ,2;4 ,1];
h = h (: , $ : -1:1) ;
h = h ( $ : -1:1 ,:) ;
20
9
10
11
12
13
14
15
16
17
18
X = fft2d ( x ) ;
H = fft2d ( h ) ;
Y = X .* H ;
y = ifft2d ( Y ) ;
disp (y , ’ C i r c u l a r C o r r e l a t i o n r e s u l t y= ’ )
// R e s u l t
// C i r c u l a r C o r r e l a t i o n r e s u l t y=
//
//
37.
23.
//
35.
25.
Scilab code Exa 3.16 Circular correlation between two signals
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// C a p t i o n : C i r c u l a r c o r r e l a t i o n b e t w e e n two s i g n a l s
// Example3 . 1 6
// p a g e 134
clc ;
x = [5 ,10;15 ,20];
h = [3 ,6;9 ,12];
h = h (: , $ : -1:1) ;
h = h ( $ : -1:1 ,:) ;
X = fft2d ( x ) ;
H = fft2d ( h ) ;
Y = X .* H ;
y = ifft2d ( Y ) ;
disp (y , ’ C i r c u l a r C o r r e l a t i o n r e s u l t y= ’ )
// R e s u l t
// C i r c u l a r C o r r e l a t i o n r e s u l t y=
//
//
300.
330.
//
420.
450.
Scilab code Exa 3.17 Linear auto correlation of a 2D matrix
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// C a p t i o n : l i n e a r a u t o c o r r e l a t i o n o f a 2D m a t r i x
// Example3 . 1 7
// p a g e 136
clc ;
x1 = [1 ,1;1 ,1];
x2 = x1 (: , $ : -1:1) ;
x2 = x2 ( $ : -1:1 ,:) ;
x = conv2d ( x1 , x2 )
disp (x , ’ L i n e a r a u t o C o r r e l a t i o n r e s u l t x= ’ )
// R e s u l t
// L i n e a r a u t o C o r r e l a t i o n r e s u l t x=
//
//
1.
2.
1.
//
2.
4.
2.
//
1.
2.
1.
Scilab code Exa 3.18 Linear Cross correlation of a 2D matrix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// C a p t i o n : l i n e a r c r o s s c o r r e l a t i o n o f a 2D m a t r i x
// Example3 . 1 8
// p a g e 141
clc ;
x = [1 ,1;1 ,1];
h1 = [1 ,2;3 ,4];
h2 = h1 (: , $ : -1:1) ;
h = h2 ( $ : -1:1 ,:) ;
y = conv2d (x , h )
disp (y , ’ L i n e a r c r o s s C o r r e l a t i o n r e s u l t y= ’ )
// R e s u l t
// L i n e a r c r o s s C o r r e l a t i o n r e s u l t y=
//
//
4.
7.
3.
//
6.
10.
4.
//
2.
3.
1.
22
Chapter 4
Image Transforms
Scilab code Exa 4.4 DFT of 4x4 grayscale image
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// C a p t i o n : 2D DFT o f 4 x4 g r a y s c a l e image
// Example4 . 4
// p a g e 170
clc ;
f = [1 ,1 ,1 ,1;1 ,1 ,1 ,1;1 ,1 ,1 ,1;1 ,1 ,1 ,1];
N =4; //4− p o i n t DFT
kernel = dft_mtx ( N ) ;
F = kernel *( f * kernel ’) ;
disp (F , ’ 2D DFT o f g i v e n 2D image = ’ )
// R e s u l t
// 2D DFT o f g i v e n 2D image =
//
//
16.
0
0
0
//
0
0
0
0
//
0
0
0
0
//
0
0
0
0
Scilab code Exa 4.5 2D DFT of 4X4 grayscale image
23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// C a p t i o n : 2D DFT o f 4 x4 g r a y s c a l e image
// Example4 . 5
// p a g e 171
clc ;
F = [16 ,0 ,0 ,0;0 ,0 ,0 ,0;0 ,0 ,0 ,0;0 ,0 ,0 ,0];
N =4; //4− p o i n t DFT
kernel = dft_mtx ( N ) ;
f = ( kernel *( F * kernel ’) ) /( N ^2) ;
f = real ( f ) ;
disp (f , ’ I n v e r s e 2D DFT o f t h e t r a n s f o r m e d image f = ’
)
// R e s u l t
// I n v e r s e 2D DFT o f t h e t r a n s f o r m e d image f =
//
//
1.
1.
1.
1.
//
1.
1.
1.
1.
//
1.
1.
1.
1.
//
1.
1.
1.
1.
check Appendix AP 1 for dependency:
fft2d.sce
check Appendix AP 2 for dependency:
ifft2d.sce
Scilab code Exa 4.6 Scilab code to intergchange phase information between two imag
1
2
3
4
5
6
// C a p t i o n : S c i l a b c o d e t o i n t e r g c h a n g e p h a s e
i n f o r m a t i o n b e t w e e n two i m a g e s
// Example4 . 6
// p a g e 174 −175
clc ;
close ;
a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 4 \ l e n a . png ’ ) ;
// SIVP t o o l b o x
24
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
b = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 4 \ baboon . png ’ ) ;
a = rgb2gray ( a ) ;
b = rgb2gray ( b ) ;
a = imresize (a ,0.5) ;
b = imresize (b ,0.5) ;
figure (1)
ShowImage (a , ’ O r i g i n a l l e n a Image ’ ) ;
// IPD t o o l b o x
title ( ’ O r i g i n a l l e n a Image ’ ) ;
figure (2)
ShowImage (b , ’ O r i g i n a l baboon Image ’ ) ;
title ( ’ O r i g i n a l baboon Image ’ )
ffta = fft2d ( double ( a ) ) ;
fftb = fft2d ( double ( b ) ) ;
mag_a = abs ( ffta ) ;
mag_b = abs ( fftb ) ;
ph_a = atan ( imag ( ffta ) , real ( ffta ) ) ;
ph_b = atan ( imag ( fftb ) , real ( fftb ) ) ;
newfft_a = mag_a .*( exp ( %i * ph_b ) ) ;
newfft_b = mag_b .*( exp ( %i * ph_a ) ) ;
rec_a = ifft2d ( newfft_a ) ;
rec_b = ifft2d ( newfft_b ) ;
figure (3)
ShowImage ( uint8 ( rec_a ) , ’ l e n a Image a f t e r p h a s e
r e v e r s a l ’ );
title ( ’ l e n a Image a f t e r p h a s e r e v e r s a l ’ )
figure (4)
ShowImage ( uint8 ( rec_b ) , ’ baboon Image a f t e r p h a s e
r e v e r s a l ’ );
title ( ’ baboon Image a f t e r p h a s e r e v e r s a l ’ )
Scilab code Exa 4.10 Program to compute discrete cosine transform
25
Figure 4.1: Scilab code to intergchange phase information between two images
26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// C a p t i o n : Program t o compute d i s c r e t e c o s i n e
tranform
// Example4 . 1 0
// p a g e 198
clc ;
N =4; //DCT m a t r i x o f o r d e r f o u r
X = dct_mtx ( N ) ;
disp (X , ’DCT m a t r i x o f o r d e r f o u r ’ )
// R e s u l t
//DCT m a t r i x o f o r d e r f o u r
//
//
0.5
0.5
0.5
0.5
//
0.6532815
0.2705981 − 0.2705981 −
0.6532815
//
0.5
− 0.5
− 0.5
0.5
//
0.2705981 − 0.6532815
0.6532815 −
0.2705981
Scilab code Exa 4.12 Program to perform KL tranform for the given 2D matrix
1
2
3
4
5
6
7
8
9
10
// C a p t i o n : Program t o p e r f o r m KL t r a n s f o r m f o r t h e
g i v e n 2D m a t r i x
// Example4 . 1 2
// p a g e 208
clear ;
clc ;
X = [4 ,3 ,5 ,6;4 ,2 ,7 ,7;5 ,5 ,6 ,7];
[m , n ]= size ( X ) ;
A = [];
E = [];
for i =1: n
27
Figure 4.2: Program to compute discrete cosine transform
28
Figure 4.3: Program to compute discrete cosine transform
29
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
A = A + X (: , i ) ;
E = E + X (: , i ) * X (: , i ) ’;
end
mx = A / n ;
// mean m a t r i x
E = E/n;
C = E - mx * mx ’; // c o v a r i a n c e m a t r i x C = E [ xx ’ ] −mx∗mx ’
[V , D ] = spec ( C ) ; // e i g e n v a l u e s and e i g e n v e c t o r s
d = diag ( D ) ; // d i a g o n a l e l e m e n t s od e i g e n v a l u e s
[d , i ] = gsort ( d ) ; // s o r t i n g t h e e l e m e n t s o f D i n
descending order
for j = 1: length ( d )
T (: , j ) = V (: , i ( j ) ) ;
end
T =T ’
disp (d , ’ E i g e n V a l u e s a r e U = ’ )
disp (T , ’ The e i g e n v e c t o r m a t r i x T = ’ )
disp (T , ’ The KL t r a n f o r m b a s i s i s = ’ )
//KL t r a n s f o r m
for i = 1: n
Y (: , i ) = T * X (: , i ) ;
end
disp (Y , ’KL t r a n s f o r m a t i o n o f t h e i n p u t m a t r i x Y = ’ )
// R e c o n s t r u c t i o n
for i = 1: n
x (: , i ) = T ’* Y (: , i ) ;
end
disp (x , ’ R e c o n s t r u c t m a t r i x o f t h e g i v e n s a m p l e
matrix X = ’ )
// R e s u l t
// E i g e n V a l u e s a r e U =
//
6.1963372
//
0.2147417
//
0.0264211
// The e i g e n v e c t o r m a t r i x T =
//
0.4384533
0.8471005
0.3002988
//
0.4460381 − 0.4951684
0.7455591
// − 0 . 7 8 0 2 6 2 0
0.1929481
0.5949473
// The KL t r a n f o r m b a s i s i s =
30
47
48
49
50
51
52
53
54
55
56
57
//
0.4384533
0.8471005
0.3002988
//
0.4460381 − 0.4951684
0.7455591
// − 0 . 7 8 0 2 6 2 0
0.1929481
0.5949473
// KL t r a n s f o r m a t i o n o f t h e i n p u t m a t r i x Y =
//
6.6437095
4.5110551
9.9237632
10.662515
//
3.5312743
4.0755729
3.2373664
4.4289635
//
0.6254808
1.0198466
1.0190104
0.8336957
// R e c o n s t r u c t m a t r i x o f t h e g i v e n s a m p l e m a t r i x x =
//
4.
3.
5.
6.
//
4.
2.
7.
7.
//
5.
5.
6.
7.
Scilab code Exa 4.13 Program to find the singular value decomposition of given mat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// C a p t i o n : Program t o f i n d t h e s i n g u l a r v a l u e
decomposition of given matrix
// Example4 . 1 3
// p a g e 210
clear ;
clc ;
A = [1 , -2 ,3;3 ,2 , -1];
[U ,S , V ]= svd ( A ) ;
A_recon = U * S *V ’;
disp (U , ’U = ’ )
disp (S , ’ S = ’ )
disp (V , ’V = ’ )
disp ( A_recon , ’A m a t r i x from s v d = ’ )
// R e s u l t
// U =
//
// − 0 . 7 0 7 1 0 6 8
0.7071068
//
0.7071068
0.7071068
31
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//
// S =
//
//
4.2426407
0.
//
0.
3.1622777
//
// V =
//
//
0.3333333
0.8944272
//
0 . 6 6 6 6 6 6 7 − 2 . 7 7 6D−16
// − 0 . 6 6 6 6 6 6 7
0.4472136
//
// A m a t r i x from s v d =
//
//
1. − 2.
3.
//
3.
2. − 1.
32
0.
0.
− 0.2981424
0.7453560
0.5962848
Chapter 5
Image Enhancement
Scilab code Exa 5.5 Scilab code for brightness enhancement
1 // C a p t i o n : S c i l a b c o d e f o r b r i g h t n e s s enhancement
2 // F i g 5 . 5
3 // p a g e 246
4 clc ;
5 close ;
6 // a = i m r e a d ( ’ E : \ DIP JAYARAMAN\ C h a p t e r 5 \ p l a t e . GIF ’ ) ;
7
8
9
10
11
12
13
14
15
16
// SIVP t o o l b o x
a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 4 \ baboon . png ’ ) ;
a = rgb2gray ( a ) ;
b = double ( a ) +50;
b = uint8 ( b ) ;
figure (1)
ShowImage (a , ’ O r i g i n a l Image ’ ) ;
title ( ’ O r i g i n a l Image ’ )
figure (2)
ShowImage (b , ’ Enhanced Image ’ ) ;
title ( ’ Enhanced Image ’ )
33
34
Scilab code Exa 5.7 Scilab code for brightness suppression
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// C a p t i o n : S c i l a b c o d e f o r
brightness suppression
// F i g 5 . 7
// p a g e 247
clc ;
close ;
a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 4 \ baboon . png ’ ) ;
a = rgb2gray ( a ) ;
b = double ( a ) -50;
b = uint8 ( b ) ;
figure (1)
ShowImage (a , ’ O r i g i n a l Image ’ ) ;
title ( ’ O r i g i n a l Image ’ )
figure (2)
ShowImage (b , ’ B r i g h t n e s s S u p r e s s e d Image ’ ) ;
title ( ’ B r i g h t n e s s S u p r e s s e d Image ’ )
Scilab code Exa 5.9 Scilab code for Contrast Manipulation
1
2
3
4
5
6
7
8
9
10
// C a p t i o n : S c i l a b c o d e f o r
Contrast Manipulation
// F i g 5 . 9
// p a g e 248
clc ;
close ;
a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 4 \ l e n a . png ’ ) ;
a = rgb2gray ( a ) ;
b = double ( a ) *0.5;
b = uint8 ( b )
c = double ( b ) *2;
35
36
11 c = uint8 ( c )
12 figure (1)
13 ShowImage (a , ’ O r i g i n a l Image ’ ) ;
14 title ( ’ O r i g i n a l Image ’ )
15 figure (2)
16 ShowImage (b , ’ D e c r e a s e i n C o n t r a s t ’ ) ;
17 title ( ’ D e c r e a s e i n C o n t r a s t ’ )
18 figure (3)
19 ShowImage (c , ’ I n c r e a s e i n C o n t r a s t ’ ) ;
20 title ( ’ I n c r e a s e i n C o n t r a s t ’ )
Scilab code Exa 5.13 Scilab code to determine image negative
1
2
3
4
5
6
7
8
9
10
11
12
// C a p t i o n : S c i l a b c o d e t o d e t e r m i n e image n e g a t i v e
// F i g . 5 . 1 3
// p a g e 252
clc ;
close ;
a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 5 \ l a b e l . j p g ’ ) ;
k = 255 - double ( a ) ;
k = uint8 ( k ) ;
imshow ( a ) ;
title ( ’ O r i g i n a l o n c a Image ’ )
imshow ( k ) ;
title ( ’ N e g a t i v e o f O r i g i n a l Image ’ )
Scilab code Exa 5.16 Scilab code that performs threshold operation
37
Figure 5.3: Scilab code for Contrast Manipulation
Figure 5.4: Scilab code to determine image negative
38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// C a p t i o n : S c i l a b c o d e t h a t p e r f o r m s t h r e s h o l d
operation
// F i g 5 . 1 6
// p a g e 254
clc ;
close ;
a = imread ( ’E : \ D i g i t a l I m a g e P r o c e s s i n g J a y a r a m a n \
C h a p t e r 5 \ l e n a . png ’ ) ;
a = rgb2gray ( a ) ;
[ m n ] = size ( a ) ;
t = input ( ’ E n t e r t h e t h r e s h o l d p a r a m e t e r ’ ) ;
for i = 1: m
for j = 1: n
if ( a (i , j ) <t )
b (i , j ) =0;
else
b (i , j ) =255;
end
end
end
figure (1)
ShowImage (a , ’ O r i g i n a l Image ’ ) ;
title ( ’ O r i g i n a l Image ’ )
figure (2)
ShowImage (b , ’ T h r e s h o l d e d Image ’ ) ;
title ( ’ T h r e s h o l d e d Image ’ )
xlabel ( sprintf ( ’ T h r e s h o l d v a l u e i s %g ’ ,t ) )
// R e s u l t
// E n t e r t h e t h r e s h o l d p a r a m e t e r 140
Scilab code Exa 5.20 Program performs gray level slicing without background
39
40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// C a p t i o n : Program p e r f o r m s g r a y l e v e l s l i c i n g
without background
// F i g . 5 . 2 0
// p a g e 2 5 6
clc ;
x = imread ( ’E : \ D i g i t a l I m a g e P r o c e s s i n g J a y a r a m a n \
C h a p t e r 5 \ l e n a . png ’ ) ;
x = rgb2gray ( x ) ;
y = double ( x ) ;
[m , n ]= size ( y ) ;
L = max ( max ( x ) ) ;
a = round ( L /2) ;
b = L;
for i =1: m
for j =1: n
if ( y (i , j ) >= a & y (i , j ) <= b )
z (i , j ) = L ;
else
z (i , j ) =0;
end
end
end
z = uint8 ( z ) ;
figure (1)
ShowImage (x , ’ O r i g i n a l Image ’ ) ;
title ( ’ O r g i n a l Image ’ )
figure (2)
ShowImage (z , ’ Gray L e v e l S l i c i n g ’ ) ;
title ( ’ Gray L e v e l S l i c i n g w i t h o u t p r e s e r v i n g
background ’ )
41
Figure 5.6: Program performs gray level slicing without background
42
Chapter 6
Image Restoration and
Denoising
Scilab code Exa 6.1 Scilab code to create motion blur
1 // C a p t i o n : S c i l a b c o d e t o c r e a t e m o t i o n b l u r
2 // F i g 6 . 1
3 // p a g e 326
4 clc ;
5 close ;
6 a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 6 \humm . j p g ’ ) ; //
7
8
9
10
11
12
13
14
15
16
17
18
SIVP t o o l b o x
// f i l t e r c o e f f i c i e n t s o f f s p e c i a l ( ’ motion ’ , 1 0 , 2 5 )
H =[0 ,0 ,0 ,0 ,0 ,0 ,0 ,0.0032 ,0.0449 ,0.0865 ,0.0072;...
0 ,0 ,0 ,0 ,0 ,0.0092 ,0.0509 ,0.0925 ,0.0629 ,0.0213 ,0;...
0 ,0 ,0 ,0.0152 ,0.0569 ,0.0985 ,0.0569 ,0.0152 ,0 ,0 ,0;...
0 ,0.0213 ,0.0629 ,0.0925 ,0.0509 ,0.0092 ,0 ,0 ,0 ,0 ,0;...
0.0072 ,0.0865 ,0.0449 ,0.0032 ,0 ,0 ,0 ,0 ,0 ,0 ,0];
Motion_Blur = imfilter (a , H ) ;
Motion_Blur = uint8 ( Motion_Blur ) ;
ShowImage (a , ’ o r i g i n a l Image ’ )
title ( ’ o r i g i n a l Image ’ )
figure
ShowImage ( Motion_Blur , ’ Motion B l u r r e d Image ’ )
43
Figure 6.1: Scilab code to create motion blur
19
title ( ’ 10 x25 Motion B l u r r e d Image ’ )
check Appendix AP 1 for dependency:
fft2d.sce
check Appendix AP 2 for dependency:
ifft2d.sce
Scilab code Exa 6.5 Scilab code performs inverse filtering
1
2
3
4
5
6
7
// C a p t i o n : S c i l a b c o d e p e r f o r m s i n v e r s e f i l t e r i n g
// Degrade t h e image by means o f a known b l u r
// Apply i n v e r s e f i l t e r t o t h e b l u r r e d image and s e e
t h e r e s t o r e d image
// F i g 6 . 5
// p a g e 330
clc ;
close ;
44
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
x = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 6 \ f l o w e r 2 . j p g ’ ) ;
x = double ( rgb2gray ( x ) ) ;
[ M N ]= size ( x ) ;
h = zeros (M , N ) ;
for i = 1:11
for j = 1:11
h (i , j ) = 1/121;
end
end
sigma = sqrt (4*10^( -7) ) ;
freqx = fft2d ( x ) ; // F o u r i e r t r a n s f o r m o f i n p u t image
freqh = fft2d ( h ) ; // F o u r i e r t r a n s f o r m o f d e g r a d a t i o n
y = real ( ifft2d ( freqh .* freqx ) ) ;
freqy = fft2d ( y ) ;
powfreqx = freqx .^2/( M * N ) ;
alpha = 0.5; // I n d i c a t e s i n v e r s e f i l t e r
freqg = (( freqh . ’) ’) .* abs ( powfreqx ) ./( abs ( freqh .^2)
.* abs ( powfreqx ) + alpha * sigma ^2) ;
Resfreqx = freqg .* freqy ;
Resa = real ( ifft2d ( Resfreqx ) ) ;
x = uint8 ( x ) ;
y = uint8 ( y ) ;
Resa = uint8 ( Resa )
ShowImage (x , ’ O r i g i n a l Image ’ )
title ( ’ O r i g i n a l Image ’ )
figure
ShowImage (y , ’ Degraded Image ’ )
title ( ’ Degraded Image ’ )
figure
ShowImage ( Resa , ’ R e s t o r e d Image ’ )
title ( ’ R e s t o r e d Image ’ )
check Appendix AP 1 for dependency:
fft2d.sce
check Appendix AP 2 for dependency:
45
46
ifft2d.sce
Scilab code Exa 6.7 Scilab code performs inverse filtering
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// C a p t i o n : S c i l a b c o d e p e r f o r m s i n v e r s e f i l t e r i n g
// Degrade t h e image by means o f a known b l u r and
white noise
// The image i s d e g r a d e d a s w e l l a s c o r r u p t e d by
noise
// Apply i n v e r s e f i l t e r t o r e s t o r e t h e image
// F i g 6 . 7
// p a g e 332
clc ;
close ;
x = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 6 \ f l o w e r 2 . j p g ’ ) ;
x = double ( rgb2gray ( x ) ) ;
[ M N ]= size ( x ) ;
h = zeros (M , N ) ;
for i = 1:11
for j = 1:11
h (i , j ) = 1/121;
end
end
sigma = sqrt (4*10^( -7) ) ;
freqx = fft2d ( x ) ; // F o u r i e r t r a n s f o r m o f i n p u t image
freqh = fft2d ( h ) ; // F o u r i e r t r a n s f o r m o f d e g r a d a t i o n
y = real ( ifft2d ( freqh .* freqx ) ) +10* rand (M ,N , ’ n o r m a l ’ )
;
freqy = fft2d ( y ) ;
powfreqx = freqx .^2/( M * N ) ;
alpha = 0.5; // I n d i c a t e s i n v e r s e f i l t e r
freqg = (( freqh . ’) ’) .* abs ( powfreqx ) ./( abs ( freqh .^2)
.* abs ( powfreqx ) + alpha * sigma ^2) ;
Resfreqx = freqg .* freqy ;
47
48
27 Resa = real ( ifft2d ( Resfreqx ) ) ;
28 x = uint8 ( x ) ;
29 y = uint8 ( y ) ;
30 Resa = uint8 ( Resa )
31 ShowImage (x , ’ O r i g i n a l Image ’ )
32 title ( ’ O r i g i n a l Image ’ )
33 figure
34 ShowImage (y , ’ Degraded+n o i s e Image ’ )
35 title ( ’ Degraded+n o i s e Image ’ )
36 figure
37 ShowImage ( Resa , ’ R e s t o r e d Image ’ )
38 title ( ’ R e s t o r e d Image ’ )
check Appendix AP 1 for dependency:
fft2d.sce
check Appendix AP 2 for dependency:
ifft2d.sce
Scilab code Exa 6.9 Scilab code performs Pseudo inverse filtering
1
2
3
4
5
6
7
8
9
// C a p t i o n : S c i l a b c o d e p e r f o r m s Pseudo i n v e r s e
filtering
// Degrade t h e image by means o f a known b l u r and
white noise
// The image i s d e g r a d e d a s w e l l a s c o r r u p t e d by
noise
// Apply Pseudo i n v e r s e f i l t e r t o r e s t o r e t h e image
// F i g 6 . 9
// p a g e 333
clc ;
close ;
x = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 6 \ f l o w e r 2 . j p g ’ ) ;
49
50
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
x = double ( rgb2gray ( x ) ) ;
[ M N ]= size ( x ) ;
h = zeros (M , N ) ;
for i = 1:11
for j = 1:11
h (i , j ) = 1/121;
end
end
mask_b = ones (11 ,11) /121;
[ m1 , n1 ] = size ( mask_b ) ;
Thr_Freq = 0.2;
freqx = fft2d ( x ) ; // F o u r i e r t r a n s f o r m o f i n p u t image
freqh = fft2d ( h ) ; // F o u r i e r t r a n s f o r m o f d e g r a d a t i o n
y = real ( ifft2d ( freqh .* freqx ) ) +25* rand (M ,N , ’ n o r m a l ’ )
;
freqy = fft2d ( y ) ;
psf = zeros (M , N ) ;
psf ( M /2+1 -( m1 -1) /2: M /2+1+( m1 -1) /2 , N /2+1 -( n1 -1) /2: N
/2+1+( n1 -1) /2) = mask_b ;
psf = fftshift ( psf ) ;
freq_res = fft2d ( psf ) ;
Inv_filt = freq_res ./(( abs ( freq_res ) ) .^2+ Thr_Freq ) ;
z = real ( ifft2d ( freqy .* Inv_filt ) ) ;
x = uint8 ( x ) ;
y = uint8 ( y ) ;
z = uint8 ( z )
ShowImage (x , ’ O r i g i n a l Image ’ )
title ( ’ O r i g i n a l Image ’ )
figure
ShowImage (y , ’ Degraded+n o i s e Image ’ )
title ( ’ Degraded+n o i s e Image ’ )
figure
ShowImage (z , ’ R e s t o r e d Image ’ )
title ( ’ R e s t o r e d Image ’ )
check Appendix AP 1 for dependency:
51
52
fft2d.sce
check Appendix AP 2 for dependency:
ifft2d.sce
Scilab code Exa 6.13 Scilab code to perform wiener filtering of the corrupted imag
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// C a p t i o n : S c i l a b c o d e t o p e r f o r m w i e n e r f i l t e r i n g
o f t h e c o r r u p t e d image
// F i g 6 . 1 3
// Page 339
close ;
clc ;
x = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 6 \ f l o w e r 2 . j p g ’ ) ;
// SIVP t o o l b o x
x = double ( rgb2gray ( x ) ) ;
sigma = 50;
Gamma = 1;
alpha = 1; // I t i n d i c a t e s Wiener f i l t e r
[ M N ]= size ( x ) ;
h = zeros (M , N ) ;
for i = 1:5
for j = 1:5
h (i , j ) = 1/25;
end
end
Freqa = fft2d ( x ) ;
Freqh = fft2d ( h ) ;
y = real ( ifft2d ( Freqh .* Freqa ) ) // image d e g r a d a t i o n
y = y +25* rand (M ,N , ” n o r m a l ” ) ; // Adding random n o i s e
with normal d i s t r i b u t i o n
Freqy = fft2d ( y ) ;
Powy = abs ( Freqy ) .^2/( M * N ) ;
sFreqh = Freqh .*( abs ( Freqh ) >0) +1/ Gamma *( abs ( Freqh )
==0) ;
53
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
iFreqh = 1/ sFreqh ;
iFreqh = iFreqh ’.*( abs ( Freqh ) * Gamma >1) + Gamma * abs (
sFreqh ) * iFreqh *( abs ( sFreqh ) * Gamma <=1) ;
iFreqh = iFreqh /( max ( max ( abs ( iFreqh ) ) ) ) ;
Powy = Powy .*( Powy > sigma ^2) + sigma ^2*( Powy <= sigma ^2) ;
Freqg = iFreqh .*( Powy - sigma ^2) ./( Powy -(1 - alpha ) *
sigma ^2) ;
ResFreqa = Freqg .* Freqy ;
Resa = real ( ifft2d ( ResFreqa ) ) ;
x = uint8 ( x ) ;
y = uint8 ( y ) ;
Resa = uint8 ( Resa ) ;
ShowImage (x , ’ O r i g i n a l Image ’ )
title ( ’ O r i g i n a l Image ’ )
figure
ShowImage (y , ’ Degraded Image ’ )
title ( ’ Degraded Image ’ )
figure
ShowImage ( Resa , ’ R e s t o r e d Image ’ )
title ( ’ R e s t o r e d Image ’ )
Scilab code Exa 6.18 Scilab code to Perform Average Filtering operation
1
2
3
4
5
6
7
// C a p t i o n : S c i l a b c o d e t o P e r f o r m A v e r a g e F i l t e r i n g
operation
// F i g 6 . 1 8
// p a g e 349
clc ;
close ;
a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 6 \ l e n n a . j p g ’ ) ; //
SIVP t o o l b o x
a = imnoise (a , ’ s a l t & p e p p e r ’ , 0.2) ; //Add s a l t &p e p p e r
n o i s e t o t h e image
54
55
8 a = double ( a ) ;
9 [ m n ]= size ( a ) ;
10 N = input ( ’ e n t e r t h e window s i z e = ’ ) ; // The window s i z e
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
can be 3 x3 , 5 x 5 e t c
Start =( N +1) /2;
Out_Imag = a ;
for i = Start :( m - Start +1)
for j = Start :( n - Start +1)
limit =( N -1) /2;
Sum =0;
for k = - limit : limit ,
for l = - limit : limit ,
Sum = Sum + a ( i +k , j + l ) ;
end
end
Out_Imag (i , j ) = Sum /( N * N ) ;
end
end
a = uint8 ( a ) ;
Out_Imag = uint8 ( Out_Imag ) ;
ShowImage (a , ’ o r i g i n a l Image ’ )
title ( ’ N o i s y Image ’ )
figure
ShowImage ( Out_Imag , ’ a v e r a g e f i l t e r e d Image ’ )
title ( ’ 5 x5 a v e r a g e f i l t e r e d Image ’ ) ;
Scilab code Exa 6.21 Scilab code to Perform median filtering
1 // C a p t i o n : S c i l a b c o d e t o P e r f o r m median
2 // F i g 6 . 2 1
3 // p a g e 352
4 clc ;
5 close ;
56
filtering
Figure 6.7: Scilab code to Perform Average Filtering operation
6 c = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 6 \ cameraman . j p g ’
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
) ; // SIVP t o o l b o x
N = input ( ’ E n t e r t h e window s i z e ’ ) ;
a = double ( imnoise (c , ’ s a l t & p e p p e r ’ ,0.2) ) ;
[m , n ] = size ( a ) ;
b = a;
if ( modulo (N ,2) ==1)
Start = ( N +1) /2;
End = Start ;
limit1 = (N -1) /2;
limit2 = limit1 ;
else
Start = N /2;
End = Start +1;
limit1 = ( N /2) -1;
limit2 = limit1 +1;
end
for i = Start :( m - End +1)
for j = Start :( n - End +1)
I =1;
for k = - limit1 : limit2
for l = - limit1 : limit2
mat ( I ) = a ( i +k , j +1)
I = I +1;
end
57
30
end
31
mat = gsort ( mat ) ;
32
if ( modulo (N ,2) ==1)
33
b (i , j ) = ( mat ((( N ^2) +1) /2) ) ;
34
else
35
b (i , j ) = ( mat (( N ^2) /2) + mat ((( N ^2) /2) +1) ) /2;
36
end
37
end
38 end
39 a = uint8 ( a ) ;
40 b = uint8 ( b ) ;
41 figure
42 ShowImage (c , ’ O r i g i n a l Image ’ )
43 title ( ’ O r i g i n a l Image ’ )
44 figure
45 ShowImage (a , ’ n o i s y image ’ )
46 title ( ’ n o i s y image ’ )
47 figure
48 ShowImage (b , ’ Median F i l t e r e d Image ’ )
49 title ( ’ 5 x5 Median F i l t e r e d Image ’ )
check Appendix AP 3 for dependency:
Func_medianall.sci
Scilab code Exa 6.23 Scilab code to Perform median filtering of colour image
1
2
3
4
5
// C a p t i o n : S c i l a b c o d e t o P e r f o r m median f i l t e r i n g o f
c o l o u r image
// F i g 6 . 2 3 ( a )
// p a g e 353
clc ;
close ;
58
Figure 6.8: Scilab code to Perform median filtering
6 a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 6 \ p e p p e r s . png ’ ) ;
7
8
9
10
11
12
13
14
15
16
17
18
19
// SIVP t o o l b o x
N = input ( ’ e n t e r t h e window s i z e ’ ) ;
b = imresize (a ,[256 ,256]) ;
b = imnoise (b , ’ s a l t & p e p p e r ’ ,.1) ;
[ m n ]= size ( b ) ;
R = b (: ,: ,1) ;
G = b (: ,: ,2) ;
B = b (: ,: ,3) ;
Out_R = Func_medianall (R , N ) ; // A p p l y i n g Median f i l t e r
to
R
plane
Out_G = Func_medianall (G , N ) ; // A p p l y i n g Median f i l t e r
to
G
plane
Out_B = Func_medianall (B , N ) ; // A p p l y i n g Median f i l t e r
to
B
plane
Out_Image (: ,: ,1) = Out_R ;
Out_Image (: ,: ,2) = Out_G ;
Out_Image (: ,: ,3) = Out_B ;
59
Figure 6.9: Scilab code to Perform median filtering of colour image
20 b = uint8 ( b ) ;
21 Out_Image = uint8 ( Out_Image ) ;
22 // ShowColorImage ( b , ’ n o i s e added ’ )
23 // t i t l e ( ’ n o i s e added ’ )
24 figure
25 ShowColorImage ( Out_Image , ’ 3 x3 median
26 title ( ’ 3 x3 median f i l t e r e d ’ )
filtered ’)
Scilab code Exa 6.24 Scilab code to Perform Trimmed Average Filter
1
2
3
4
5
6
// C a p t i o n : S c i l a b c o d e t o P e r f o r m Trimmed A v e r a g e
Filter
// Alpha trimmed a v e r a g e f i l t e r
// F i g 6 . 2 4
// p a g e 355
clc ;
close ;
60
7 c = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 6 \ l e n n a . j p g ’ ) ; //
SIVP t o o l b o x
8 s = 1; // s d e n o t e s t h e number o f
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
v a l u e s t o be l e f t
i n t h e end
r = 1;
N = 9; // 3 x3 window
a = double ( imnoise (c , ’ g a u s s i a n ’ ) ) ;
[m , n ] = size ( a ) ;
b = zeros (m , n ) ;
for i = 2: m -1
for j = 2: n -1
mat = [ a (i , j ) ,a (i ,j -1) ,a (i , j +1) ,a (i -1 , j ) ,a ( i
+1 , j ) ,a (i -1 ,j -1) ,...
a (i -1 , j +1) ,a (i -1 , j +1) ,a ( i +1 , j +1) ];
sorted_mat = gsort ( mat ) ;
Sum =0;
for k = r + s :( N - s )
Sum = Sum + mat ( k ) ;
end
b (i , j ) = Sum /( N -r - s ) ;
end
end
a = uint8 ( a ) ;
b = uint8 ( b ) ;
// f i g u r e
// imshow ( c )
// t i t l e ( ’ O r i g i n a l Image ’ )
figure
ShowImage (a , ’ n o i s y image ’ )
title ( ’ n o i s y image ’ )
figure
ShowImage (b , ’ Trimmed A v e r a g e F i l t e r e d Image ’ )
title ( ’ Trimmed A v e r a g e F i l t e r e d Image ’ )
61
Figure 6.10: Scilab code to Perform Trimmed Average Filter
62
Chapter 7
Image Segmentation
Scilab code Exa 7.23 Scilab code for Differentiation of Gaussian function
1
2
3
4
5
6
7
8
9
10
11
12
13
// C a p t i o n : S c i l a b c o d e f o r D i f f e r e n t i a t i o n o f
Gaussian f u n c t i o n
// F i g 7 . 2 3
// p a g e 3 8 8
clc ;
close ;
sigma = input ( ’ E n t e r t h e v a l u e o f s i g m a : ’ )
i = -10:.1:10;
j = -10:.1:10;
r = sqrt ( i .* i + j .* j ) ;
y =(1/( sigma ^2) ) *((( r .* r ) / sigma ^2) -1) .* exp ( - r .* r /2*
sigma ^2) ;
plot (i , y )
legend ( sprintf ( ’ The s i g m a v a l u e i s %g ’ , sigma ) )
xtitle ( ’ D i f f e r e n t i a t i o n o f G a u s s i a n f u n c t i o n ’ )
63
Figure 7.1: Scilab code for Differentiation of Gaussian function
64
Figure 7.2: Scilab code for Differentiation of Gaussian function
65
Figure 7.3: Scilab code for Differentiation of Gaussian Filter function
Scilab code Exa 7.25 Scilab code for Differentiation of Gaussian Filter function
1
2
3
4
5
6
7
8
9
10
// C a p t i o n : S c i l a b c o d e f o r D i f f e r e n t i a t i o n o f
Gaussian F i l t e r f u n c t i o n
// F i g 7 . 2 5
// p a g e 3 8 9
clc ;
close ;
sigma1 = input ( ’ E n t e r t h e v a l u e o f s i g m a 1 : ’ )
sigma2 = input ( ’ E n t e r t h e v a l u e o f s i g m a 2 : ’ )
i = -10:.1:10;
j = -10:.1:10;
r = sqrt ( i .* i + j .* j ) ;
66
Figure 7.4: Scilab code for Differentiation of Gaussian Filter function
11 y1 = (1/( sigma1 ^2) ) *((( r .* r ) / sigma1 ^2) -1) .* exp ( - r .* r
12
13
14
15
16
17
18
19
/2* sigma1 ^2) ;
y2 = (1/( sigma2 ^2) ) *((( r .* r ) / sigma2 ^2) -1) .* exp ( - r .* r
/2* sigma2 ^2) ;
y = y1 - y2 ;
plot (i , y )
xtitle ( ’ Shape o f DOG F i l t e r ’ )
// R e s u l t
// E n t e r t h e v a l u e o f s i g m a 1 : 4
// E n t e r t h e v a l u e o f s i g m a 2 : 1
//
67
Scilab code Exa 7.27 Scilab code for Edge Detection using Different Edge detectors
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// C a p t i o n : S c i l a b c o d e f o r Edge D e t e c t i o n u s i n g
D i f f e r e n t Edge d e t e c t o r s
// [ 1 ] . S o b e l [ 2 ] . P r e w i t t [ 3 ] . Log
[ 4 ] . Canny
// F i g 7 . 2 7
// p a g e 3 8 9
close ;
clc ;
a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 7 \ s a i l i n g . j p g ’ ) ;
a = rgb2gray ( a ) ;
c = edge (a , ’ s o b e l ’ ) ;
d = edge (a , ’ p r e w i t t ’ ) ;
e = edge (a , ’ l o g ’ ) ;
f = edge (a , ’ canny ’ ) ;
ShowImage (a , ’ O r i g i n a l Image ’ )
title ( ’ O r i g i n a l Image ’ )
figure
ShowImage (c , ’ S o b e l ’ )
title ( ’ S o b e l ’ )
figure
ShowImage (d , ’ P r e w i t t ’ )
title ( ’ P r e w i t t ’ )
figure
ShowImage (e , ’ Log ’ )
title ( ’ Log ’ )
figure
ShowImage (f , ’ Canny ’ )
title ( ’ Canny ’ )
Scilab code Exa 7.30 Scilab code to perform watershed transform
68
Figure 7.5: Scilab code for Edge Detection using Different Edge detectors
69
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// C a p t i o n : S c i l a b c o d e t o p e r f o r m w a t e r s h e d
transform
// F i g 7 . 3 0
// Page396
clc ;
close ;
b = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 7 \ t e a s e t . png ’ ) ;
a = rgb2gray ( b ) ;
global EDGE_SOBEL ;
Gradient = EdgeFilter (a , EDGE_SOBEL ) ;
Threshold1 = CalculateOtsuThreshold ( Gradient ) ; //
determine a threshold
EdgeImage = ~ SegmentByThreshold ( Gradient , Threshold1 )
;
DistanceImage = DistanceTransform ( EdgeImage ) ;
Threshold2 = CalculateOtsuThreshold ( DistanceImage )
// d e t e r m i n e a t h r e s h o l d
ThresholdImage = SegmentByThreshold ( DistanceImage ,
Threshold2 ) ;
MarkerImage = SearchBlobs ( ThresholdImage ) ;
SegmentedImage = Watershed ( Gradient , MarkerImage ) ;
figure
ShowColorImage (b , ’ t e a s e t ’ )
title ( ’ t e a s e t . png ’ )
figure
ColorMapLength = length ( unique ( SegmentedImage ) ) ;
ShowImage ( SegmentedImage , ’ R e s u l t o f Watershed
T r a n s f o r m ’ , jetcolormap ( ColorMapLength ) ) ;
70
Figure 7.6: Scilab code to perform watershed transform
71
Chapter 8
Object Recognition
Scilab code Exa 8.4 To verify the given matrix is a covaraince matrix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// C a p t i o n : To v e r i f y t h e g i v e n m a t r i x i s a
covaraince matrix
// Problem 4
// p a g e 4 3 8
close ;
clear ;
clc ;
K = [37 , -15; -15 ,37];
evals = spec ( K ) ;
evals = gsort ( evals ) ;
disp ( evals , ’ E i g e n V a l u e s a r e = ’ )
if ( evals == abs ( evals ) ) then
disp ( ’ Both t h e e i g e n v a l u e s a r e non−n e g a t i v e and
the g i v e n matrix i s a c o v a r i a n c e matrix ’ );
else
disp ( ’ non−c o v a r i a n c e m a t r i x ’ )
end
Scilab code Exa 8.5 To compute the covariance of the given 2D data
72
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// C a p t i o n : To compute t h e c o v a r i a n c e o f t h e g i v e n 2D
data
// Problem 5
// p a g e 4 3 9
close ;
clear ;
clc ;
X1 = [2 ,1] ’;
X2 = [3 ,2] ’;
X3 = [2 ,3] ’;
X4 = [1 ,2] ’;
X = [ X1 , X2 , X3 , X4 ];
disp (X , ’X= ’ ) ;
[M , N ] = size ( X ) ; //M=rows , N = c o l u m n s
for i =1: N
m ( i ) = mean ( X (: , i ) ) ;
A (: , i ) = X (: , i ) -m ( i ) ;
end
m = m ’;
disp (m , ’ mean = ’ ) ;
K = A ’* A ;
K = K /( M -1) ;
disp (K , ’ The C o v a r a i n c e m a t i x i s K = ’ )
// R e s u l t
//X=
//
2.
3.
2.
1.
//
1.
2.
3.
2.
// mean =
//
1.5
2.5
2.5
1.5
//
// The C o v a r a i n c e m a t i x i s K =
//
0.5
0.5 − 0.5 − 0.5
//
0.5
0.5 − 0.5 − 0.5
// − 0 . 5 − 0 . 5
0.5
0.5
// − 0 . 5 − 0 . 5
0.5
0.5
73
Scilab code Exa 8.9 Develop a perceptron AND function with bipolar inputs and targ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// C a p t i o n : D e v e l o p a p e r c e p t r o n AND f u n c t i o n w i t h
b i p o l a r i n p u t s and t a r g e t s
// Problem 9
// p a g e 4 4 1
close ;
clear ;
clc ;
X1 = [1 , -1 ,1 , -1]; //X1 and X2 a r e i n p u t v e c t o r s t o
AND f u n c t i o n
X2 = [1 ,1 , -1 , -1];
// b = [ 1 , 1 , 1 , 1 ] ;
// B i a s i n g v e c t o r
T = [1 , -1 , -1 , -1]; // T a r g e t v e c t o r f o r AND f u n c t i o n
W1 = 0; // W e i g h t s a r e i n i t i a l i z e d
W2 = 0;
b = 0; // b i a s i n i t i a l i z e d
alpha = 1; // l e a r n i n g r a t e
for i = 1: length ( X1 )
Yin ( i ) = b + X1 ( i ) * W1 + X2 ( i ) * W2 ;
if ( Yin ( i ) >=1)
Y ( i ) =1;
elseif (( Yin ( i ) <1) &( Yin ( i ) >= -1) )
Y ( i ) =0;
elseif ( Yin ( i ) < -1)
Y ( i ) = -1;
end
disp ( Yin ( i ) , ’ Yin= ’ )
disp ( Y ( i ) , ’Y= ’ )
if ( Y ( i ) ~= T ( i ) )
b = b + alpha * T ( i ) ;
W1 = W1 + alpha * T ( i ) * X1 ( i ) ;
W2 = W2 + alpha * T ( i ) * X2 ( i ) ;
disp (b , ’ b= ’ )
74
31
disp ( W1 , ’W1= ’ )
32
disp ( W2 , ’W2= ’ )
33
end
34 end
35 disp ( ’ F i n a l W e i g h t s a f t e r one i t e r a t i o n
36 disp (b , ’ B i a s Weigth b= ’ )
37 disp ( W1 , ’W1= ’ )
38 disp ( W2 , ’W2= ’ )
75
are ’)
Chapter 9
Image Compression
Scilab code Exa 9.9 Program performs Block Truncation Coding BTC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// C a p t i o n : Program p e r f o r m s B l o c k T r u n c a t i o n Coding (
BTC)
// Example 9 . 9
// p a g e 5 1 2
close ;
clear ;
clc ;
x =
[65 ,75 ,80 ,70;72 ,75 ,82 ,68;84 ,72 ,62 ,65;66 ,68 ,72 ,80];
disp (x , ’ O r i g i n a l B l o c k i s x = ’ )
[ m1 n1 ]= size ( x ) ;
blk = input ( ’ E n t e r t h e b l o c k s i z e : ’ ) ;
for i = 1 : blk : m1
for j = 1 : blk : n1
y = x ( i : i +( blk -1) ,j : j +( blk -1) ) ;
m = mean ( mean ( y ) ) ;
disp (m , ’ mean v a l u e i s m = ’ )
sig = std2 ( y ) ;
disp ( sig , ’ S t a n d a r d d e v i a t i o n o f t h e b l o c k i s
=’)
76
18
19
20
21
22
23
24
25
26
27
b = y > m ; // t h e b i n a r y b l o c k
disp (b , ’ B i n a r y a l l o c a t i o n m a t r i x i s B= ’ )
K = sum ( sum ( b ) ) ;
disp (K , ’ number o f o n e s = ’ )
if ( K ~= blk ^2 ) & ( K ~= 0)
ml = m - sig * sqrt ( K /(( blk ^2) -K ) ) ;
disp ( ml , ’ The v a l u e o f a = ’ )
mu = m + sig * sqrt ((( blk ^2) -K ) / K ) ;
disp ( mu , ’ The v a l u e o f b = ’ )
x ( i : i +( blk -1) , j : j +( blk -1) ) = b * mu
+(1 - b ) * ml ;
end
28
29 end
30 end
31 disp ( round ( x ) , ’ R e c o n s t r u c t e d B l o c k i s x = ’ )
32 // R e s u l t
33 // O r i g i n a l B l o c k i s x =
34 //
35 //
65.
75.
80.
70.
36 //
72.
75.
82.
68.
37 //
84.
72.
62.
65.
38 //
66.
68.
72.
80.
39 //
40 // E n t e r t h e b l o c k s i z e : 4
41 // mean v a l u e i s m = 7 2 . 2 5
42 // S t a n d a r d d e v i a t i o n o f t h e b l o c k i s = 6 . 6 2 8 2 2 2 5
43 // B i n a r y a l l o c a t i o n m a t r i x i s B=
44 //
45 // F T T F
46 // F T T F
47 // T F F F
48 // F F F T
49 //
50 // number o f o n e s = 6
51 // The v a l u e o f a = 6 7 . 1 1 5 8 0 1
52 // The v a l u e o f b = 8 0 . 8 0 6 9 9 8
53 // R e c o n s t r u c t e d B l o c k i s x =
54 //
77
55
56
57
58
//
//
//
//
67.
67.
81.
67.
81.
81.
67.
67.
81.
81.
67.
67.
67.
67.
67.
81.
Scilab code Exa 9.59 Program performs Block Truncation Coding
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// C a p t i o n : Program p e r f o r m s B l o c k T r u n c a t i o n Coding (
BTC) by c h o o s i n g d i f f e r e n t
// b l o c k s i z e s
// F i g . 9 . 5 9 : MATLAB Example1
// p a g e 5 1 4
close ;
clc ;
x = imread ( ’E : \ D i g i t a l I m a g e P r o c e s s i n g J a y a r a m a n \
C h a p t e r 9 \ l e n n a . j p g ’ ) ; // SIVP t o o l b o x
// x=i m r e s i z e ( x , [ 2 5 6 2 5 6 ] ) ;
x1 = x ;
x = double ( x ) ;
[ m1 n1 ]= size ( x ) ;
blk = input ( ’ E n t e r t h e b l o c k s i z e : ’ ) ;
for i = 1 : blk : m1
for j = 1 : blk : n1
y = x ( i : i +( blk -1) ,j : j +( blk -1) ) ;
m = mean ( mean ( y ) ) ;
sig = std2 ( y ) ;
b = y > m ; // t h e b i n a r y b l o c k
K = sum ( sum ( b ) ) ;
if ( K ~= blk ^2 ) & ( K ~= 0)
ml = m - sig * sqrt ( K /(( blk ^2) -K ) ) ;
mu = m + sig * sqrt ((( blk ^2) -K ) / K ) ;
x ( i : i +( blk -1) , j : j +( blk -1) ) = b * mu
+(1 - b ) * ml ;
end
end
78
Figure 9.1: Program performs Block Truncation Coding
26 end
27 // imshow ( u i n t 8 ( x ) )
28 // t i t l e ( ’ R e c o n s t r u c t e d Image ’ )
29 x = uint8 ( x ) ;
30 figure (1)
31 imshow ( x1 )
32 title ( ’ O r i g i n a l Image ’ ) ;
// IPD t o o l b o x
33 figure (2)
34 ShowImage (x , ’ R e c o n s t r u c t e d Image ’ ) ;
// IPD t o o l b o x
35 title ( ’ B l o c k S i z e = 8 ’ )
79
Chapter 10
Binary Image Processing
Scilab code Exa 10.17 Scilab Code for dilation and erosion process
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// C a p t i o n : S c i l a b Code f o r d i l a t i o n and e r o s i o n
process
// F i g . 1 0 . 1 7
// Page553
close ;
clear ;
clc ;
a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 0 \ morph1 . bmp ’ ) ;
// SIVP t o o l b o x
// b = [ 1 , 1 , 1 ; 1 , 1 , 1 ; 1 , 1 , 1 ] ;
StructureElement = CreateStructureElement ( ’ s q u a r e ’ ,
3) ;
a1 = DilateImage (a , StructureElement ) ;
a2 = ErodeImage (a , StructureElement ) ;
// D i s p l a y i n g o r i g i n a l Image
// imshow ( a )
figure (1)
ShowImage (a , ’ O r i g i n a l Image ’ ) ;
// D i s p l a y i n g D i l a t e d Image
// imshow ( a1 )
figure (2)
80
Figure 10.1: Scilab Code for dilation and erosion process
19
20
21
22
23
24
25
ShowImage ( a1 , ’ D i l a t e d Image ’ ) ;
xtitle ( ’ D i l a t e d Image ’ )
// D i s p l a y i n g Eroded Image
// imshow ( a2 )
figure (3)
ShowImage ( a2 , ’ Eroded Image ’ ) ;
xtitle ( ’ Eroded Image ’ )
Scilab code Exa 10.19 Scilab Code to perform an opening and closing operation on t
1
2
3
4
5
6
7
// C a p t i o n : S c i l a b Code t o p e r f o r m an o p e n i n g and
c l o s i n g o p e r a t i o n on t h e image
// F i g . 1 0 . 1 9
// Page555
close ;
clear ;
clc ;
a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 0 \ morph2 . bmp ’ ) ;
// SIVP t o o l b o x
81
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// b = [ 1 , 1 , 1 ; 1 , 1 , 1 ; 1 , 1 , 1 ] ;
StructureElement = CreateStructureElement ( ’ s q u a r e ’ ,
3) ;
// Opening i s done by f i r s t a p p l y i n g e r o s i o n and t h e n
d i l a t i o n o p e r a t i o n s on image
b1 = ErodeImage (a , StructureElement ) ;
b2 = DilateImage ( b1 , StructureElement ) ;
// C l o s i n g i s done by f i r s t a p p l y i n g d i l a t i o n and
t h e n e r o s i o n o p e r a t i o n on image
a1 = DilateImage (a , StructureElement ) ;
a2 = ErodeImage ( a1 , StructureElement ) ;
// D i s p l a y i n g o r i g i n a l Image
figure (1)
ShowImage (a , ’ O r i g i n a l Image ’ ) ;
// D i s p l a y i n g Opened Image
figure (2)
ShowImage ( b2 , ’ Opened Image ’ ) ;
xtitle ( ’ Opened Image ’ )
// D i s p l a y i n g C l o s e d Image
figure (3)
ShowImage ( a2 , ’ C l o s e d Image ’ ) ;
xtitle ( ’ C l o s e d Image ’ )
82
Figure 10.2: Scilab Code to perform an opening and closing operation on the
image
83
Chapter 11
Colur Image Processing
Scilab code Exa 11.4 Read an RGB image and extract the three colour components red
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// C a p t i o n : Read an RGB image and e x t r a c t t h e t h r e e
c o l o u r c o m p o n e n ts : red , g r e e n
// and b l u e
// F i g . 1 1 . 4 : MATLAB Example1
// p a g e 5 8 8
clc ;
close ;
RGB = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 1 \ p e p p e r s . png
’ ) ; // SIVP t o o l b o x
R = RGB ;
G = RGB ;
B = RGB ;
R (: ,: ,2) =0;
R (: ,: ,3) =0;
G (: ,: ,1) =0;
G (: ,: ,3) =0;
B (: ,: ,1) =0;
B (: ,: ,2) =0;
figure (1)
ShowColorImage ( RGB , ’ O r i g i n a l C o l o r Image ’ ) ;
// IPD
toolbox
84
19
20
21
22
23
24
25
title ( ’ O r i g i n a l C o l o r Image ’ ) ;
figure (2)
ShowColorImage (R , ’ Red Component ’ ) ;
figure (3)
ShowColorImage (G , ’ Green Component ’ ) ;
figure (4)
ShowColorImage (B , ’ B l u e Component ’ ) ;
Scilab code Exa 11.12 Read a Colour image and separate the colour image into red g
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// C a p t i o n : Read a C o l o u r image and s e p a r a t e t h e
c o l o u r image i n t o : red , g r e e n
// and b l u e p l a n e s
// F i g . 1 1 . 1 2 : MATLAB Example2
// p a g e 5 9 2
clc ;
close ;
RGB = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 1 \ p e p p e r s . png
’ ) ; // SIVP t o o l b o x
a1 = RGB ;
b1 = RGB ;
c1 = RGB ;
a1 (: ,: ,1) =0;
b1 (: ,: ,2) =0;
c1 (: ,: ,3) =0;
figure (1)
ShowColorImage ( RGB , ’ O r i g i n a l C o l o r Image ’ ) ;
// IPD
toolbox
figure (2)
ShowColorImage ( a1 , ’ Red M i s s i n g ’ ) ;
figure (3)
ShowColorImage ( b1 , ’ Green M i s s i n g ’ ) ;
figure (4)
85
Figure 11.1: Read an RGB image and extract the three colour components
red green blue
86
21
ShowColorImage ( c1 , ’ B l u e M i s s i n g ’ ) ;
Scilab code Exa 11.16 Compute the histogram of the colour image
1 // C a p t i o n : Compute t h e h i s t o g r a m o f t h e c o l o u r image
2 // F i g . 1 1 . 1 6 : MATLAB Example3
3 // p a g e 5 9 5
4 clc ;
5 close ;
6 I = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 1 \ l a v e n d e r . j p g ’
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
) ; // SIVP t o o l b o x
figure (1)
ShowColorImage (I , ’ O r i g i n a l C o l o r Image ’ ) ;
// IPD
toolbox
J = im2double ( I ) ;
[ index , map ] = RGB2Ind ( I ) ; // IPD t o o l b o x
pixels = prod ( size ( index ) ) ;
hsv = rgb2hsv ( J ) ;
h = hsv (: ,1) ;
s = hsv (: ,2) ;
v = hsv (: ,3) ;
// F i n d s l o c a t i o n o f b l a c k and w h i t e p i x e l s
darks = find (v <0.2) ;
lights = find (s <0.05 & v >0.85) ;
h ([ darks lights ]) = -1;
// Gets t h e number o f a l l p i x e l s f o r e a c h c o l o u r b i n
black_pixels = length ( darks ) / pixels ;
white_pixels = length ( lights ) / pixels ;
red = length ( find (( h > .9167 | h <= .083) & h ~= -1)
) / pixels ;
yellow = length ( find ( h > .083 & h <= .25) ) / pixels ;
green = length ( find ( h > .25 & h <= .4167) ) / pixels ;
cyan = length ( find ( h > .4167 & h <= .5833) ) / pixels ;
87
Figure 11.2: Read a Colour image and separate the colour image into red
green and blue planes
88
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
blue = length ( find ( h > .5833 & h <= .75) ) / pixels ;
magenta = length ( find ( h > .75 & h <= .9167) ) / pixels ;
// P l o t s h i s t o g r a m
figure (2)
a = gca () ;
a . data_bounds =[0 ,0;8 ,1]
n = 0:0.1:1;
plot2d2 (n , red * ones (1 , length ( n ) ) ,5)
n1 = 1:0.1:2;
plot2d2 ( n1 , yellow * ones (1 , length ( n ) ) ,7)
n2 = 2:0.1:3;
plot2d2 ( n2 , green * ones (1 , length ( n ) ) ,8)
n3 = 3:0.1:4;
plot2d2 ( n3 , cyan * ones (1 , length ( n ) ) ,9)
n4 = 4:0.1:5;
plot2d2 ( n4 , blue * ones (1 , length ( n ) ) ,2)
n5 = 5:0.1:6;
plot2d2 ( n5 , magenta * ones (1 , length ( n ) ) ,3)
n6 = 6:0.1:7;
plot2d2 ( n6 , white_pixels * ones (1 , length ( n ) ) ,0)
n7 = 7:0.1:8
plot2d2 ( n7 , black_pixels * ones (1 , length ( n ) ) ,5)
Scilab code Exa 11.18 Perform histogram equalisation of the given RGB image
1
2
3
4
5
6
7
8
// C a p t i o n : P e r f o r m h i s t o g r a m e q u a l i s a t i o n o f t h e
g i v e n RGB image
// F i g . 1 1 . 1 8 : MATLAB Example4
// p a g e 5 9 6
clc ;
close ;
a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 1 \ p e p p e r s . png ’ )
; // SIVP t o o l b o x
// c o n v e r s i o n o f RGB t o YIQ f o r m a t
b = rgb2ntsc ( a ) ;
89
9 // H i s t o g r a m e q u a l i s a t i o n o f Y component a l o n e
10 b (: ,: ,1) =
11 // c o n v e r s i o n o f YIQ t o RGB f o r m a t
12 c = ntsc2rgb ( b ) ;
13 figure (1)
14 ShowColorImage (a , ’ O r i g i n a l Image ’ ) ;
// IPD t o o l b o x
15 figure (2)
16 ShowColorImage (c , ’ H i s t o g t r a m e q u a l i z e d Image ’ ) ;
// IPD t o o l b o x
Scilab code Exa 11.21 This program performs median filtering of the colour image
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// C a p t i o n : T h i s program p e r f o r m s median f i l t e r i n g o f
t h e c o l o u r image
// F i g . 1 1 . 2 1 : MATLAB Example5
// p a g e 5 9 8
clc ;
close ;
a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 1 \ p e p p e r s . png ’ )
; // SIVP t o o l b o x
b = imnoise (a , ’ s a l t & p e p p e r ’ , 0.2) ;
c (: ,: ,1) = MedianFilter ( b (: ,: ,1) , [3 3]) ;
c (: ,: ,2) = MedianFilter ( b (: ,: ,2) , [3 3]) ;
c (: ,: ,3) = MedianFilter ( b (: ,: ,3) , [3 3]) ;
figure (1)
ShowColorImage (a , ’ O r i g i n a l Image ’ ) ;
// IPD t o o l b o x
figure (2)
ShowColorImage (b , ’ c o r r u p t e d Image ’ ) ;
// IPD
toolbox
figure (3)
ShowColorImage (c , ’ Median F i l t e r e d Image ’ ) ;
// IPD
toolbox
90
Figure 11.3: This program performs median filtering of the colour image
91
Scilab code Exa 11.24 Fitlering only the luminance component
1 // C a p t i o n : F i t l e r i n g o n l y t h e l u m i n a n c e component
2 // F i g . 1 1 . 2 4 : MATLAB Example6
3 // p a g e 5 9 9
4 clc ;
5 close ;
6 a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 1 \ p e p p e r s . png ’ )
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
; // SIVP t o o l b o x
// c o n v e r s i o n o f RGB t o YIQ f o r m a t
yiq = rgb2ntsc ( a ) ;
// E x t r a c t t h e Y component a l o n e
b = yiq (: ,: ,1) ;
h = [ -1 , -1 , -1; -1 ,8 , -1; -1 , -1 , -1];
// P e r f o r m h i g h p a s s f i l t e r i n g o n l y on Y component
c1 = conv2d2 (b , h ) ;
[m , n ]= size ( b ) ;
for i =1: m
for j =1: n
D (i , j ) = c1 (i , j ) ;
end
end
yiq (: ,: ,1) = D ;
// c o n v e r t YIQ t o RGB f o r m a t
a1 = ntsc2rgb ( yiq ) ;
figure (1)
ShowColorImage (a , ’ O r i g i n a l Image ’ ) ;
// IPD t o o l b o x
figure (2)
ShowColorImage ( a1 , ’ High P a s s f i l t e r e d Image ’ ) ;
//
IPD t o o l b o x
92
Figure 11.4: Fitlering only the luminance component
Scilab code Exa 11.28 Perform gamma correction for the given colour image
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// C a p t i o n : P e r f o r m gamma c o r r e c t i o n f o r t h e g i v e n
c o l o u r image
// F i g . 1 1 . 2 8 : MATLAB Example7
// p a g e 6 0 3
close ;
clear ;
clc ;
I = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 1 \ a r a r a u n a . png ’
) ; // SIVP t o o l b o x
gamma_Value = 0.5;
max_intensity = 255; // f o r u i n t 8 image
// Look up t a b l e c r e a t i o n
LUT = max_intensity .*(([0: max_intensity ]./
max_intensity ) .^ gamma_Value ) ;
LUT = floor ( LUT ) ;
// Mapping o f i n p u t p i x e l s i n t o l o o k u p t a b l e v a l u e s
K = double ( I ) +1;
93
Figure 11.5: Perform gamma correction for the given colour image
15
16
17
18
19
20
21
22
23
24
25
26
27
J = zeros ( I ) ;
[m ,n , p ]= size ( K ) ;
for i = 1: m
for j =1: n
for k = 1: p
J (i ,j , k ) = LUT ( K (i ,j , k ) ) ;
end
end
end
figure (1)
ShowColorImage (I , ’ O r i g i n a l Image ’ ) ;
// IPD t o o l b o x
figure (2)
ShowColorImage ( uint8 ( J ) , ’Gamma C o r r e c t e d Image ’ ) ;
// IPD t o o l b o x
Scilab code Exa 11.30 Perform Pseudo Colouring Operation
1
2
3
// C a p t i o n : P e r f o r m Pseudo−C o l o u r i n g O p e r a t i o n
// F i g . 1 1 . 3 0
// p a g e 6 0 4
94
4 close ;
5 clear ;
6 clc ;
7 K = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 1 \ l e n n a . j p g ’ ) ;
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// SIVP t o o l b o x
[m , n ]= size ( K ) ;
I = uint8 ( K ) ;
for i = 1: m
for j =1: n
if ( I (i , j ) >=0 & I (i , j ) <50)
J (i ,j ,1) = I (i , j ) +50;
J (i ,j ,2) = I (i , j ) +100;
J (i ,j ,3) = I (i , j ) +10;
elseif ( I (i , j ) >=50 & I (i , j ) <100)
J (i ,j ,1) = I (i , j ) +35;
J (i ,j ,2) = I (i , j ) +128;
J (i ,j ,3) = I (i , j ) +10;
elseif ( I (i , j ) >=100 & I (i , j ) <150)
J (i ,j ,1) = I (i , j ) +152;
J (i ,j ,2) = I (i , j ) +130;
J (i ,j ,3) = I (i , j ) +15;
elseif ( I (i , j ) >=150 & I (i , j ) <200)
J (i ,j ,1) = I (i , j ) +50;
J (i ,j ,2) = I (i , j ) +140;
J (i ,j ,3) = I (i , j ) +25;
elseif ( I (i , j ) >=200 & I (i , j ) <=256)
J (i ,j ,1) = I (i , j ) +120;
J (i ,j ,2) = I (i , j ) +160;
J (i ,j ,3) = I (i , j ) +45;
end
end
end
figure (1)
ShowImage (K , ’ O r i g i n a l Image ’ ) ;
// IPD t o o l b o x
figure (2)
ShowColorImage (J , ’ Pseudo C o l o u r e d Image ’ ) ;
// IPD
toolbox
95
Figure 11.6: Perform Pseudo Colouring Operation
Scilab code Exa 11.32 Read an RGB image and segment it using the threshold method
1
2
3
4
5
6
7
8
9
10
11
12
13
// C a p t i o n : Read an RGB image and s e g m e n t i t u s i n g t h e
t h r e s h o l d method
// F i g 1 1 . 3 2
// Page605
close ;
clc ;
I = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 1 \ a r a r a u n a . png ’
) ; // SIVP t o o l b o x
// C o n v e r s i o n o f RGB t o YCbCr
b = rgb2ycbcr_1 ( I ) ; // SIVP t o o l b o x
[m ,n , p ]= size ( b ) ;
b = uint8 ( b ) ;
// T h r e s h o l d i s a p p l i e d o n l y t o Cb component
mask = b (: ,: ,2) >120;
figure (1)
96
Figure 11.7: Read an RGB image and segment it using the threshold method
14
15
16
ShowColorImage (I , ’ O r i g i n a l Image ’ ) ;
figure (2)
ShowImage ( mask , ’ Segmented Image ’ ) ;
97
// IPD t o o l b o x
// IPD t o o l b o x
Chapter 12
Wavelet based Image
Processing
Scilab code Exa 12.9 Scilab code to perform wavelet decomposition
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// C a p t i o n : S c i l a b c o d e t o p e r f o r m w a v e l e t
decomposition
// F i g 1 2 . 1 0
// Page624
clc ;
close ;
x = ReadImage ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 2 \ l e n n a . j p g ’
);
// The image i n u n s i g n e d i n t e g e r o r d o u b l e h a s t o be
converted into normalized
// d o u b l e f o r m a t
x = im2double ( x ) ;
// F i r s t L e v e l d e c o m p o s i t i o n
[ CA , CH , CV , CD ]= dwt2 (x , ’ db1 ’ ) ;
// S e c o n d l e v e l d e c o m p o s i t i o n
[ CA1 , CH1 , CV1 , CD1 ]= dwt2 ( CA , ’ db1 ’ ) ;
CA = im2int8 ( CA ) ;
CH = im2int8 ( CH ) ;
CV = im2int8 ( CV ) ;
98
17
18
19
20
21
22
23
24
25
CD = im2int8 ( CD ) ;
CA1 = im2int8 ( CA1 ) ;
CH1 = im2int8 ( CH1 ) ;
CV1 = im2int8 ( CV1 ) ;
CD1 = im2int8 ( CD1 ) ;
A = [ CA , CH ; CV , CD ];
B = [ CA1 , CH1 ; CV1 , CD1 ];
imshow ( B )
title ( ’ R e s u l t o f S e c o n d L e v e l D e c o m p o s i t i o n ’ )
Scilab code Exa 12.42 Scilab code to generate different levels of a Gaussian pyram
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// C a p t i o n : S c i l a b c o d e t o g e n e r a t e d i f f e r e n t l e v e l s
o f a G a u s s i a n pyramid
// F i g 1 2 . 4 2
// Page651
clc ;
close ;
a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 2 \ a p p l e 3 . bmp ’ ) ;
a = rgb2gray ( a ) ;
b = a;
kernelsize = input ( ’ E n t e r t h e s i z e o f t h e k e r n e l : ’ ) ;
sd = input ( ’ E n t e r t h e s t a n d a r d d e v i a t i o n o f h t e
G a u s s i a n window : ’ ) ;
rf = input ( ’ E n t e r t h e R e d u c t i o n F a c t o r : ’ ) ;
// R o u t i n e t o g e n e r a t e G a u s s i a n k e r n e l
k = zeros ( kernelsize , kernelsize ) ;
[ m n ] = size ( b ) ;
t = 0;
for i = 1: kernelsize
for j =1: kernelsize
k (i , j ) = exp ( -(( i - kernelsize /2) .^2+( j kernelsize /2) .^2) /(2* sd .^2) ) /(2* %pi * sd
.^2) ;
t = t + k (i , j ) ;
99
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
end
end
for i = 1: kernelsize
for j = 1: kernelsize
k (i , j ) = k (i , j ) / t ;
end
end
for t = 1:1: rf
// c o n v o l v e i t w i t h t h e p i c t u r e
FilteredImg = b ;
if t ==1
FilteredImg = filter2 (k , b ) /255;
else
FilteredImg = filter2 (k , b ) ;
end ;
// compute t h e s i z e o f t h e r e d u c e d image
m = m /2;
n = n /2;
// c r e a t e t h e r e d u c e d image t h r o u g h s a m p l i n g
b = zeros (m , n ) ;
for i = 1: m
for j = 1: n
b (i , j ) = FilteredImg ( i *2 , j *2) ;
end ;
end ;
end ;
figure
ShowImage (a , ’ O r i g i n a l Image ’ )
figure
ShowImage (b , ’ D i f f e r e n t L e v e l s o f G a u s a i n Pyramid ’ )
title ( ’ D i f f e r e n t L e v e l s o f G a u s a i n Pyramid L e v e l 2 ’ )
Scilab code Exa 12.57 Scilab code to implement watermarking in spatial domain
100
Figure 12.1: Scilab code to generate different levels of a Gaussian pyramid
101
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// C a p t i o n : S c i l a b c o d e t o i m p l e m e n t w a t e r m a r k i n g i n
s p a t i a l domain
// F i g 1 2 . 5 7
// Page662
clc
close
a = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 2 \ cameraman . j p g
’ );
figure
imshow ( a )
title ( ’ Base Image ’ ) ;
b = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 2 \ k e y i m a g e . j p g ’
);
b = rgb2gray ( b ) ;
b = imresize (b ,[32 32] , ’ b i c u b i c ’ ) ;
[ m1 n1 ]= size ( b ) ;
figure
imshow ( b )
title ( ’ Mark Image ’ ) ;
[ m n ]= size ( a ) ;
i1 = 1;
j1 = 1;
p = 1;
c = a;
iii = 1;
jjj = 1;
a = uint8 ( a ) ;
b = uint8 ( b ) ;
for ff = 1:8
for i = 1:32
jjj = 1;
for j = j1 : j1 + n1 -1
a (i , j ) = bitand ( a (i , j ) , uint8 (254) ) ; //
LSB o f b a s e image i s s e t t o z e r o .
temp = bitand ( b (i , jjj ) , uint8 ((2^ ff ) -1) ) ;
//MSB o f t h e mark i s e x t r a c t e d .
temp = temp /((2^ ff ) -1) ;
c (i , j ) = bitor ( a (i , j ) , uint8 ( temp ) ) ; //MSB
102
Figure 12.2: Scilab code to implement watermarking in spatial domain
o f mark i s i n e r t e d i n t o t h e %LSB o f
the base
jjj = jjj +1;
34
35
end
36
end
37
j1 = j1 +32;
38 end
39 imshow ( c )
40 title ( ’ Marked Image ’ ) ;
41 imwrite (c , ’E : \ DIP JAYARAMAN\ C h a p t e r 1 2 \ markimg . j p g ’ ) ;
Scilab code Exa 12.63 Scilab code to implement wavelet based watermarking
1
2
3
4
5
// C a p t i o n : S c i l a b c o d e t o i m p l e m e n t w a v e l e t −b a s e d
watermarking
// F i g 1 2 . 6 3
// Page666
clc ;
close ;
103
6 // O r i g i n a l Image
7 img = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 2 \ cameraman .
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
jpg ’ );
figure
imshow ( img )
title ( ’ O r i g i n a l Image ’ ) ;
[ p q ] = size ( img ) ;
// G e n e r a t e t h e key
// key = i m r e a d ( ’ E : \ DIP JAYARAMAN\ C h a p t e r 1 2 \ keyimg1 .
png ’ ) ;
// key = i m r e s i z e ( key , [ p q ] ) ;
key = imread ( ’E : \ DIP JAYARAMAN\ C h a p t e r 1 2 \ k e y i m a g e .
jpg ’ );
key = rgb2gray ( key ) ;
c = 0.001; // I n i t i a l i s e t h e w e i g h t o f Watermarking
figure
imshow ( key )
title ( ’ Key ’ ) ;
// Wavelet t r a n s f o r m o f o r i g i n a l image ( b a s e image )
img = double ( img ) ;
key = double ( key ) ;
[ ca , ch , cv , cd ] = dwt2 ( img , ’ db1 ’ ) ; // Compute 2D w a v e l e t
transform
// P e r f o r m t h e w a t e r m a r k i n g
y = [ ca ch ; cv cd ];
Y = y + c * key ;
p = p /2;
q = q /2;
for i =1: p
for j =1: q
nca (i , j ) = Y (i , j ) ;
ncv (i , j ) = Y ( i +p , j ) ;
nch (i , j ) = Y (i , j + q ) ;
ncd (i , j ) = Y ( i +p , j + q ) ;
end
end
// D i s p l a y t h e Watermarked image
wimg = idwt2 ( nca , nch , ncv , ncd , ’ db1 ’ ) ;
104
40 wimg1 = uint8 ( wimg ) ;
41 figure
42 imshow ( wimg1 )
43 title ( ’ Watermarked Image ’ )
44 // E x t r a c t i o n o f key from Watermarked image
45 [ rca , rch , rcv , rcd ] = dwt2 ( wimg , ’ db1 ’ ) ; // Compute 2D
46
47
48
49
50
51
52
wavelet transform
n1 =[ rca , rch ; rcv , rcd ];
N1 = n1 - y ;
N1 = N1 *4;
N1 = im2int8 ( N1 ) ;
figure
imshow ( N1 )
title ( ’ E x t r a c t t h e key from w a t e r m a r k e d image ’ )
105
Appendix
Scilab code AP 1 2D Fast Fourier Transform
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function [ a2 ] = fft2d ( a )
// a = any r e a l o r c o m p l e x 2D m a t r i x
// a2 = 2D−DFT o f 2D m a t r i x
’a ’
m = size (a ,1)
n = size (a ,2)
// f o u r i e r t r a n s f o r m a l o n g t h e r o w s
for i =1: n
a1 (: , i ) = exp ( -2* %i * %pi *(0: m -1) ’.*.(0: m -1) / m ) * a (: , i )
end
// f o u r i e r t r a n s f o r m a l o n g t h e c o l u m n s
for j =1: m
a2temp = exp ( -2* %i * %pi *(0: n -1) ’.*.(0: n -1) / n ) *( a1 (j ,:) )
.’
a2 (j ,:) = a2temp . ’
end
for i = 1: m
for j = 1: n
if (( abs ( real ( a2 (i , j ) ) ) <0.0001) &( abs ( imag ( a2 (
i , j ) ) ) <0.0001) )
a2 (i , j ) =0;
elseif ( abs ( real ( a2 (i , j ) ) ) <0.0001)
a2 (i , j ) = 0+ %i * imag ( a2 (i , j ) ) ;
elseif ( abs ( imag ( a2 (i , j ) ) ) <0.0001)
a2 (i , j ) = real ( a2 (i , j ) ) +0;
end
end
106
25 end
Scilab code AP 2 2D Inverse FFT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function [ a ] = ifft2d ( a2 )
// a2 = 2D−DFT o f any r e a l o r c o m p l e x 2D m a t r i x
// a = 2D−IDFT o f a2
m = size ( a2 ,1)
n = size ( a2 ,2)
// I n v e r s e F o u r i e r t r a n s f o r m a l o n g t h e r o w s
for i =1: n
a1 (: , i ) = exp (2* %i * %pi *(0: m -1) ’.*.(0: m -1) / m ) * a2 (: , i )
end
// I n v e r s e f o u r i e r t r a n s f o r m a l o n g t h e c o l u m n s
for j =1: m
atemp = exp (2* %i * %pi *(0: n -1) ’.*.(0: n -1) / n ) *( a1 (j ,:) ) . ’
a (j ,:) = atemp . ’
end
a = a /( m * n )
a = real ( a )
endfunction
Scilab code AP 3 Median Filtering function
1
2
3
4
5
6
7
8
9
10
11
12
13
// The i n p u t t o t h e f u n c t i o n a r e t h e c o r r u p t e d image
a
and t h e d i m e n s i o n
function [ Out_Imag ] = Func_medianall (a , N )
a = double ( a ) ;
[ m n ]= size ( a ) ;
Out_Imag = a ;
if ( modulo (N ,2) ==1)
Start =( N +1) /2;
End = Start ;
else
Start = N /2;
End = Start +1;
end
if ( modulo (N ,2) ==1)
107
14
limit1 =( N -1) /2;
15
limit2 = limit1 ;
16 else
17
limit1 =( N /2) -1;
18
limit2 = limit1 +1;
19 end
20 for i = Start :( m - End +1) ,
21
for j = Start :( n - End +1) ,
22
I =1;
23
for k = - limit1 : limit2 ,
24
for l = - limit1 : limit2 ,
25
mat ( I ) = a ( i +k , j + l ) ;
26
I = I +1;
27
end
28
end
29
mat = gsort ( mat ) ;
// S o r t t h e e l e m e n t s t o
30
31
32
33
34
35
end
36 end
f i n d t h e median
if ( modulo (N ,2) ==1)
Out_Imag (i , j ) =( mat ((( N ^2) +1) /2) ) ;
else
Out_Imag (i , j ) =( mat (( N ^2) /2) + mat ((( N ^2) /2)
+1) ) /2;
end
Scilab code AP 4 To caculate gray level
1 function [ g ] = gray ( m )
2
g = (0: m -1) ’/ max (m -1 ,1)
3 g = [g g g]
4 endfunction
Scilab code AP 5 To change the gray level of gray image
1
2
function [ bout ] = grayslice (I , z )
108
// Output v a r i a b l e s
input v a r i a b l e s )
4 bout =[];
3
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
i n i t i a l i s a t i o n ( not found in
// Number o f a r g u m e n t s i n f u n c t i o n c a l l
[ %nargout , %nargin ] = argn (0)
if %nargin ==1 then
z = 10;
elseif ~ type ( z ) ==1 then
z = double ( z ) ;
end ;
n = z;
if typeof ( I ) == ” u i n t 8 ” then
z = (255*(0: n -1) ) / n ;
elseif isa (I , ’ u i n t 1 6 ’ ) | isa (I , ’ i n t 1 6 ’ ) then
z = 65535*(0:( n -1) ) / n ;
else // I i s d o u b l e o r s i n g l e
z = (0:( n -1) ) / n
end ;
[m , n ] = size ( I ) ;
b = zeros (m , n ) ;
// Loop o v e r a l l i n t e r v a l s , e x c e p t t h e l a s t
for i = 1: length ( z ) -1
// j i s t h e i n d e x v a l u e we w i l l o u t p u t , s o i t
depend upon s t o r a g e c l a s s
if typeof ( b ) == ’ u i n t 8 ’
j = i -1;
else
j = i;
end
d = find (I >= z ( i ) & I < z ( i +1) ) ;
if ~ isempty ( d ) ,
b(d) = j;
end
end
// Take c a r e o f t h a t l a s t i n t e r v a l
109
39 d = find ( I >= z ( $ ) ) ;
40 if ~ isempty ( d ) then
41
// j i s t h e i n d e x v a l u e we w i l l o u t p u t , s o
depend upon s t o r a g e c l a s s
42
if typeof ( b ) == ” u i n t 8 ” then
43
j = length ( z ) -1;
44
else
45
j = length ( z ) ;
46
end ;
47
b(d) = j;
48 end ;
49 bout = b ;
50 bout = double ( bout ) ;
51 endfunction
110
it
Download