Introduction to Computer Science – Chapter 9 - Department of ...

molassesitalianΤεχνίτη Νοημοσύνη και Ρομποτική

6 Νοε 2013 (πριν από 3 χρόνια και 9 μήνες)

75 εμφανίσεις

Introduction to Computer
Science


Chapter 9

CSc

2010

Spring 2011

Marco Valero

Overview


Review image basics


Making pictures


Image processing


Shrinking and enlarging


Blurring and sharpening


Negative and embossing


Robot vision

Image basics


We used
takePicture

and show to respectively take
and show pictures already


We’ve also seen
savePicture

as a means to save a
snapshot to disk


makePicture
(<filename>) will load a picture from
disk and return a picture object


myPic

=
makePicture
(
pickAFile
())

Image basics


Height and width can be retrieved from a picture


getHeight
(<
pic
>) and
getWidth
(<
pic
>)


show(<
pic
>,<title>)


We can call show(
myPic
, ‘my title’) to create a
window with a title

Making pictures


Rather than taking pictures, we can create our own


width = height = 100


newPic

=
makePicture
(width, height, black)


RGB


Each is a byte, 0
-
255


We can loop through each pixel just like a matrix
and change the value

Image processing


We can think of the bitmap as a matrix then any
transformation from one picture to another is a
matrix transformation


500x500 pixel bitmap


250k pixels


If 10 operations per transformation that’s 2.5 mil ops!


Image processing is intensive

Shrinking & enlarging


If we wanted to shrink a given n x n image by a
factor of f


Result size is n/f x n/f


Bitmap[x*f, y*f]
-
>
NewBitmap
[x, y]


Enlarging is the inverse


Result size is n*f x n*f


Bitmap[x/f, y/f]
-
>
NewBitmap
[x, y]

Blurring & sharpening


Pixel transformation as a result of its local
neighbors’ values


Blurring is done by setting a pixels value to the
averages of its neighbors


V = sum([
getRed
(up),
getRed
(left),…]) / 5


Sharpening is done by subtracting the sum of its
neighbors


V = 5*
getRed
(self)


sum([
neighborvalues
])

Negative & embossing


To create a negative of an image we simply
subtract 255 from the current value


V = 255


getRed
(pixel)


Creating an embossed effect is done by
subtracting a neighbors value from a pixel


V =
getRed
(pixel)


getRed
(neighbor)

Robot vision


Are computers good at recognizing objects?


Are _we_ good at recognizing objects?


What would a simple tracking code look like?


Robot vision


What if we only focused on the object?


We can use high contrast filter


What are the issues with this?


Blob filtering


takePicture
(‘blob’)


Compare to older program