Manipulating array of arrays...
I am trying to work with this a two dimensional array, that represents greyscale of an image... I want to pixelate the image by averaging 2x2 blocks and replacing each value by the average of the 2x2 grid... for example, if the input is the array
Code :
2, 4, 31, 31
3, 3, 21, 41
1, 2, 10, 20
3, 2, 20, 30
then you start by looking at the first 2x2 sub-array (from the top-left)
and find the average of this sub-array (which is (2+4+3+3)/4 = 3). In the returned array, the first 2x2 sub-array will then be
We then look at the next 2x2 block
with average 31, The next 2x2 block in the output will be
I am wondering what approach would best solve this problem. Not too sure how to solve it... Thanks in advance
Re: Manipulating array of arrays...
Try nested loops and walk through the dimensions by 2 vs by 1
Re: Manipulating array of arrays...
but how do i make a loop to go through 2x2 portions of my array of array?
Re: Manipulating array of arrays...
Quote:
Originally Posted by
choloboy
... what approach would best...
I wouldn't worry about finding the "best" approach. Just think about an approach.
For example:
Code :
Suppose you have a two-dimension array of ints named pixelArray.
Declare an int named numRows and set it equal to pixelArray.length;
Declare an int named numCols and set it equal to pixelArray[0].length;
First of all make sure that numRows and numCols are both even numbers.
(Use numRows%2 and numCols%2 to determine that.)
Then make nested loops that go through the rows and columns of pixelArray two at a time:
Code :
for (int i = 0; i < numRows; /* What goes here to make it step through the rows two at a time? */) {
for (int j = 0; j < numCols; /* What goes here to make it step through the columns two at a time? */) {
//
// Do the Good Stuff here
//
}
}
Now, what is the Good Stuff?
Code :
Declare an int variable named sum, or some such thing.
In the innermost loop, calculate it by adding the values of the
elements of the 2x2 sub array:
pixelArray[i][j] +
pixelArray[i][j+1] +
pixelArray[i+1][j] +
pixelArray[i+1][j+1]
Declare an int variable named avg or some such thing
Set the value of avg equal to Math.round(sum/4.0f) to get the
int value closest to the average value of the four pixels.
Copy this average value back into the pixelArray elements
that were used to calculate the sum.
Cheers!
Z