Sie sind auf Seite 1von 26

Advanced

MATLAB
046746

Topics
Data Types
Image Representation
Image/Video I/O
Matrix access
Image Manipulation
MEX - MATLAB Executable
Data Visualization
General Tips
Tricks

Data Types
Relevant data types
double default in most cases (usually 64 bit)
single when you want to save memory (usually 32
bit)
uint8 [0 255] native for images
uint16 [0 65,535]
Logical [0 1] native for masks

Simple casting: double(), uint8().


Useful when displaying images with a
dynamic range not corresponding to its
actual type.
Conversion (of images):
im2double(),im2uint8(),lab2double(),lab2uint8()
rgb2ind(),ind2rgb(),makecform()

Common problem

I = imread('world.jpg');
I = imread('world.jpg');
I2 = I-1.4;
I2 = I-1.4;
diffI = I-I2;
diffI = I-I2;
fprintf('Max difference between images: %d\n',max(diffI(:)));
fprintf('Max difference between images: %d\n',max(diffI(:)));
Max difference between images: 1

fprintf('Max difference between images:


fprintf('Max difference between images:
%2.1f\n',max(diffI(:)));
%2.1f\n',max(diffI(:)));
Max difference between images: 1.4

A much better practice is:


display([ 'Max difference between images: ' num2str( max(diffI(:)) )
]);

Max difference between images: 1.4

Image Representation
2D Matrix
Intensity: Each pixel value in the dynamic range
[minP, maxP].
Can represent a grayscale image, results of a 2d
function, etc.
Useful commands: imagesc(), axis, colormap().

Binary: a.k.a masks.


Can represent absolute ground truth, etc.
Useful commands:
bwlabel(),bwmorph(),bwdist(),im2bw(),bwperim().

Image Representation
2D Matrix
Indexed: Each pixel value in the range [minP,
maxP].
Can represent segmentation.
Useful commands: regionprops(),label2rgb()

Image Representation
3D Matrix
True Color: Three 2D matrices stacked. Each
represents a color component. (e.g. RGB)
Can represent an RGB color image, LAB image, etc.
Useful commands: imshow(),rgb2gray(),rgb2ind().

Image/Video I/O
Useful Commands

imread() read image


imwrite() write image
im2frame() convert image to movie frame
movie2avi() write avi file
aviread() read avi file
mmreader()/VideoReader() read video (better)
VideoWriter() create video file (2011b+)
movie() show movie
implay() show video interactively

Matrix access
Useful Commands:
Ind = sub2ind(matrixSize, rowSub, colSub)
convert subscript to index.
[I,J] = ind2sub(siz,IND) convert index to
subscipt.
meshgrid() generate X,Y grids.
F = scatteredInterpolant(x,y,v) - creates an
interpolant that fits a surface of the form v =
F(x,y). (replaced TriScatteredInterp)

Image Manipulation
Useful Commands:

imcrop() Useful for interactive cropping.


imrotate() Rotate image.
imfilter() Use kernal to convolve/correlation.
nlfilter() Sliding neighborhood operation.
blkproc() Perform function on (semi-)distinct blocks.
fspecial() Create common image filter kernels.
imresize() Resize image using defined interpolation.
kron() Kronecker tensor product
padarray() Pad image.
colfilt() Colum-stack filtering (faster)
imfreehand()- Select region with mouse

MEX - MATLAB
Executable
Dynamically linked subroutines produced from C,
C++ or Fortran source code.
Useful when dealing with non efficient-Matlab
algorithms (e.g. iterative algorithm implemented
as loops).
mex setup : Setup mex compiling configurations.

Data Visualization
Useful Commands:
scatter()/plot() Useful to plot points on image.
imagesc() Useful for 2D data.
print() Save figure as image on disk (careful with
lossy compressions)

General Tips
Avoid loops
Manage memory (Clear unused variables)
Useful command: clearvars()

Avoid memory duplication use nested functions


function myfun
A = magic(500);
function setrowval(row, value)
A(row,:) = value;
end
setrowval(400, 0);
disp('The new value of A(399:401,1:10) is')
A(399:401,1:10)
end

General Tips
Avoid memory duplication dont want to use
nested functions? Simply use the same variable
name:
function x = demo
x=rand(10000);
x=func(x);
function a=func(a)
a=a*2;

General Tips
Preallocating Arrays
tic
x = 0;
for k = 2:1000000
x(k) = x(k-1) + 5;
end
toc
Elapsed time is 0.301528 seconds.
tic
x = zeros(1, 1000000);
for k = 2:1000000
x(k) = x(k-1) + 5;
end
toc
Elapsed time is 0.011938 seconds.

Preallocate correctly
A = int8(zeros(100));
A = zeros(100, 'int8');

General Tips
You will be amazed of the variety of built in
functions that Matlab offers.
In fact, assume that the function you need is built
in Matlab. Its probably true!
Use Matlab help to understand how to use
functions
Use Google to search for new functions!

General Tips
Long-Term Usage (Windows Systems Only)
On 32-bit Microsoft Windows, the workspace of MATLAB can
fragment over time due to the fact that the Windows memory
manager does not return blocks of certain types and sizes to the
operating system. Clearing the MATLAB workspace does not
fix this problem. You can minimize the problem by allocating
the largest variables first. This cannot address, however, the
eventual fragmentation of the workspace that occurs from
continual use of MATLAB over many days and weeks, for example.
The only solution to this is to save your work and restart
MATLAB.
The pack command, which saves all variables to disk and loads
them back, does not help with this situation.

Tricks
Stenography

(Wikipedia)

The art of hiding a message within another larger message


Original

Result

Tricks
Stenography

(Wikipedia)

The art of hiding a message within another larger message

I= imread('StenographyOriginal.png');
I4=85*mod(I,4);
figure;
subplot(1,2,1)
imshow(I); title('Original');
subplot(1,2,2)
imshow(I4);title('Result');

Tricks

Almost Connected (Steve Eddins Blog)

Tricks

Almost Connected (Steve Eddins Blog)


url = 'http://blogs.mathworks.com/images/steve/2010/blobs_in_clumps.png';
bw = imread(url);
lbl = bwlabel(bw);
figure; imagesc(lbl); axis image;

50

100

150

200

250

300

50

100

150

200

250

300

Tricks

Almost Connected (Steve Eddins Blog)


bw2 = bwdist(bw) <= 12.5;
lbl2 = bwlabel(bw2);
figure; imshow(bw2);
figure; imagesc(lbl2); axis image;

50

100

150

200

250

300

50

100

150

200

250

300

Tricks

Almost Connected (Steve Eddins Blog)


lbl3 = lbl2.*bw;
figure;
imagesc(lbl3); axis image;

50

100

150

200

250

300

50

100

150

200

250

300

Tricks

eature AND

(Steve Eddins Blog)

bw = imread('text.png');
dots = rand(size(bw))>0.99;
Original

Dots

Tricks

eature AND

(Steve Eddins Blog)

touching_pixels = bw & dots;


Overlapping

Tricks

eature AND

(Steve Eddins Blog)

out = imreconstruct(touching_pixels, bw);


Reconstructed

course this will work just as well:


out = imreconstruct(dots, bw);

Das könnte Ihnen auch gefallen