Image and Video Processing Using
MATLAB
April 12, 2011 Rochester, NY
Agenda
9:00 a.m. Welcome and MathWorks Overview
9:15 a.m. Image Processing with MATLAB 10:30 a.m. Break
10:45 a.m. Video Processing with MATLAB
11:30 a.m. System Design and Hardware Targeting 12:00 p.m. Summary and Wrap-up
From MathWorks
Sr. Account Manager – Ed Donovan – [email protected] – 508-647-4251 Application Engineer – Stephanie KwanAgenda
9:00 a.m. Welcome and MathWorks Overview
9:15 a.m. Image Processing with MATLAB
10:30 a.m. Break
10:45 a.m. Video Processing with MATLAB
11:30 a.m. System Design and Hardware Targeting 12:00 p.m. Summary and Wrap-up
Common Image Processing Tasks
Perform segmentation
Deblur and remove noise
Measure image features
Perform edge detection
Apply morphological operations
Enhance image contrast
Perform image registration
Common Image Processing Challenges
Reading and writing to various file formats
Visualizing images and intermediate results
Testing algorithms with what-if scenarios
Identifying causes of algorithm failure
Processing large images with limited memory
Technical Computing Tasks
Reporting and Documentation
Outputs for Design
Deployment
Share Explore and Discover
Data Analysis and Modeling Algorithm Development Application Development Files Software Hardware Access
Explore and Discover
MATLAB – A Platform for Technical Computing
Reporting and Documentation
Outputs for Design
Deployment Share Data Analysis and Modeling Algorithm Development Application Development Files Software Hardware Access
Core MathWorks Products
The leading environment for technical computing
The industry-standard, high-level programming language
for algorithm development
Numeric computation
Data analysis and visualization
Toolboxes for signal and image processing, statistics, optimization, symbolic math, and other areas
Image Processing Toolbox
Perform image processing, analysis, visualization, and algorithm development Image analysis Image enhancement Spatial transformation Image registration Morphological operations ROI-based processing
Demo: Camera Pipeline
From Sensor Data to Image
1. Noise Reduction 2. Demosaic
3. Tone Mapping 4. White Balance
5. Gamma Correction
Image Acquisition Toolbox
Acquire images and video directly into
MATLAB and Simulink
Configure device properties
Perform background acquisition
Synchronize multimodal devices
Image Acquisition Toolbox Hardware Support
Industry standard support:
– Frame grabbers
Analog
Camera Link
– DCAM compatible FireWire (IIDC 1394)
– GigE Vision
– Common OS webcam interfaces
Operating system support:
– Windows
– Linux
Image Acquisition Toolbox Hardware Support
Manufacturers include:
– Allied Vision Technologies
– Basler – Baumer – DALSA – FLIR – Hamamatsu – Lumenera – Matrox Imaging – National Instruments – PixeLINK – Point Grey – Qimaging – Sony
Where is Large Imagery Used?
Satellite imagery
Aerial surveys
Super-resolution
Image sequences and stacks
Volumetric data
Multispectral and hyperspectral
Common Large Image Challenges
“Out of memory” errors Slow processing
Some Steps to Handle Large Images
Try memory command to see available space
Preallocate space for variables
Minimize numerical data types
Load small portions of an image
Visualize only what is necessary
Incorporate more hardware resources
Can lead to
complex code
blockproc and rsetwrite
Block processing
– Automatically divides an image into blocks for processing
– Reduces memory usage
– Processes arbitrarily large images
Reduced resolution data set
– Avoids memory demands in visualizing large images
Improving Performance
MATLAB
– Preallocate space for variables
– Identify bottlenecks with Profiler
– Vectorize code
Image Processing Toolbox
– Many toolbox functions are faster as of R2010a
Parallel Computing Toolbox
Worker Worker Worker Worker Worker Worker Worker Worker
Parallel Computing Toolbox
Going Beyond Serial MATLAB Applications
TOOLBOXES
Parallel Computing enables you to …
Larger Compute Pool Larger Memory Pool
11 26 41 12 27 42 13 28 43 14 29 44 15 30 45 16 31 46 17 32 47 17 33 48 19 34 49 20 35 50 21 36 51 22 37 52
Distributing Tasks (Task Parallel)
Proce
Parallel Computing Toolbox Support for GPUs
Automatically use GPU’s with supported built-in
MATLAB functions
– conv2, filter2
Run supported MATLAB code on the GPU
– arrayfun
Create kernals from existing CUDA code and PTX files
Why would you want to use a GPU?
Speed up execution of computationally intensive simulations
For example:
Why use MATLAB for Image Processing?
Read and write many image file formats
Visualize and explore images interactively
Connect directly to cameras and frame grabbers
Use a large library of built-in functions
Quickly build custom image processing algorithms
Block-process large images to avoid memory issues
Agenda
9:00 a.m. Welcome and MathWorks Overview 9:15 a.m. Image Processing with MATLAB
10:30 a.m. Break
10:45 a.m. Video Processing with MATLAB
11:30 a.m. System Design and Hardware Targeting 12:00 p.m. Summary and Wrap-up
Agenda
9:00 a.m. Welcome and MathWorks Overview 9:15 a.m. Image Processing with MATLAB 10:30 a.m. Break
10:45 a.m. Video Processing with MATLAB
11:30 a.m. System Design and Hardware Targeting 12:00 p.m. Summary and Wrap-up
Common Video Processing Tasks
Convert between color spaces
Enhance video contrast
Perform segmentation
De-interlace video frames
Calculate running statistics
Common Video Processing Challenges
Reading and writing to various file formats
Managing buffers and intermediate storage
Testing video algorithms with test cases
Accessing standard video algorithms
Visualizing results and intermediate steps
Demo: Working with Video in MATLAB
Read in and write out data using VideoReader and VideoWriter
What happens if the video file is very long or the frame size is large?
System Objects
MATLAB objects that represent algorithms and I/O
capabilities that process data frame by frame
Instantiate and configure
– reader = vision.MultimediaFileReader(‘viptraffic.avi’)
Execute within a loop
– step(reader)
Standard API
– reset – isDone – close
Video Processing in MATLAB
Need to maintain buffer Explicit indexing Explicit state management
myVid = VideoReader(‘myvideofile.avi’); numFrames = myVid.NumberOfFrames;
numIter = 10;
opticalFlowIn = zeros([size(currentFrame) 5]);
opticalFlowOutput = zeros([size(currentFrame) numFrames]); i = 1; while i <= numFrames opticalFlowIn(:,:,2:end) = opticalFlowIn(:,:,1:end-1); opticalFlowIn(:,:,1) = read(myVid,i); flow = opticalFlow(opticalFlowIn(:,:,1),opticalFlowIn(:,:,5),… ‘horn-schunck’,numIter,‘magitude-squared’); opticalFlowOutput(:,:,i) = flow; i = i+1; end implay(opticalFlowOutput,30)
Video Processing with System Objects
Initialize objects
“In-the-loop” code is much simpler Implicit states, buffering, and indexing Video player runs in-the-loop
reader = vision.VideoFileReader reader.Filename = ‘myvideofile.avi’; viewer = vision.DeployableVideoPlayer(‘framerate’,30); optical = vision.OpticalFlow optical.Method = ‘horn-schunck’; optical.OutputValue = ‘Magitude-squared’; optical.ReferenceFrameDelay = 3; optical.MaximumIterationCount = 10; while ~isDone(reader) currentFrame = step(reader); OF = step(optical, currentFrame); step(viewer, OF); end
Demo: Car Detection Using Optical Flow
Use optical flow to detect and count moving
vehicles on a road
Motion Estimation
Motion estimation applications: Object tracking
Segmentation
Interpolation
Compression
Many methods include: Optical flow
Block matching
Demo: Interpolation with Block Matching
Use block matching to perform motion estimation
and interpolate video
Computer Vision System Toolbox
Design and simulate computer vision and video processing systems
Read and write multimedia files
Display videos
Overlay text and graphics
Perform pre- and post-processing
Perform motion-based processing
Detect and track objects
Recognize features
What is Computer Vision?
Automating the process of extracting information from images and video to understand a real world scene
Computer Vision Interpretation Detect Identify Classify Recognize Track Pedestrian Bicyclist Truck Car Traffic violation Accident Image Processing Remove noise Adjust contrast Measure …
Common Computer Vision Applications
Detect and track objects
Automatic target recognition
Count objects in a scene
Classify or cluster objects
Automatically register images
Create mosaics and panoramas
Statistics Toolbox
Perform statistical analysis, modeling, and algorithm development
Principle components analysis
K-means clustering
Gaussian mixture models
Naïve Bayes classification
K-nearest neighbor search
Why use MATLAB for video processing and
computer vision?
Read and write to many video file formats
Manage buffers, indexing, and states with System objects
Integrate live data from cameras and frame grabbers
Access algorithms for video processing and computer vision
Overlay text and graphics annotations on video data
Agenda
9:00 a.m. Welcome and MathWorks Overview 9:15 a.m. Image Processing with MATLAB 10:30 a.m. Break
10:45 a.m. Video Processing with MATLAB
11:30 a.m. System Design and Implementation
Technical Computing Tasks
Reporting and Documentation
Outputs for Design
Deployment
Share Explore and Discover
Data Analysis and Modeling Algorithm Development Application Development Files Software Hardware Access
MATLAB Compiler COM .NET .exe .dll .lib MATLAB Builder EX MATLAB Builder NE MATLAB Builder JA MATLAB Compiler
From MATLAB to Implementation
Simulink Coder MATLAB Coder Simulink HDL Coder Simulink & Stateflow
MATLAB Compiler
Automatic conversion of your MATLAB programs into standalone applications and shared libraries
Support for the full MATLAB language and most toolboxes
MATLAB Coder
Generate C and C++ Code from MATLAB Code
Maintain one design in MATLAB
Design faster and get to C/C++ quickly
Verify behavior of generated code
Accelerate computationally intensive portions of MATLAB code
Test systematically and frequently
Spend more time improving algorithms in MATLAB
Compatible with Computer Vision System Toolbox
Deploy MATLAB algorithms on Windows/Linux desktop PC
Integrate MATLAB algorithms with existing C code
Hand-off code to software engineers for embedded processor implementation
Accelerate user-written MATLAB algorithms
Broad support for Features and Functions
Broad set of language features and functions/system objects supported for code generation.
Matrices and
Arrays Data Types
Programming Constructs Functions • Matrix operations • N-dimensional arrays • Subscripting • Frames • Persistent variables • Global variables • Complex numbers • Integer math • Double/single-precision • Fixed-point arithmetic • Characters • Structures • Numeric classes • Variable-sized data • System objects • Arithmetic, relational, and logical operators • Program control
(if, for, while, switch )
• MATLAB functions and
sub-functions
• Variable length argument lists • Function handles
Supported algorithms
• > 400 MATLAB operators and
functions
• > 200 System objects for • Signal processing • Communications • Computer vision
Demo: Camera Pipeline Revisited
Targeting DSPs and FPGAs
MATLAB and Simulink
• Algorithm development • Debugging and profiling • System design
Generate code Verify design
Fixed-Point Modeling
Link to Embedded Software
Demo: Camera Pipeline System Design
From Sensor Data to Image
Why use MATLAB and Simulink for embedded
hardware design?
Automatically convert MATLAB to C code
Reduce the number of versions of code
Simplify the design process
Reuse MATLAB and legacy code in models
Convert floating-point algorithms to fixed point
Optimize algorithms for DSPs and FPGAs
Agenda
9:00 a.m. Welcome and MathWorks Overview 9:15 a.m. Image Processing with MATLAB 10:30 a.m. Break
10:45 a.m. Video Processing with MATLAB
11:30 a.m. System Design and Hardware Targeting
What You’ve Seen Today
MATLAB for image and video processing
Image Processing Toolbox
– Visualize, analyze, and process images
Image Acquisition Toolbox
– Test image processing algorithms with live data
Computer Vision System Toolbox
– Visualize, analyze, and process video
– Motion estimation, tracking, and stereo vision
Parallel Computing Toolbox
Doheny Eye Institute Develops
Next-Generation of Retinal Prosthesis with MathWorks Tools
Challenge
Develop next-generation, higher-resolution retinal prostheses
Solution
Use MathWorks tools to develop, simulate, and automatically generate code for real-time image processing algorithms
Results
Development time reduced from months to weeks DSP deployment streamlined
Patient testing improved
“With Video and Image Processing Blockset and Target Support
Package, we rapidly prototype our image and video processing
algorithms on the DM642 board. This can save me days or weeks of time.”
Neha Parikh Doheny Eye Institute Illustration of a retinal prosthesis prototype.
Given Imaging Develops Camera-in-a-Capsule Using MATLAB to Improve the Diagnosis of Gastrointestinal Disorders
Challenge
Create an alternative to endoscopy and other invasive gastrointestinal imaging procedures
Solution
Use MATLAB and companion toolboxes to develop and implement a swallowable video capsule
Results
Fast, efficient development
Easy access to precise diagnostic information Improved patient care
“With MATLAB, we simulated the intended system and fine-tuned it at the early stages of implementation, enabling us to develop critical engineering programs that met requirements on the first iteration.”
Additional Articles and User Stories
From a Leading Textbook Author ...
"I have used a number of commercial image processing packages over the years, and prefer the MathWorks
Image Processing Toolbox for several reasons: the wide variety of functions it provides, the user’s ability to write
additional functions with minimal effort, the quality of the software, and the high level of support."
Migration Planning Component Deployment Full Application Deployment Cont inuo us Im prov ement
Consulting Services
Accelerating return on investment
A global team of experts supporting every stage of tool and process integration
Advisory Services
Process Assessment
Jumpstart
Process and Technology Standardization
Process and Technology Automation
Training Services
Exploit the full potential of MathWorks products
Flexible delivery options:
Public training available worldwide
Onsite training with standard or customized courses
Web-based training with live, interactive instructor-led courses
Self-paced interactive online training
More than 30 course offerings:
Introductory and intermediate training on MATLAB, Simulink, Stateflow, code generation, and Polyspace products
Specialized courses in control design, signal processing, parallel computing, code generation, communications, financial analysis,
MATLAB Central
Community for MATLAB and Simulink users
Over 1 million visits per month
File Exchange
– Upload/download access to free files
including MATLAB code, Simulink models, and documents
– Ability to rate files, comment, and ask questions
– More than 12,500 contributed files, 300 submissions per month, 50,000 downloads per month
Newsgroup
– Web forum for technical discussions about MathWorks products
– More than 300 posts per day
Blogs
Connections Program
More than 400 add-on products and services that complement and extend MathWorks products:
Specialized third-party toolboxes for MATLAB
Interfaces to third-party software and hardware products
Specialized training courses and consulting services
System integrators and suppliers that incorporate MathWorks products
Book Program
More than 1200 books for educational and professional use, in 26 languages Mathematics Aerospace engineering Environmental sciences Chemistry Finance Electronics Controls Signal processing Image processing Biosciences Communications Mechanical engineering
Technical Support
Resources
Over 100 support engineers
– All with MS degrees (EE, ME, CS)
– Local support in North America, Europe, and Asia
Comprehensive, product-specific Web support resources
High customer satisfaction
95% of calls answered within three minutes
70% of issues resolved within 24 hours 80% of customers surveyed rate satisfaction at 80–100%
For More Information
Experiment with product by downloading a trial
Peruse videos, webinars, user stories, and demos online
Contact us
– Talk to a sales representative to get answers to your questions
– Discuss your projects
with MathWorks applications engineers