Image Scaling - PowerPoint PPT Presentation


PPT – Image Scaling PowerPoint presentation | free to download - id: 7b1e97-NWYwY


The Adobe Flash plugin is needed to view this content

Get the plugin now

View by Category
About This Presentation

Image Scaling


Image Scaling Jackie Van Ryzin Outline Project Description Definition & Requirements Solutions (what I did) Exceptions (what I ... – PowerPoint PPT presentation

Number of Views:8
Avg rating:3.0/5.0
Slides: 24
Provided by: snc68
Learn more at:


Write a Comment
User Comments (0)
Transcript and Presenter's Notes

Title: Image Scaling

Image Scaling
  • Jackie Van Ryzin
  • http//

  • Project Description
  • Definition Requirements
  • Solutions (what I did)
  • Exceptions (what I didnt get to)
  • Methodology (how I did it)
  • Demonstration Zooming fun!
  • Learning Development Process
  • Strategies (what works for me)
  • Knowledge (useful CS concepts)
  • Extensions (where to from here)
  • Advice (for those yet to come)
  • Q A

Project Description
  • Develop algorithms for real-time scaling that
    maintains quality
  • Study and implement smooth Bresenham nearest
    neighbor interpolation method
  • Look at ways to improve these methods
  • Develop new algorithms or alter existing
  • Implement a user interface that would allow
    someone to zoom in and out as they watch a
    streaming video

Overall Plan
  • Read, research, understand existing algorithms
  • Implement those algorithms using general arrays
  • Create program to read and alter images
  • Combine image program and algorithms
  • Develop interface to test and compare algorithms
    and variations of existing one
  • Alter programs interface to scale real-time
    streaming video in addition to still images

In the beginning
  • Thiadmer Riemersma was unhappy with
  • Quality of fast image scaling algorithms
  • Slow processing for high quality scaling routines
  • He developed smooth Bresenham algorithm (Dr.
    Dobbs Journal, May 2002)
  • Used concept of Bresenhams line algorithm to
    scale a horizontal line of pixels

Background in Bresenham
  • Determine which points of an n-dimensional grid
    to plot to best approximate a straight line
    between two given points (x0,y0) and (x1,y1)
  • For each x between x0 and x1, choose row y that
    most nearly matches fcn value to plot pixel (x,y)

To determine y
  • General line formula is
  • Know column x so solve for row y as
  • Can pre-calculate constant
  • Since slope between 0 1 by assumption, after
    rounding we either use same y or add 1 to it

Tracking Error
  • User error value to track difference between
    current y value and exact y value for current x
  • As increment x, increase error by slope
  • When error gt 0.5, line is closer to next y value
    rather than current/previous
  • y and error--

Bresenham for Images
  • Pixels are picked up from discrete positions in
    source image and placed at discrete locations in
    the destination image
  • Nearest neighbor sampling
  • Magnifying pixels duplicated
  • Minifying pixels dropped
  • Both leave artifacts in destination image
  • More accurate sampling requires reading pixels
    from fractional positions in source image
  • Techniques exist that incorporate weighted
    averages computation-intensive

A Lightweight Alternative
  • Compromise between linear interpolation coarse
    Bresenham scaling
  • Destination pixel set to
  • Value of closest source pixel
  • Unweighted average of neighbors
  • Based on proximity to source pixel

Original 150 75
Smooth Bresenham (contd)
  • Merit
  • Standard (unweighted) averages simpler
  • Increased performance speed important for
    real-time applications
  • Dropped pixels excessive jaggies of fast
    nearest-neighbor techniques (such as coarse
    Bresenham) are absent or kept to a minimum
  • Adjust this algorithm for 2D images
  • Nested for loops
  • Call horizontal line scaling algorithm
  • Average scaled lines with each other

How we use this
b (0,0)
g (0,0)
r (0,0)
b (1,0)
g (1,0)
r (1,0)
b (2,0)
g (2,0)
r (2,0)

b (0,1)
g (0,1)
r (0,1)
b (1,1)
g (1,1)
r (1,1)

b (width-1,height-1)
g (width-1,height-1)
r (width-1,height-1)
  • OpenCV Platform
  • Images in IplImage format which has char
    pointing to data
  • Data stored linearly as bytes as shown
  • Use CVs split fcn to get 3 single-channel images
    from a 3-channel image
  • Run algorithm on each before remerging with CVs
    merge fcn
  • CAREFUL with averaging!

  • At first could capture keys (used 1 2) with
    cvWaitKey for user to scale up or down
  • Discovered cvTrackBar
  • Attaches nicely to window
  • Auto updates the variable (scale factor)
  • Very user-friendly visually appealing!

  • First scale image using Bresenham, then undo
    the scaling by using Bresenham on scaled image to
    get back to original size
  • Compare with original image (calculate average
    difference between pixels of original and
    un-scaled images)
  • Do same with cvResize functions compare results

I Wish I Could/Would Have...
  • Been better able to convert bytes to ints and
  • Would have condensed processing time by calling
    algorithm only once (on 3-channel image rather
    than separately on 3 1-channel images)
  • Been able to implement more alterations to the
    algorithm for comparison and analysis
  • Looked into MIP mapping as mentioned in DDJ
  • Quick scaling by factor of 2
  • Used actual calculations to determine speed
    rather than simply visual

  • Some mini-lectures/discussions with Dr. Pankratz
    Dr. McVey in beginning to understand basic
  • Test algorithms on arrays of ints first! (it was
    a while before I tried images)
  • Tried using VB at first because Professor Blahnik
    provided code for reading from a webcam
  • Converting algorithm into VB (pointers)
  • DLL to leave it in C code
  • Picture box didnt resize when image did

Methods (contd)
  • OpenCV
  • Started with sample program from developers
  • Strip it down to minimum with Johns help
  • Add features and functions in baby steps
  • Always had two versions
  • Still images using LoadImage
  • Webcam using Capture
  • Wrote functions in small test program to run on
    arrays of ints before adding to interfaces

Lets Scale!
  • Real-time scrolling from webcam
  • HALLELUJAH!\scroll_webcam\scroll_webcam.dsw
  • Compare with CV resizing using still image
  • HALLELUJAH!\diff_cv\diff_cv.dsw
  • How well does it undo the scaling?
  • HALLELUJAH!\rescale_cmp\rescale_cmp.dsw
  • Does a different threshold matter?
  • HALLELUJAH!\cmp_threshold\cmp_threshold.dsw

Where did this stuff come from?
  • Dr. Dobbs Journal
  • OpenCV manual
  • Dr. Pankratz Dr. McVey
  • Forums and online tutorials for OpenCV
  • Practice, experimenting, trial-and-error
  • John, Ted, Ryan P

Important CS Concepts
  • Data Structures
  • Arrays, pointers, structures, chars vs. unsigned
  • Dynamic memory allocation de-allocation
  • Machine Org. Assembly Language
  • Fast calculations for dividing masking
  • Programming Languages
  • Designing abstractly without a language
  • All classes
  • General learning, experimenting, researching

Where to From Here?
  • Be able to convert to array of ints back to
    reduce calls to scaling algorithm
  • Test compare speed using actual clock
  • Find a better mathematical/computational method
    for comparing how nice a picture looks scaled
  • Alter algorithm in some way to improve quality
    and/or speed
  • Investigate MIP mapping and using a combination
    of MIP Bresenham

For Those Who Follow
  • Meet with DCP and other profs OFTEN and right
  • Ask questions of anyone and everyone
  • Someone may have a unique solution you wouldnt
    think of
  • Could make you discover a solution with a simple
    comment about how chars in C arent fun
  • When you get stuck, admit it and ask for help
  • Write your journal! It keeps you accountable and
    encourages progress.
  • Paper can be useful! Draw images, diagrams, etc.
    It helps to see it before you program it
  • Baby stepsstarting small is easier, and every
    little milestone is rewarding. It also makes
    testing debugging easier.

  • Thanks to Dr. Pankratz and Dr. McVey for the
    guidance and ideas!
  • Thank you to classmates for ideas, answers, and
  • http//