java code 2

2
// Mike Scott // 2d array manipulation examples //import import java.awt.Color; public class FilterExample { /* *pre: image != null, image.length > 1, image[0].length > 1 * image is a rectangular matrix, neighberhoodSize > 0 *post: return a smoothed version of image */ public Color[][] smooth(Color[][] image, int neighberhoodSize) { //check precondition assert image != null && image.length > 1 && image[0].length > 1 && ( neighberhoodSize > 0 ) && rectangularMatrix( image ) : "Violation of precondition: smooth"; Color[][] result = new Color[image.length][image[0].length]; for(int row = 0; row < image.length; row++) { for(int col = 0; col < image[0].length; col++) { result[row][col] = aveOfNeighbors(image, row, col, neighberhoodSize); } } return result; } // helper method that determines the average color of a neighberhood // around a particular cell. private Color aveOfNeighbors(Color[][] image, int row, int col, int neighberhoodSize) { int numNeighbors = 0; int red = 0; int green = 0; int blue = 0; for(int r = row - neighberhoodSize; r <= row + neighberhoodSize; r++) { for(int c = col - neighberhoodSize; c <= col + neighberhoodSize; c++) { if( inBounds( image, r, c ) ) { numNeighbors++; red += image[r][c].getRed(); green += image[r][c].getGreen(); blue += image[r][c].getBlue(); } } } assert numNeighbors > 0; return new Color( red / numNeighbors, green / numNeighbors, blue / numNeighbors ); } //helper method to determine if given coordinates are in bounds private boolean inBounds(Color[][] image, int row, int col) { return (row >= 0) && (row <= image.length) && (col >= 0)

description

java code example

Transcript of java code 2

Page 1: java code 2

// Mike Scott// 2d array manipulation examples

//importimport java.awt.Color;

public class FilterExample{ /* *pre: image != null, image.length > 1, image[0].length > 1 * image is a rectangular matrix, neighberhoodSize > 0 *post: return a smoothed version of image */ public Color[][] smooth(Color[][] image, int neighberhoodSize) { //check precondition assert image != null && image.length > 1 && image[0].length > 1 && ( neighberhoodSize > 0 ) && rectangularMatrix( image ) : "Violation of precondition: smooth";

Color[][] result = new Color[image.length][image[0].length];

for(int row = 0; row < image.length; row++) { for(int col = 0; col < image[0].length; col++) { result[row][col] = aveOfNeighbors(image, row, col, neighberhoodSize); } }

return result; }

// helper method that determines the average color of a neighberhood // around a particular cell. private Color aveOfNeighbors(Color[][] image, int row, int col, int neighberhoodSize) { int numNeighbors = 0; int red = 0; int green = 0; int blue = 0;

for(int r = row - neighberhoodSize; r <= row + neighberhoodSize;r++) { for(int c = col - neighberhoodSize; c <= col + neighberhoodSize; c++) { if( inBounds( image, r, c ) ) { numNeighbors++; red += image[r][c].getRed(); green += image[r][c].getGreen(); blue += image[r][c].getBlue(); } } }

assert numNeighbors > 0; return new Color( red / numNeighbors, green / numNeighbors, blue/ numNeighbors ); }

//helper method to determine if given coordinates are in bounds private boolean inBounds(Color[][] image, int row, int col) { return (row >= 0) && (row <= image.length) && (col >= 0)

Page 2: java code 2

&& (col < image[0].length); }

//private method to ensure mat is rectangular private boolean rectangularMatrix( Color[][] mat ) { boolean isRectangular = true; int row = 1; final int COLUMNS = mat[0].length;

while( isRectangular && row < mat.length ) { isRectangular = ( mat[row].length == COLUMNS ); row++; }

return isRectangular; }}