You are on page 1of 24

*

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

*
*Relevant data types
* double – default in most cases
* single
* uint8 – [0 255]
* uint16 – [0 65,535]
* Logical – [0 1]
*Simple casting: double(), uint8().
*Useful when displaying images with a dynamic
range not corresponding to its actual type.
*Conversion:
im2double(),im2uint8(),lab2double(),lab2uint8()

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

Max difference between images: 1


I I2

*
I = double(imread('world.jpg'));
I2 = I-1.4;
diffI = I-I2;
fprintf('Max difference between images:
%2.1f\n',max(diffI(:)));
figure(1);
subplot(1,2,1);
imshow(I); title('I');
subplot(1,2,2);
imshow(I2); title('I2');

Max difference between images: 1.4


I I2

*
2D Matrix

* Intensity: Each pixel value in the dynamic range [minP,


maxP].
* Can represent a grayscale image, results of a 2d function,
fuzzy ground truth, etc.
* Useful commands: imagesc(), axis, colormap().
* Binary: a.k.a masks.
* Can represent absolute ground truth, etc.
* Useful commands:
bwlabel(),bwmorph(),bwdist(),im2bw(),bwperim().

*
2D Matrix

* Indexed: Each pixel value in the range [minP, maxP].


* Can represent segmentation.
* Useful commands: regionprops(),label2rgb()

*
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().

*
Useful Commands
* imread() – read image
* imwrite() – write image
* im2fram() – convert image to movie frame
* movie2avi() – write avi file
* aviread() – read avi file
* mmreader()/VideoReader() – read video (better)
* movie() – show movie

*
Useful Commands:
* sub2ind()– convert subscript (e.g. (r,c,clr)) to index (n).
* Ind2sub() – convert index (n) to subscipt (e.g. (r,c,clr)).
* meshgrid() – generate X,Y grids.

*
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-)destinct blocks.
* fspecial() – Create common image filter kernals.
* imresize() – Resize image using defined interpolation.
* kron() – Kronecker tensor product
* padarray() – Pad image.
* colfilt() – Colum-stack filtering (faster)
* imfreehand()- Select region with mouse
*
* 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.

*
Useful Commands:

* scatter() – Useful to plot points on image.


* Imagesc() – Useful for 2D data.
* print() – Save figure as image on disk (careful with lossy
compressions)

*
* 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

*
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.

*
Stenography (Wikipedia)
The art of hiding a message within another larger message

Original Result

*
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');

*
Almost Connected (Steve Eddins’ Blog)

*
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
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

*
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

*
Feature AND (Steve Eddins’ Blog)
bw = imread('text.png');
dots = rand(size(bw))>0.99;

*
Feature AND (Steve Eddins’ Blog)
touching_pixels = bw & dots;

Overlapping

*
Feature AND (Steve Eddins’ Blog)
out = imreconstruct(touching_pixels, bw);

Reconstructed

You might also like