Transcript Document

Pictures

Looping through pixels.

Lab Review (1)

 Objects     Instantiated from Class Turtle myTut = new Turtle(myWorld); new operator creates an instance of the class Constructor  Constructs (initializes) object   Has same name as class May need to supply arguments as parameters

Lab Review (2)

 Methods   Send message to object by calling method  myTut.turnLeft(); Argument can be supplied as a parameter  myTut.forward(45);

Lab Review (3)

} /** * Draws a square with side width pixels at the current position * in the world.

* * @param width length of the side { */ public void drawSquare(int width) //draw side one this.forward(width); // turn 90 deg counterclockwise this.turnLeft(); // draw side two … For main program: /** */ This program draws uses the Turtle to draw nested squares.

@author S. Sigman @version 2/4/2007

Lab Review (4)

  Using the Java packages require that the class or classes be made available to the compiler.

import statement used to do this    import java.awt.Color; Put at top of the file import java.awt.*; makes all classes in java.awt available.

Problem

  Manipulate a digital image   make a picture brighter/darker alter the color in a picture In computer science we must often start by learning about the domain in which we are writing programs.

 Often requires us to learn more about our language

Digital Images

   How are images encoded?

Basic Idea: Represent image as a 2 dimensional matrix of colored dots.

Human Visual Perception  Humans have low visual acuity   We see color and luminance (black and white) using different neural pathways in our brain Luminance is perceived with our peripheral vision

Digital Images - Arrays

       Arrays are a contiguous collections of cells homogeneous data where each cell is identified by an index.

int [] score = {23, 25, 22, 25}; score[0] is 23; score[1] is 25; score[3] is ?

Arrays are objects. The assignment above is a shorthand that hides the new operator.

int [] grades = new int [10]; // declares and // allocates grades[0] = 35;

Digital Images – Matrices

0 1    Matrices are 2-dimensional arrays In Java a matrix is an array of arrays An image has type: Pixel [][] pictData; 0 1 2 3 0 1 2 3 Row Major Order pictData [r] [c] 0 1 Column Major Order pictData [c] [r]

Digital Images - Color

   Visible light is continuous  Wavelength: 370 nm – 730 nm We have red, green, blue receptors    red peak: 560 nm green peak: 550 nm blue peak: 425 nm Color we see is based upon signals from recptors

Digital Images – Color Models

   RGB – Red Green Blue HSV – Hue Saturation and Value CMYK – Cyan, Magenta, Yellow, Black  Used by printers (ie. Those who print books, newsletters, pamplets, …)

Digital Image - RGP

 Three Channels     Red, Green, Blue Value Range: 0 – 255 24 bit color  16 million colors  Does not cover range of colors we perceive 32 bit color   16 million colors alpha channel – transparency

Creating an Image

String fileName = FileChooser.pickAFile(); Picture pict = new Picture(fileName); // show the image pict.show(); // explore the image pict.expore();

Looking at Pixels

     Pixel pix = pict.getPixel(0,0); int xCord = pix.getX(); int yCord = pix.getY(); int redVal = pix.getRed(); pix.setRed(255); pix.setGreen(0); pix.setBlue(0); pict.repaint(); // must repaint to show // change

Looking at Pixels (2)

  Pixel [] imgData = pict.getPixels(); pict.getPixel(10,100).setColor(Color.black); pict.getPixel(11,100).setColor(Color.black); pict.getPixel(12,100).setColor(Color.black); pict.getPixel(13,100).setColor(Color.black); pict.repaint(); This process is a little laborious!!

Changing The Green Component For All Pixels    Push the green component to 255 for all pixels.

Algorithm   Get an array of pixels in image For each pixel in the image  set the green component to 255 How do we do the for each?

The For Each Loop

  Allows us to repeat a set of Java commands for each element in an array.

Syntax   for (type variableName: array) statement; for multiple statements enclose in { }

Method to Maximize Green

} public void maxGreen() { // get the pixels Pixel [] pixels =

this

.getPixels(); // set the pixels to max green } for(Pixel curPix : pixels) { curPix.setGreen(255);

While Loops

  Java provides other ways to construct loops While loop    loop while some condition is true syntax  while (test) statement; Advice: always use braces

Maximize Green With a While Loop } public void maxGreen() { // get the pixels Pixel [] pixels =

this

.getPixels(); // set the pixels to max green } int curPos = 0; while (curPos < pixels.length) { pixels[curPos].setGreen(255); curPos++; // same as curPos = curPos + 1;

For Loop

  Loop with a built-in counter – also called a counting loop Syntax   for (init; limit test; change) statement; Advice: always use braces

Maximize Green With a For Loop } public void maxGreen() { // get the pixels Pixel [] pixels =

this

.getPixels(); } // set the pixels to max green for (int i=0;i < pixels.length; i++) { pixels[i].setGreen(255);

Scope

     For loop from previous slide for (int i=0;i < pixels.length; i++) { pixels[i].setGreen(255); } Where is i’s value know?

Just inside the block the defines the body of the loop. This is i’s scope.

Look at scope in Picture.

Principle: Variables scope should be as small as possible. Called localization.