Upload
chadwick-barrera
View
10
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Computer Science 111. Fundamentals of Programming I Introduction to Digital Image Processing. Digital Images. Input devices: scanners cameras camcorders Output devices: display screens printers Processing: file compression various transformations. Transformations. - PowerPoint PPT Presentation
Citation preview
Digital Images
• Input devices: – scanners – cameras – camcorders
• Output devices: – display screens – printers
• Processing: – file compression– various transformations
Transformations
Convert from color to grayscale
Adjust the brightness
Adjust the contrast
Adjust the size
Rotate
Morph into another image
Representing Images
• An image can be represented as a two-dimensional grid of RGB values (pixels)
• To capture an image (via camera or scanner), a continuous range of color info is sampled as a set of discrete color values
• All processing works with the grid of RGB values
• Output maps the grid to a display or a printer
The images Module
• A non-standard, open source module that includes a set of classes and methods for processing images
• Can edit scripts in IDLE, then run them from IDLE or a terminal prompt
python testimages.py
The Image ClassImage(fileName)
Image(width, height)
draw()
clone()
getWidth()
getHeight()
getPixel(x, y)
setPixel(x, y, (r, g, b))
save(<optional file name>)
Represents a grid of pixels
Methods for display, examining the dimensions, examining or resetting pixels, and saving changes to a file
A pixel is just a tuple of 3 integers
A Simple Session
Uses a terminal prompt to launch python
Import the relevant class from the module
The images library must be in the current working directory
>>> from images import Image
A Simple Session
The image file must be in the current working directory
>>> from images import Image
>>> image = Image('smokey.gif')
A Simple Session
draw must be run to display the image
>>> from images import Image
>>> image = Image('smokey.gif')
>>> image.draw()
A Simple Session
>>> from images import Image
>>> image = Image('smokey.gif')
>>> image.draw()
>>> image.getWidth(), image.getHeight()(300, 225)
The image window must be closed to continue testing
The comma creates a tuple of results
A Simple Session
> python
>>> from images import Image
>>> image = Image('smokey.gif')
>>> image.draw()
>>> image.getWidth(), image.getHeight()(300, 225)
>>> image.getPixel(0, 0)(206, 224, 122)
Transformations: Black and White
• Compute the average of the three color components in a pixel
• If the average is less than 128, then set the pixel’s three color components to 0s (black)
• Otherwise, set them to 255s (white)
blackPixel = (0, 0, 0) whitePixel = (255, 255, 255) for y in xrange(image.getHeight()): for x in xrange(image.getWidth()): (r, g, b) = image.getPixel(x, y) average = (r + g + b) / 3 if average < 128: image.setPixel(x, y, blackPixel) else: image.setPixel(x, y, whitePixel)
Transformations: Black and White
Transformations: Inversion
• Should turn black into white or white into black
• Reset each color component of a pixel to 255 minus that component’s value
Transformations: Grayscale
• Compute the average of the three color components in a pixel
• Reset each color component of the pixel to this average value
Transformations: Grayscale
for y in xrange(image.getHeight ()) for x in xrange(image.getWidth()): (r, g, b) = image.getPixel(x, y) ave = (r + g + b) / 3 image.setPixel(x, y, (ave, ave, ave))
A Better Grayscale Algorithm
• The simple average of the RGB values does not take account of the human retina’s different sensitivities to the luminance of those values
• The human eye is more sensitive to green, then red, and finally blue
• Psychologists have determined the exact sensitivities
• Multiply each value by a weight factor and then add them up
A Better Grayscale Algorithm
red = int(red * 0.299)green = int(green * 0.587)blue = int(blue * 0.114)gray = red + green + blueimage.setPixel(x, y, (gray, gray, gray))
Old
New
Package Code in a Function
def grayScale(image): for y in xrange(image.getHeight ()): for x in xrange(image.getWidth()): (r, g, b) = image.getPixel(x, y) ave = (r + g + b) / 3 image.setPixel(x, y, (ave, ave, ave))
Note that this function does not return a new image, but modifies its argument
Until now, functions did not modify arguments
This is the most efficient way of modifying large data objects