Matlab - Image Processing Toolbox

advertisement
MATLAB
Image Processing Toolbox
Introduction
 Collection of functions (MATLAB
files) that supports a wide range of image
processing operations
 Documentation

www.mathworks.com
Read an Image
 Read in an image
 Validates the graphic format
(bmp, hdf, jpeg, pcx, png, tiff, xwd)
 Store it in an array
clear, close all
I = imread(‘pout.tif`);
[X, map] = imread(‘pout.tif’);
Display an Image
imshow(I)
Check the Image in Memory
 < Name, Size, Bytes, Class >
whos
Name
Size
Bytes Class
ans
291x240
69840 uint8 array
Grand total is 69840 elements using 69840 bytes
uint8
uint16
double
[0, 255]
[0, 65535]
[0, 1]
Histogram Equalization
 Histogram: distribution of intensities
figure, imhist(I)
 Equalize Image (contrast)
I2 = histeq(I);
figure, imshow(I2)
figure, imhist(I2)
Histogram Equalization
(cont.)
Histogram Equalization
(cont.)
Write the Image
 Validates the extension
 Writes the image to disk
imwrite(I2, ’pout2.png’);
imwrite(I2, ‘pout2.png’, ‘BitDepth’, 4);
Morphological Opening
 Remove objects that cannot completely
contain a structuring element
 Estimate background illumination
clear, close all
I = imread(‘rice.tif’);
imshow(I)
background = imopen(I, strel(‘disk’, 15));
imshow(background)
Morphological Opening
(cont.)
Subtract Images
 Create a more uniform background
I2 = imsubtract(I, background);
figure, imshow(I2)
Adjust the Image Contrast
 stretchlim computes [low hight] to be
mapped into [bottom top]
I3 = imadjust(I2, stretchlim(I2), [0 1]);
figure, imshow(I3)
Apply Thresholding
to the Image
 Create a binary thresholded image
1.
2.
Compute a threshold to convert the intensity
image to binary
Perform thresholding creating a logical matrix
(binary image)
level = graythresh(I3);
bw = im2bw(I3, level);
figure, imshow(bw)
Apply Thresholding
to the Image (cont.)
Labeling Connected
Components
 Determine the number of objects in the
image
 Accuracy
(size of objects, approximated background,
connectivity parameter, touching objects)
[labeled, numObjects] = bwlabel(bw, 4);
numObjects
max(labeled(:))
{= 80}
Select and Display
Pixels in a Region
 Interactive selection
grain = imcrop(labeled)
 Colormap creation function
RGB_label = label2rgb(labeled,
@spring, ‘c’, ‘shuffle’);
imshow(RGB_label);
rect = [15 25 10 10];
roi = imcrop(labeled, rect)
Object Properties
 Measure object or region properties
graindata = regionprops(labeled, ‘basic’)
graindata(51).Area
{296}
graindata(51).BoundingBox
{142.5 89.5 24.0 26.0}
graindata(51).Centroid
{155.3953 102.1791}
 Create a vector which holds just one property for
each object
allgrains = [graindata.Area];
whos
Statistical Properties
of Objects
max(allgrains)
{ 695 }
 Return the component label of a grain size
biggrain = find(allgrains == 695) { 68 }
 Mean grain size
mean(allgrains)
 Histogram (#bins)
hist(allgrains, 20)
{ 249 }
Statistical Properties
of Objects (cont.)
Storage Classes
 double (64-bit), uint8 (8-bit), and uint16
(16-bit)
 Converting (rescale or offset)
double
im2double (automatic rescale and offsetting)
RGB2 = im2uint8(RGB1);
im2uint16
imapprox (reduce number of colors: indexed images)
Image Types
 Index
Data matrix (uint8, uint16, double)
 Colormap matrix (m x 3 array of double [0 1])

 Intensity (black = 0, white = )
 Binary (0, 1)
B = logical(uint8(round(A)));
B = +A; (logical flag off)
(logical flag on)
 RGB (m x n x 3 of truecolor)
Converting Image Types





dither
gray2ind
grayslice
im2bw
ind2gray




ind2rgb
mat2gray
rgb2gray
rgb2ind
Multiframe Image Arrays
 Same size, #planes, colormap
 Store separate images into one multiframe
array
A = cat(4, A1, A2, A3, A4, A5)
 Extract frames from a multiframe array
FRM3 = MULTI(:, :, :, 3)
 Display a frame
imshow(MULTI(:, :, :, 7))
Image Arithmetic




imabsdiff
imadd
imcomplement
imdivide
 imlincomb
 immultiply
 imsubtract
Adding Images
I = imread(‘rice.tif’);
J = imread(‘cameraman.tif’);
K = imadd(I, J);
imshow(K)
 Brighten an image results saturation
RGB = imread(‘flowers.tif’);
RGB2 = imadd(RGB, 50);
subplot(1, 2, 1); imshow(RGB);
subplot(1, 2, 2); imshow(RGB2);
Adding Images (cont.)
Adding Images (cont.)
Subtracting Images
 Background of a scene
rice = imread(‘rice.tif’);
background = imopen(rice, strel(‘disk’, 15));
rice2 = imsubtract(rice, background);
imshow(rice), figure, imshow(rice2);
 Negative values
imabsdiff
Subtracting Images (cont.)
Multiplying Images
 Scaling: multiply by a constant

(brightens >1, darkens <1)
 Preserves relative contrast
I = imread(‘moon.tif’);
J = immultiply(I, 1.2);
imshow(I);
figure, imshow(J)
Multiplying Images (cont.)
Dividing Images (Ratioing)
I = imread(‘rice.tif’);
background = imopen(I, strel(‘disk’, 15));
Ip = imdivide(I, background);
imshow(Ip, [])
 Linear combination only truncates the final
result
K = imlincomb(.5, I, .5, I2);
Dividing Images (cont.)
Coordinate Systems
 Pixel Coordinates



Discrete unit (integer)
(r, c)
 = (1, 1)
123
 Spatial Coordinates



Continuous unit
(x, y)
= (0.5, 0.5)
Non-default Spatial
Coordinate System
A = magic(5);
x = [19.5 23.5];
y = [8.0 12.0];
image(A, ‘xData’, x, ‘yData’, y), axis image,
colormap(jet(25))
Spatial Transformations
 Map pixel locations in an input image to
new locations in an output image



Resizing
Rotation
Cropping
Resizing Images
 Change the size of an image
I = imread(‘ic.tif’);
J = imresize(I, 1.25);
K = imresize(I, [100 150]);
figure, imshow(J)
figure, imshow(K)
Resizing Images (cont.)
Rotating Images
 Rotate an image by an angle in degrees
I = imread(‘ic.tif’);
J = imrotate(I, 35, ‘bilinear’);
imshow(I)
figure, imshow(J)
Rotating Images (cont.)
Cropping Images
 Extract a rectangular portion of an image
imshow ic.tif
I = imcrop;
Download