Introduction to MATLAB CS534 Fall 2016 What you'll be learning today

MATLAB basics (debugging, IDE) Operators Matrix indexing Image I/O Image display, plotting A lot of demos ... Matrices What is a matrix? 5

3 4 3x1 vector 3 6 8 1x3 vector 1 2 3 4 5 6 MxNxP matrix

2x3 matrix Terms: row, column, element, dimension How are the dimensions arranged First dimension Second dimension 1 2 3 4 5 6

MxNxP matrix Defining a matrix with literals >> A = [1 2 3; 4 5 6] semicolon separates rows A = 1 4 2 5

3 6 Defining a equally spaced vector >> A = 1 : 5 A = start value end value (inclusive) 1 2 3 >> A = 1 : 2 : 10

A = 1 3 increment5 4 5 7 9

Colon creates regularly spaced vectors Bonus: what if I have something impossible like A = -1 : 2 :-5 Demo Define matrix with built-in functions zeros(M,N) ones(M,N) true(M,N) false(M,N) rand(M,N)

Create matrices with all 0/1/true/falses M, N are number of rows and cols respectively can have more dims linspace(start, end, number) Create linearly spaced vector ranging from start to end (inclusive) Bonus: How you get a matrix of all 5? the donumber specifies

length of the vector Demo Matrix Operations size() >> A = [1 2 3; 4 5 6]; >> size(A, 1) ans = asks for first dimension 2

>> size(A, 2) ans = 3 asks for second dimension 1 2 3 4 5 6 A size() cont'd >> A = [1 2 3; 4 5 6]; >> [height, width] = size(A)

height = 2 width = 3 1 2 3 4 5 6 A Demo Concatenation

M = [A, B; C, D] ; mark the next row B A 1 2 3 4 5 6 C

1 2 3 1 2 4 5 D 1 2 Dimension must match Concatenation in higher dims

cat(A, B, n) Operand matrices Dimension to work on The length of dimensions other than n of A and B must match Demo Linear Algebraic Operations +

Addition (dimensions match exactly) - Subtraction (dimensions match exactly) * Matrix Multiplication (MxN-matrix * NxP-matrix) ^

Matrix Power (must be square matrix) ' Transpose \ Left Matrix Division (Solves A*x=B) /

Right Matrix Division (Solves x*A=B) How Operations Work A= 1 2 3 4 B= 3 1

5 6 4 3 A+B = 8 10 A*B = 13 13 29 27 A\B =

-1 4 2 1.5 A-B = solves A*x = B -2 1 -2 -2 A^2 =

7 10 15 22 B/A = -.3077 .3846 .1538 .6923 solves x*A = B Transpose

1 3 C= 5 7 9 11 13 15 1 5 9 13

C = 3 7 11 15 Elementwise Operations dimensions need to match exactly usually use . to distinguish from their linear-algebraic counterparts + Addition Subtraction .* Element by Element Multiplication ./ Element by Element Division

.^ Element by Element Power A.^2 vs. A^2 vs. A.^B Element-wise operations A= 1 2 3 4 B=

3 1 5 6 Note the 2 operand matrix for element-wise operations must match A ./ B = .333 .6 2 .666

3 2 A .* B = 15 24 A .^ B = 1 243 2 4096

A .^ 2 = 1 9 4 16 Demo Logical operators

== is equal to < > <= >= less/greater than ~ not ~= not equal to & elementwise logical AND (for matrices) | elementwise OR (for matrices) ~

negation To be distinguished from && short-circuit AND (for logical expressions) || short-circuit OR (for logical expressions) Two useful commands all() any()

both work along one dimension of the matrix by default compare along first dimension use an optional second parameter to specify the dimension to work on help to shrink a logical matrix to a logical scalar then you can use || or && Demo Matrix Indexing Accessing a single element

A(2, 3) Element on 2nd row, 3rd column Note: indexing starts from 1, not zero! 1 2 3 4 5 6 Block Indexing 1 2 3 4 5 6

A([1,2], [1,3]) Can use vectors to index block of elements A([2,2],[1,2,3]) Duplicate second row A([1,2], [3,2,1]) A([1,2], 3:-1:1) Change col orders Indexing entire row/col : represent the entire of that dimension A(2, :) Returns 2nd row

A(:, [1,3]) Returns 1st, 3rd column in a matrix 1 2 3 4 5 6 end operator end represent the last of that dimension >> A = [1 2 3; 4 5 6]; >> A(:, end:-1:1) ans = 3

2 1 6 5 4 Reverse the col orders 1 2 3 4 5 6 end operator

1 2 3 4 5 6 >> A = [1 2 3; 4 5 6]; >> A(:, [1 end 1]) ans = 1 3 1 4 6 4

Returns concatenation of 1st, last and 1st column Indexing rules apply to 3D matrices too A(2, 4, 3) Element on 2nd row, 4th column of the 3rd channel 1 4 2 8 3 7 9 1 4 5 6 3

Logical Indexing Dimension of A and B must match A 1 0 1 1 2 3 0 0 1 4 5 6 >>A(B) ans = 1 3 6

Select the element in A where B is true and put them in a column vector B Linear indexing A( 1) A( 3) A( 5)

Indexes an element in a matrix with a single number/vector, in column-major order. A( 2) A( 4) A( 6) A =

11 45 23 21 89 59 Bonus: What will A(:) be? Demo Element Assignment You can also index a matrix to assign values to its elements With scalar RHS, its easy

A(1:2:end, 2:2:end) = 0 With matrix RHS, a little trickier A(1:2:end, 2:2:end) = A(1:2:end, 2:2:end)*2 The dimension of the RHS must match the indexed block With empty matrix RHS, its a deletion A(2,:) = [] You can only index whole row/col and delete them

Demo Statistic functions can operate on the whole matrix sum mean max min median std var By default they return col-wise statistics

use a second param to indicate the dimension to operate on Demo Vectorization Vectorized code tends to be faster than non-vectorized code A = rand(1000,1000); B = rand(1000,1000); for i = 1:size(A,1),

for j = 1:size(A,2), C(i,j) = A(i,j) + B(i,j); end end Using loop: Elapsed time is 1.125289 seconds. Vectorized code tends to be faster than non-vectorized code C = A + B; Elapsed time is 0.002346 seconds. Question: What's the sum of all

elements greater than 2 in A? 1 2 3 4 5 6 summation = 0; [height, width] = size(A); for j = 1 : height for i = 1 : width if A(j, i) > 2 summation=summation+A(j, i); end end end

Question: What's the sum of all elements greater than 2 in A? 1 2 3 summation = sum( A (A > 2) ); 0 0 1 1 1 1 3 4 5 6 18 T 4 5 6

A closer look at sum(A(A>2)) 1 2 3 4 5 6 A > 2 returns logical matrix [ 0 0 1; 1 1 1] A([0 0 1; 1 1 1])returns column vector [3 4

5 6] sum([3 4 5 6]) More Examples Logical indexing on the right-hand side count = sum(2 < A | A == 5); ave = mean(A(mod(A, 2) == 0)); Logical indexing with assignment A(isnan(A)) = 0; Demo

Images What is an image? 236 252 255 24 72 78

An RGB image is a 3D MxNx3 matrix The "layers" in a color image are often called channels red channel green channel blue channel

Generic image processing script filename = 'badgers.jpg'; im_orig = imread(filename); % your image processing routines figure; imshow(im_orig); figure; imshow(im_processed); imwrite(im_processed, 'hw.jpg'); Important image related functions imread imwrite

Read image from disk Write image to disk figure imshow Create new figure Display image im2double Convert image datatype to double im2uint8 Convert image datatype to uint8 rgb2gray

Convert a 3-channel rgb image to a single channeled gray image Be aware of your return types! imfilter() imread() Be aware of your argument types! imhist()

interp2() Common bugs This wouldnt work, but why? im_original = imread('lena_gray.jpg'); [Xq, Yq] = meshgrid(0.5:99.5, 0.5:99.5); im_interp = interp2(im_original, Xq, Yq); Pay close attention to: input/output types of the function range of the corresponding image types

subplot() squeezes more into a figure subplot(m, n, p); p is based on an m x n grid p determines location of this subplot; it's an index in row-major order 1 2

3 4 5 6 Demo Reference

Matlab presentation from previous semester Matlab presentation this time: part1 part2 demo files MATLAB cheat sheet Note: you may need to login to your wisc.edu google drive to view the files from this time fin.