1 / 46

Digital Image Processing Matlab Basics

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.

zoltan
Download Presentation

Digital Image Processing Matlab Basics

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Digital Image ProcessingMatlab Basics based on Elboher ‘s slides , HUJI Istructor: AbedAsi

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

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

  4. 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)‏

  5. 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,….

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

  7. 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)‏

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

  9. Data Classes Converting between types : B = data_class_name(A)for example: B = double(A)

  10. 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);

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

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

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

  14. 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!

  15. 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)))‏

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

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

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

  19. 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)‏

  20. 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)‏

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

  22. Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i)‏

  23. Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i)‏

  24. Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i)‏ >> s = i(end:-1:1, :); >> imshow(s);

  25. Examples - Matrix indexing >> i = imread('sowrds0040.bmp'); >> i = rgb2gray(double(i)/255); >> imshow(i)‏ >> s = i(end:-1:1,:); >> imshow(s);

  26. 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);

  27. 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);

  28. 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);

  29. 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);

  30. 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);

  31. 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);

  32. 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);

  33. 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);

  34. 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);

  35. 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);

  36. 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)

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

  38. 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!

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

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

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

  42. 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);

  43. 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’

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

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

  46. Any Questions?

More Related