+ All Categories
Home > Documents > Image Scaling

Image Scaling

Date post: 19-Jan-2016
Category:
Upload: bree
View: 32 times
Download: 0 times
Share this document with a friend
Description:
Image Scaling. Jackie Van Ryzin http://compsci.snc.edu/cs460/vanrjl. Outline. Project Description Definition & Requirements Solutions (what I did) Exceptions (what I didn’t get to) Methodology (how I did it) Demonstration – Zooming fun! Learning & Development Process - PowerPoint PPT Presentation
Popular Tags:
23
Image Scaling Jackie Van Ryzin http://compsci.snc.edu/cs460/ vanrjl
Transcript
Page 1: Image Scaling

Image Scaling

Jackie Van Ryzin

http://compsci.snc.edu/cs460/vanrjl

Page 2: Image Scaling

Outline

• Project Description– Definition & Requirements– Solutions (what I did)– Exceptions (what I didn’t 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

Page 3: Image Scaling

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

Page 4: Image Scaling

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

Page 5: Image Scaling

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. Dobb’s Journal, May 2002)

• Used concept of Bresenham’s line algorithm to scale a horizontal line of pixels

Page 6: Image Scaling

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)

Page 7: Image Scaling

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

)()(

)(0

01

010 xx

xx

yyyy

0001

01 )()(

)((int) yxx

xx

yy

)(

)(

01

01

xx

yy

Page 8: Image Scaling

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 > 0.5, line is closer to next y value

rather than current/previous– y++ and error--

Page 9: Image Scaling

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

Page 10: Image Scaling

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%

Page 11: Image Scaling

Smooth Bresenham (cont’d)

• Merit:– Standard (unweighted) averages = simpler

calculations– 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

Page 12: Image Scaling

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)

• Use CV’s split fcn to get 3 single-channel images from a 3-channel image

• Run algorithm on each before remerging with CV’s merge fcn

• CAREFUL with averaging!

• OpenCV Platform• Images in IplImage

format which has char* pointing to data

• Data stored linearly as bytes as shown

Page 13: Image Scaling

Zooming!

• 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!

Page 14: Image Scaling

Analysis• 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

Page 15: Image Scaling

I Wish I Could/Would Have...

• Been better able to convert bytes to ints and back– 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

Page 16: Image Scaling

Methods

• Some mini-lectures/discussions with Dr. Pankratz & Dr. McVey in beginning to understand basic algorithm

• 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 didn’t resize when image did

Page 17: Image Scaling

Methods (cont’d)

• OpenCV– Started with sample program from developers– Strip it down to minimum with John’s 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

Page 18: Image Scaling

Let’s 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

Page 19: Image Scaling

Where did this stuff come from?

• Dr. Dobb’s Journal• OpenCV manual• Dr. Pankratz & Dr. McVey• Forums and online tutorials for

OpenCV• Practice, experimenting, trial-and-

error• John, Ted, Ryan P

Page 20: Image Scaling

Important CS Concepts

• Data Structures– Arrays, pointers, structures, chars vs. unsigned

chars!– 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

techniques

Page 21: Image Scaling

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 calculations

• 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

Page 22: Image Scaling

For Those Who Follow• Meet with DCP and other profs OFTEN and right

away• Ask questions of anyone and everyone

– Someone may have a unique solution you wouldn’t think of

– Could make you discover a solution with a simple comment about how chars in C aren’t 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 steps…starting small is easier, and every

little milestone is rewarding. It also makes testing & debugging easier.

Page 23: Image Scaling

Q & A

Thanks to Dr. Pankratz and Dr. McVey for the guidance and ideas!

Thank you to classmates for ideas, answers, and suggestions.

http://compsci.snc.edu/cs460/vanrjl


Recommended