Image Processing
What is Image Processing ?
Image Processing is any form of signal processing
for which our input is an image, such as
photographs or frames of video and our output can
be either an image or a set of characteristics or
parameters related to the image.
Image Processing generally refers to processing of
two dimensional picture and by two dimensional
picture we implies a digital image.
A digital image is an array of real or complex
numbers represented by a finite number of bits.
But now in these days optical and analog image
processing is also possible.
Applications
Face detection
Feature detection
Non-photorealistic rendering
Medical image processing
Microscope image processing
Morphological image processing
Remote sensing
Automated Sieving Procedures
Finger print recognization
How image processing is done ?
Image processing can be done using various
softwares and languages such as:-
Software
Matlab
Adobe photoshop
Irfan view
Language
VHDL
C/C++
Image processing using MATLAB
MATLAB
The name MATLAB stands for matrix laboratory . It
is a high-performance language for technical
computing. It is an interactive system whose basic
data element is an array which does not require any
dimensioning. This allows us to solve many
technical computing problems, especially those with
matrix and vector formulations, in a fraction of the
time.
MATLAB features a family of add-on application-
specific solutions called toolboxes. These toolboxes
are comprehensive collections of matlab functions
(M-files) that extend the matlab environment to
solve particular classes of problems. Areas in which
toolboxes are available include image processing,
signal processing, control systems, neural networks,
fuzzy logic, wavelets, simulation, and many others..
Image Processing Toolbox
Image processing toolbox
The Image Processing Toolbox is a collection of
functions that extend the capability of the Matlab
numeric computing environment. These functions
are written on M-files and further we can extend the
capabilities of the Image Processing Toolbox by
writing our own M-files. This toolbox supports a
wide range of image processing operations such as..
Operations of image processing
Color corrections such as brightness and contrast
adjustments, quantization, or color translation to a
different color space.
Image registration, the alignment of two or more
images.
Image segmentation.
Neighborhood and block operations.
Linear filtering and filter design.
Transforms.
High dynamic range imaging by combining multiple
images.
Deblurring.
Image formats supported by Matlab
The following image formats are supported by
Matlab:
BMP
HDF
JPEG
PCX
TIFF
XWB
Types of images
Intensity image
This is the equivalent to a "gray scale image“ . It
represents an image as a matrix where every
element has a value corresponding to how
bright/dark (each element represent intensities).
Binary image
This image format also stores an image as a matrix
but can only color a pixel black or white (and nothing
in between). It assigns a 0 for black and a 1 for white.
Indexed image
This is a practical way of representing color images.
An indexed image stores an image as two matrices.
The first matrix has the same size as the image and
one number for each pixel. The second matrix is
called the color map and its size may be different
from the image. The numbers in the first matrix is
an instruction of what number to use in the color
map matrix.
RGB image
It represents an image with three matrices of sizes
matching the image format. Each matrix
corresponds to one of the colors red, green or blue
and gives an instruction of how much of each of
these colors a certain pixel should use. A pixel
whose color components are (255,255,255) is
displayed as White. And whose color components
are (0,0,0) is displayed as Black.
Commands for intensity Adjustment
Histeq( ): This command is used to improve the
contrast in the image. This function spreads the
intensity values over the full range of the image, and
this process is known as histogram equalization.
Syntax
histeq(‘Image_name.format’);
After
Before
Imadjust( ): This command is used to adjust the
contrast of the image. Imadjust increases the
contrast of the image by saturating 1% of the data at
both low and high intensities of Image and by
stretching the intensity.
Syntax
Imadjust(‘image_name.format’)
Examples of imadjust
Adapthisteq( ): This command is used to perform
contrast-limited adaptive histogram equalization
(CLAHE). It is an alternative to function histeq,
While histeq works on the entire image, adapthisteq
operates on small regions in the image, called tiles.
Syntax
adapthisteq(‘Image_name.format’);
Before After
Commands used for various file operations
in image processing toolbox.
Imread( ): This command is used to read that image on
which the operation has to be done. Imread returns the
image data in the array. If the file contains a grayscale
image, then it will return a two-dimensional (M-by-N)
array and if the file contains a color image, it will return a
three-dimensional (M-by-N-by-3) array. The class of the
returned array depends on the data type used by the file
format.
Syntax
Imread(‘image_name.format’)
Imview( ): This command is used to view the image
on the screen. And this command is always used
with the imread and imwrite command, because, it
views only that image which is under process.
Syntax
Imview(‘image_name.format’)
Result of above explained commands.
Imwrite( , ): This command is used to change the
format of read file. By using this command we can
change the file formats from one to another.
Syntax
Imwrite(‘image_name.format2’, ‘image_name.format1’)
Imfinfo( ): This command is used to obtain the
information about the image under process. It is
used to obtain information such as size, position of
pixels, number of rows and columns etc.
Syntax
Iminfo(‘image_name.format’)
Imsubtract( , ): This command is used to create a
more uniform background, by subtracting the
background image from the original image.
To estimate the background image, we use following
command:
background=imopen(‘Image_name.format’,strel('disk',15))
To see the estimated background image, type:
imview(background)
Now subtract the background image from the
original image, type:
imsubtract(‘image_name.format’,background);
Result of the above used commands
Imresize( , ): This command is used to resize the
processed image. To enlarge an image, specify a
magnification factor greater than 1 in the command. To
reduce an image, specify a magnification factor between 0
and 1 in the command.
Syntax
imresize(‘Image_name.format’, value);
Image Rotation( , ): This command is used to rotate
the given image. This command accepts two primary
arguments, one is the image to be rotated and other
one is rotation angle. We have to specify the rotation
angle in degrees. If a positive value is specified then
imrotate rotates the image counterclockwise and if a
negative value then imrotate rotates the image
clockwise.
Syntax
imrotate(‘Image_name.format’, angle_in_degree);
Result of the above used commands
Imcrop( , ); This command is used to crop the particular
image. It accepts two primary arguments:
The image to be cropped.
The coordinates of a rectangle that defines the crop area.
If we call imcrop without specifying the crop rectangle,
we can specify the crop rectangle interactively. In this case,
the cursor changes to crosshairs when it is over the image.
Position the crosshairs over a corner of the crop region and
press and hold the left mouse button. When we drag the
crosshairs over the image we specify the rectangular crop
region. imcrop draws a rectangle around the area we are
selecting. When we release the mouse button, imcrop
creates a new image from the selected region.
Syntax
Imcrop(‘image_name.format’);
After
Before
If we call imcrop with specifying the crop rectangle,
imcrop operates on the image in the current axes.
Syntax
Imcrop(‘Image_name.format’ , [rect]);
Imerode( , ): This command is used to erode the image. This
function accepts two primary arguments:
The input image to be processed (grayscale, binary image),
A structuring element object, returned by the strel
function, or a binary matrix defining the neighborhood of a
structuring element.
Syntax
Imerode(‘binary_image.format’ , strel);
Before After
Im2bw = This command is used to convert the given
image in to binary image. This command is mainly
followed by one another command i.e.
level=graythresh(image_name.format).
Syntax
Level=graythresh(‘image_name.format’)
Bw=im2bw(‘image_name.format’, level)
Before After
Duller = This command is used to fade the image, so that,
other image on which it is overlapped can be easily
viewed.
Syntax 0.5
Duller= * ‘image_name.format’
This is the amount by which the fading is done.
Combine = This command is used to combine or overlap
the two images. This is the command on which over all
project stands.
Syntax
Combine= image1 +image2.
Image Conversions
We can convert images in any of formats/types
described above using the following commands.
Intensity format to Indexed format.
gray2ind( )
Gray Indexed
indexed
format to intensity format.
ind2gray()
Indexed Gray
RGBformat to intensity format.
rgb2gray( )
RGB Gray
RGB format to indexed format. rgb2ind( )
RGB Indexed
IMAGE ANALYSIS
Image analysis return information about the
structure of an image. This section describes toolbox
functions that we can use for these image analysis
techniques which includes:
EdgeDetection
Boundary Tracing
Quadtree Decomposition
Edge Detection
We can use the edge function to detect edges, which
are those places in an image that correspond to
object boundaries. To find edges, this function looks
for places in the image where the intensity changes
rapidly. Edge takes an intensity image I as its input,
and returns a binary image BW of the same size as I,
with 1's where the function finds edges in I and 0's
elsewhere.
Canny Method
The most powerful edge-detection method that edge
provides is the Canny method. The Canny method differs
from the other edge-detection methods in that it uses two
different thresholds (to detect strong and weak edges), and
includes the weak edges in the output only if they are
connected to strong edges. This method is therefore less
likely than the others to be fooled by noise, and more likely to
detect true weak edges.
Syntax
Edge (‘image_name.fomat’,'canny');
Before After
Boundary Tracing
The toolbox includes two functions you can use to
find the boundaries of objects in a binary image:
Bwtraceboundary
Bwboundaries
Bwtraceboundary
The bwtraceboundary function returns the row and
column coordinates of all the pixels on the border
of an object in an image. We must specify the
location of a border pixel on the object as the
starting point for the trace.
Syntax
boundary = bwtraceboundary(binary_image,[row, col],'N');
Bwboundaries
The bwboundaries function returns the row and
column coordinates of border pixels of all the
objects in an image.
Syntax
binary_image _filled = imfill(binary_image,'holes');
boundaries = bwboundaries(binary_image _filled);
Example of above explained
commands
Quadtree Decomposition
Quadtree decomposition is an analysis technique that
involves subdividing an image into blocks that are more
homogeneous than the image itself. This technique
reveals information about the structure of the image.
Syntax
qtdecomp(‘Image_name.format’,threshold);
Before After
Noise Removal
Digital images are prone to a variety of types of noise. There
are several ways that noise can be introduced into an image,
depending on how the image is created. For example:
If the image is scanned from a photograph made on film, the
film grain is a source of noise. Noise can also be the result of
damage to the film, or be introduced by the scanner itself.
If the image is acquired directly in a digital format, the
mechanism for gathering the data (such as a CCD detector)
can introduce noise.Electronic transmission of image data
can introduce noise.
The Image Processing toolbox provides a number of different
ways to remove or reduce noise in an image. Different
methods are better for different kinds of noise. The method
which is used mostly to remove noise is Filtering.
Filtering
Filtering is a technique for modifying or enhancing an
image. It is a neighborhood operation, in which the value
of any given pixel in the output image is determined by
applying some algorithm to the values of the pixels in the
neighborhood of the corresponding input pixel. A pixel's
neighborhood is some set of pixels, defined by their
locations relative to that pixel. Filtering is further
categories as following:
Linear Filtering
Median Filtering
Adaptive Filtering
Image Histogram
An image histogram is a chart that shows the
distribution of intensities in an indexed or intensity
image. The image histogram function imhist creates
this plot by making n equally spaced bins, each
representing a range of data values. It then
calculates the number of pixels within each range.
Syntax
Imhist(‘Image_name.format’);
Histogram of a given image
Project: fingerprint
Recognition
Project: Fingerprint Recognition
FINGERPRINT RECOGNITION or FINGERPRINT
AUTHENTICATION refers to the automated method
of verifying a match between two human
fingerprints. Fingerprints are one of many forms of
biometrics used to identify an individual and verify
their identity.
Fingerprint Recognition touches on two major
classes of algorithms, one is based upon PATTERNS
and other one is based upon MINUTIA.
Patterns of Fingerprints
The basic patterns of fingerprint ridges includes :-
Arch pattern: An arch is a pattern where the ridges enter
from one side of the finger, rise in the center forming an
arc, and then exit the other side of the finger as shown in
following figure..
Loop Pattern: It is a pattern where the ridges enter
from one side of a finger, form a curve, and tend to
exit from the same side they enter as shown in the
following figure..
Whirl Pattern: It is completely different from others.
In this ridges form circularly around a central point
on the finger as shown in the following figure..
Minutia Features
The major Minutia features of fingerprint ridges
includes :
Ridge Ending: The ridge ending is the point at which
a ridge terminates and this could be better
explained with the help of image, which is shown
below..
Bifurcations : These are the points at which a
single ridge splits into two ridges as shown in
the following image..
Short ridges (or dots): These are ridges which are
significantly shorter than the average ridge length
on the fingerprint as shown in the following image..
)
ot
r D
(o
ge
Rid
r t
o
Sh
Methods of Fingerprint Recognition
There are various methods of fingerprint
recognization using MATLAB which includes:-
Overlappingor Combining.
Comparing slopes of ridges.
Other methods.
Overlapping or Combining Method
Overlapping or Combining Method
It is the one of the oldest technique of fingerprint
matching. In this the two images of known
fingerprints and unknown fingerprints are
overlapped and checked for similarities. Also for
recognization the position of the pixels of combined
image is matched with the other images for the
better result.
Basically for overlapping the images, firstly they
are converted into the binary images and then they
are overlapped. Also for improving the results some
other operation are also done like normalization,
thinning etc.. according to the requirements.
Program for overlapping
Program
i=imread('fp1.bmp');
imview(i);
level=graythresh(i);
bw=im2bw(i,level);
imview(bw);
imview(~bw);
imshow(bw,[1 0 0 ; 0 0 1]);
Result of the above used commands
i2=imread('fp2.bmp');
imview(i2);
level=graythresh(i);
bw2=im2bw(i2,level);
imview(bw2);
imview(~bw2);
imshow(bw2,[1 0 0 ; 0 0 1]);
Result of the above used commands
duller= bw2 * 0.5;
imview(duller);
combine=bw+duller;
imview(combine);
Result
From the above program, we come to know that
whether two finger prints are similar or not.
As it is clear from the above program that two
fingerprints does not overlap each other completely.
Hence these finger prints are of two different
persons.
Advantages
It is the simplest method for fingerprint
authentication.
It is less time consuming method.
It is comparatively easy to implement.
It is an interactive method for recognizing
fingerprints.
Disadvantages
It does not give us accurate result everytime
because it does not relates the minutia features.
We can only overlap the pictures having same
dimensions.
Comparing slopes of ridges
Comparing slopes of ridges
This method is mainly used in these days for
fingerprint authentication. In this method we
compare the slopes of the ridges of two
images of fingerprints. This method is mainly
based upon matching minutia.
Program for comparing slopes
Program
Step 1: Load Image
RGB = imread('fingerprint.bmp');
imshow(RGB);
imview(RGB);
Original
image
Step 2: Extract The Region Of Interest
start_row = 73;
start_col = 105;
cropRGB = RGB(start_row:134, start_col:233, :);
figure, imshow(cropRGB);
imview(RGB);
offsetX = start_col-1;
offsetY = start_row-1;
Cropped image
Step 3: Threshold The Image
Convert the image to black and white for subsequent extraction
of the edge coordinates using bwtraceboundary routine.
I = rgb2gray(cropRGB);
threshold = graythresh(I);
BW = im2bw(I,threshold);
BW = ~BW; Binary image
Figure, imshow(BW);
i2=edge(BW, 'canny');
figure, imshow(i2); Canny image
imview(i2);
Step 4: Find Initial Point On Each Boundary
The bwtraceboundary routine requires that you specify a
single point on a boundary. This point is used as the
starting location for the boundary tracing process.
dim = size(i2);
col1 = 40;
row1 = min(find(i2(:,col1)));
row2 = 30;
col2 = min(find(i2(row2,:)));
Step 5: Trace The Boundaries
boundary1 = bwtraceboundary(BW, [row1, col1], 'N', 8, 70);
boundary2 = bwtraceboundary(i2, [row2, col2], 'E', 8, 90,'counter');
figure, imshow(RGB);
Marked image
imview(RGB);
plot(offsetX+boundary1(:,2),offsetY+boundary1(:,1),'g','LineWidth',2);
plot(offsetX+boundary2(:,2),offsetY+boundary2(:,1),'g','LineWidth',2);
Step 6: Fit Lines To The Boundaries
ab1 = polyfit(boundary1(:,2), boundary1(:,1), 1);
ab2 = polyfit(boundary2(:,2), boundary2(:,1), 1);
Step 7: Find The Angle Of Intersection
Use the dot product to find the angle.
vect1 = [1 ab1(1)];
vect2 = [1 ab2(1)];
dp = dot(vect1, vect2);
length1 = sqrt(sum(vect1.^2));
length2 = sqrt(sum(vect2.^2));
angle = 180-acos(dp/(length1*length2))*180/pi
Result of all used command in program
Result
Angle between the marked ridges of image is
142.0786 .
Advantages
This one is more accurate than the overlapping
method because it is based upon minutia.
It is an interactive method for recognizing
fingerprints.
Disadvantages
Itis more time consuming as compared to the
former.
More complex program.