470 likes | 591 Views
Digital Image Processing Matlab Basics. based on Elboher ‘s slides , HUJI. Istructor : Abed Asi. Matlab. It allows one to perform numerical calculations, and visualize the results without the need for complicated and time consuming programming.
E N D
Digital Image ProcessingMatlab Basics based on Elboher ‘s slides , HUJI Istructor: AbedAsi
Matlab • It allows one to perform numerical calculations, and visualize the results without the need for complicated and time consuming programming. • Every variable in Matlab is a multidimensional matrix. • Highly modular. • No memory allocation is necessary. • Matlab enables its own garbage collection. • Simple interface for complex mathematical concepts. • Enables OO Programming.
Getting Help >> help help(explain how to get help) >>helpbrowser / doc (open the online Matlab documentation) >>help images (list of all commands in the Image Processing Toolbox) >> demo (supply various guide videos) >>lookfor read (display list of functions with ‘read’ in the name or help text) >>type imread(display contents of file) >>help imread(function name + % block) >>doc imread(function documentation in help browser) • Using [tab] is useful to auto-complete function names and variables
Matlab Basics • Digital image representation : 2D function f(x,y) -> finite discrete quantities • Coordinate Conventions: img(r,c)r–rows (height)c–cols (width) • >> size(img) • The first pixel:img(1,1)
Image Types • Intensity images scaled to represent intensities (uint8 – [0,255], double [0,1]) • Binary images logical array of 0s and 1s • Indexed images Look up table [x, map] • RGB imagestruecolor, array of (m*n*3) • Checking the image type : isind, isbw, isgray, isrgbConverting image types: rgb2ind, rgb2gray, gray2ind, ind2gray,….
Reading Images >>f = imread(‘filename’);filename is a string including the file type (jpg, tiff,…) ; is used for suppressing output >> [height, width] = size(f); >> whos f display additional information about an array Name Size Bytes Class f 512x512x3 786432 uint8 array Grand total is 786432 elements using 786432 byte
Displaying Images • >>imshow(f) display the image f according to its type • >> imshow(f, [low high])display as black all values less than ‘low’ and as white all values greater or equal to ‘high’ (in grayscale images) • >> imshow(f, [])set low and high as the minimal and maximal values of array f (in grayscale images) • >> impixelinfodisplay intensity value of individual pixel interactively • >> figure(2), imshow(g) Open a new figure before displaying the image (the default – using the same figure)
Writing Images • >> imwrite(f, ‘filename’)f is an image array‘filename’ must include the file format (tif, jpg, bmp,..) • >> k = imfinfo(‘test1.jpg’)Filename: 'test1.jpg' FileModDate: '22-Oct-2005 13:07:36' FileSize: 3464 Format: 'jpg' FormatVersion: '' Width: 256 Height: 256 BitDepth: 24 ColorType: 'truecolor' FormatSignature: '' Comment: {} The answer is a structure variable with different fields: k.Width
Data Classes Converting between types : B = data_class_name(A)for example: B = double(A)
Conversions • When converting between data classes and types it is important to keep the value range for each data class >> img = double(img)/255; >> img = im2double(img);
Variable Decleration and Memory issues • Matlab variables do not need to be declared in advance. • ‘ans’ is a defined variable containing the last result • Memory is allocated and freed automatically. >> A = [1 2 3; 2 3 4; 3 4 5]; >> A = 0.0005
Vector indexing • row vector (1xN) >> v = [1 3 5 7]; (elements separated by space or comma (,)) >> v(2) = 3; • column vector (MX1) >> w = [1;3;5;7]; (elements separated semi-comma (;)) >> w = v’ (transpose operation)w = 1 3 5 7 • To Access blocks of elements we use colon notation>> v(2:4) ans = 3 5 7 >> v(1:end) end is the last element in the vector >> v(:) produce a column vector >> v(1:2:end) enables steps (jumps) >> v(end:-2:1) steps can be negative as well • Vector can be used as an index into another vector >> v([1 3 4]) ans = 1 5 7
Matrix Indexing • Image – 2D array, matrix • Matrix can be represented as a sequence of row vectors >>A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 • To access an element, 2 indexes are used – row index and column index >> A(2,3) 6>> A(:,3) 3 6 9>> A(2,:) 4 5 6>> a(1:2,1:3) 1 2 34 5 6 >> B = A; >> B(:,3) = 0 B = 1 2 0 4 5 0 7 8 0 • Using vectors to index into a matrix provide a powerful tool for element selectionA([1 3], [2 3]) 2 3 8 9
Matrix Indexing Cont. • Image – 2D array, matrix • A matrix is also represented as a long vector >> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 • To access sequential elements in a matrix a single index can also be used: >> A(1:9) A = 1 4 7 2 5 8 3 6 9 • Sometimes changing the shape of the matrix is of use: >> reshapse(A(1:2,1:3), 3, 2) A = 1 5 4 3 2 6 • The size of the output matrix is the size of the index matrix!
Matrix Addressing • A very useful approach is to use logical matrix as an index to the matrix >> D = logical([1 0 0; 0 0 1; 0 0 0]) D = 1 0 0 0 0 1 0 0 0 >> A(D) ans = 1 6 • The use of column operation on a matrix produce a single column vector from the matrix (on a column by column basis). It is very useful for image operations like sum or max>> s = sum(f(:))(equivalent to: sum(sum(f)))
Operators • Arithmetical operators have their algebraic meaning: >> A = [1 2 3; 4 5 6; 7 8 9]; >> A + A ans = 2 4 6 8 10 12 14 16 18 >> A * [1 1 1] ??? Error using ==> times Matrix dimensions must agree >> A * [1 1 1]’ ans = 6 15 24
Operators cont. • Vector multiplication depends on the order of the two vectors >> [1 2 3] * [2 3 4] ??? Error using ==> times Matrix dimensions must agree >> [1 2 3] * [2 3 4]’ ans = 20 >>[1 2 3]’ * [2 3 4] ans = 2 3 4 4 6 8 6 9 12
Operators cont. • Element by element operators - .* .^ ./ >> [1 2 3] .* [2 3 4] ans = 2 6 12 >> [1 2 3] .^ 2 ans = 1 4 9 >> [1 2 3] ./ (2:2:6) ans = 0.5000 0.5000 0.5000
Array dimensions • Matlab arrays can be of any dimensions • It is useful to operate on specific dimension of the array, for example: >> height = size(i,1); • Usually we deal with 2D arrays but there are cases we need to address higher dimensions (such as color images) >> i(200:300, 200:400, 3) • To get the number of dimensions of an array >> d = ndims(f)
Standard Arrays • Generating simple array enables trying out simple ideas and test the syntax of a function during development >> zeros(m,n) >> ones(m,n) >> true(m,n) >> false(m,n) >> magic(m) >> rand(n) >> randn(n) >> pascal(n)
Additional Operators • Arithmetic operators (numeric computations) • matrix arithmetic (linear algebra A*B) • array arithmetic (element by element A.*B) +, -, ./, .^,:.. • Relational operators (compare) • Compare corresponding elements of arrays of equal dimensions (<, >,<=, >=, ==, ~=)or an array to scalar • Logical operators can operate both on logical and numeric data (and: &, or: |, not: ~)true: logical 1 or non-zero numeric quantity false: logical or numerical 0 • logical functions : any, all
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i)
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i)
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i) >> s = i(end:-1:1, :); >> imshow(s);
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i) >> s = i(end:-1:1,:); >> imshow(s);
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i) >> s = i(end:-1:1,:); >> imshow(s); >> a = i(200:300,200:400); >> imshow(a);
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i) >> s = i(end:-1:1,:); >> imshow(s); >> a = i(200:300,200:400); >> imshow(a);
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i) >> s = i(end:-1:1,:); >> imshow(s); >> a = i(200:300,200:400); >> imshow(a); >> t = i(1:2:end, 1:2:end); >> imshow(t);
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i) >> s = i(end:-1:1,:); >> imshow(s); >> a = i(200:300,200:400); >> imshow(a); >> t = i(1:2:end, 1:2:end); >> imshow(t);
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i) >> s = i(end:-1:1,:); >> imshow(s); >> a = i(200:300,200:400); >> imshow(a); >> t = i(1:2:end, 1:2:end); >> imshow(t); >> i(200:300, 200:400) = 0; >> imshow(i);
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i) >> s = i(end:-1:1,:); >> imshow(s); >> a = i(200:300,200:400); >> imshow(a); >> t = i(1:2:end, 1:2:end); >> imshow(t); >> i(200:300, 200:400) = 0; >> imshow(i);
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i) >> s = i(end:-1:1,:); >> imshow(s); >> a = i(200:300,200:400); >> imshow(a); >> t = i(1:2:end, 1:2:end); >> imshow(t); >> i(200:300, 200:400) = 0; >> imshow(i); >> imshow(i/2);
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i) >> s = i(end:-1:1,:); >> imshow(s); >> a = i(200:300,200:400); >> imshow(a); >> t = i(1:2:end, 1:2:end); >> imshow(t); >> i(200:300, 200:400) = 0; >> imshow(i); >> imshow(i/2);
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i) >> s = i(end:-1:1,:); >> imshow(s); >> a = i(200:300,200:400); >> imshow(a); >> t = i(1:2:end, 1:2:end); >> imshow(t); >> i(200:300, 200:400) = 0; >> imshow(i); >> imshow(i/2); >> imshow((i>0.8).*i);
Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i) >> s = i(end:-1:1,:); >> imshow(s); >> a = i(200:300,200:400); >> imshow(a); >> t = i(1:2:end, 1:2:end); >> imshow(t); >> i(200:300, 200:400) = 0; >> imshow(i); >> imshow(i/2); >> imshow((i>0.8).*i);
M-Files M-Files can be one of two: • Scripts – A series of commands that are performed on the global scope. No input and output variables. • Functions – A set of commands performed over a given input, with a required output. Functions have a scope of their own. (accessing the global scope can be done by defining the variables to be ‘globals’). In both types – the m-file must be in the current directory, or in a previously added path (added with the function addpath)
M-Function Programming Components of m files: • Function definition linefunction [out1 out2] = name(in1, in2, in3) • H1 line - a single comment line that follows the function definition line. % SQUARESUM compute the sum of the square of the matrix elements This line appears when user writes>> help function_name >> lookfor keyword - display all functions where the keyword appeared in H1 line
M-Function Programming • Components of m files (cont.): • Help Text - text block following the H1 line without any blank line in between the two • Function body – the Matlab code • Comments – lines starting with % Note: – add short and clear comments to your code!
Flow control • if, else, elseif, end • switch, case, otherwise, end • return • try...catch…end • for i=start:increment:end, end • while, end • break (used with for or while) • continue (used with for or while) Try not to use
>> x = 0:k-1 >> ff = 5*sin(x/(2*pi)); Code Optimization – Vectorizing Loops • 1D indexing Convert for / while loops to equivalent vector or matrix operations >> for x = 1:k ff(x) = 5*sin((x-1)/(2*pi)); end
Code optimization – vectorizing loops • 2D indexingmeshgrid – convert rows vectors to arrays C and R that can be used for evaluating function with two variables >> for r = 1:10 >> for c = 1:10 >> b(r,c) = r.^2+ c.^2 >> end >> end >> [C, R] = meshgrid(1:c, 1:r) >> h = R.^2 + C.^2; Vectorzing code accelerates the computation significantly For Example: using meshgrid runs on the order of30 times faster the same computation based on loops on Image of 512x512 pixels
Code Optimization – Pre-allocating large arrays • Simple way to improve code execution is to pre-allocate the size of the arrays in the program. >> f = zeros(1024);
Cell arrays and Structures • Cell array is multidimensional array whose elements are copies of other arrays>> c = {‘gauss’,[1 0;0 1], 3}>> c{1} ans = gauss • Structures are similar to cell arrays (allow grouping of a collection of dissimilar data) but they addressed by fields rather than by numbers>> params.nimgs = 100; >> params.jump = 2; >> params.baseStr = ‘testImg’
Arguments • Matlab arguments are always passed by value • Checking whether an argument exist>> exist(a,’var’) • Checking number of arguments to the functions >> nargin, nargout, nargchk • Getting variable number of arguments >>varargin, varargout
Gui >> guide (Graphic User Interface Development Environment) Start the GUI Layout Editor. Guide create • fig file: complete description of the gui elements and their arrangements • gui m-file: the code that controls the gui operations, initializations functions, callback functions