Group 8x8 blocks using for loops in Java

Douglas Grealis

I am trying to group 8x8 blocks of pixel data that I retrieve from BufferedImage.

  1. jpegPixels is a 3D int array with height, width, and an RGB size (0=Red, 1=Green, 2=Blue).
  2. pixelMatrix is a 2D int array with 8x8 block size

So far the code works because I get a resultant image back out. Below is a partial sample of the code that groups pixels into 8x8 (it only shows 2 rows because code is too long).

int [][][] jpegPixels = new int[h][w][3]; //h = height size, w = width size
int [][] pixelMatrix = new int [8][8];

for(int i=6; i<jpegPixels.length-7; i++)
  {
     for(int j=6; j<jpegPixels[0].length-7; j++)
     {
       for(int x=0; x<2; x++)
       {  
        //************  ROW 1  ******************
        //********** Pixel 1 ********************
           pixelMatrix[0][0] = jpegPixels[i-1][j-1][x];

           //********** Pixel 2 ********************
           pixelMatrix[0][1] = jpegPixels[i-1][j][x];          

        //********** Pixel 3 ********************
           pixelMatrix[0][2] = jpegPixels[i-1][j+1][x];

        //********** Pixel 4 ********************
           pixelMatrix[0][3] = jpegPixels[i-1][j+2][x];

           //********** Pixel 5 ********************
           pixelMatrix[0][4] = jpegPixels[i-1][j+3][x];          

           //********** Pixel 6 ********************
           pixelMatrix[0][5] = jpegPixels[i-1][j+4][x];          

        //********** Pixel 7 ********************
           pixelMatrix[0][6] = jpegPixels[i-1][j+5][x];

        //********** Pixel 8 ********************
           pixelMatrix[0][7] = jpegPixels[i-1][j+6][x];

        //************  ROW 2  ******************
        //********** Pixel 9 ********************
           pixelMatrix[1][0] = jpegPixels[i][j-1][x];

           //********** Pixel 10 ********************
           pixelMatrix[1][1] = jpegPixels[i][j][x];

        //********** Pixel 11 ********************
           pixelMatrix[1][2] = jpegPixels[i][j+1][x];

           //********** Pixel 12 ********************
           pixelMatrix[1][3] = jpegPixels[i][j+2][x];

        //********** Pixel 13 ********************
           pixelMatrix[1][4] = jpegPixels[i][j+3][x];

           //********** Pixel 14 ********************
           pixelMatrix[1][5] = jpegPixels[i][j+4][x];

        //********** Pixel 15 ********************
           pixelMatrix[1][6] = jpegPixels[i][j+5][x];

           //********** Pixel 16 ********************
           pixelMatrix[1][7] = jpegPixels[i][j+6][x];

               //********** Pixel 17 - 64 ********************
               // ******* Too long to print the rest ********
          }
      }
 }

Can someone identify is this the correct way of grouping values into 8x8 blocks of a 3D array of h x w size? The reason is, is that when I test print out values of the original pixels and resultant pixels, I am getting values from the resultant pixels from a higher ofset?

For e.g.: Original pixels - 2234445556788, Resultant pixels - 0000000002234445556788

Hope this is clear. Thanks

Sterling Graham

I'm not sure how your pixels are being represented in your example. So I chose to use the way that a pixel is represented by the BufferedImage class as per this tutorial. If you need to change the way the pixels are being represented as ints you can edit the getIntFromPixel method.

private int getIntFromPixel(int[] pixel) 
{
    int r = pixel[0];
    int g = pixel[1];
    int b = pixel[2];

    return (r << 16) | (g << 8) | b;
}

// Returns the sub array with upper-left corner at [start_i][start_j] with
// width sub_w and height sub_h.
public int[][] getSubArray(int[][][] pixelArray, int start_i, int start_j
                               , int sub_w, int sub_h)
{       
    int[][] subArray = new int[sub_w][sub_h];

    for (int i = 0; i < sub_w; i++) {
        for (int j = 0; j < sub_h ; j++) {
            subArray[i][j] = getIntFromPixel(pixelArray[start_i + i][start_j + j]);
        }
    }

    return subArray;
}

Now for example given a 3x3 array

pixelArray = {
{{1,1,1}, {2,2,2}, {3,3,3}},
{{4,4,4}, {5,5,5}, {6,6,6}},
{{7,7,7}, {8,8,8}, {9,9,9}}
}

If we want to get the 2x2 pixel sub-array at [0][0]:

{{{1,1,1}, {2,2,2}}, {{4,4,4}, {5,5,5}}} 

you can call

getSubArray(pixel, 0, 0, 2, 2);

Which returns the array

{{65793, 131586}, {263172, 328965}}

In your loop in the inner loop the pixelMatrix is being over written each time the loop iterates meaning that the contents of pixelMatrix will be the b value of the pixel.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Using nested for loops in Java 8

From Dev

Lossless crop JPEG to whole 8x8 blocks

From Dev

Using Group By in Java 8 with Property

From Dev

Is there a way to merge two for loops using Streams in java 8?

From Dev

Can we Merge these three nested for loops by using streams in java 8?

From Dev

How to filter nested loops using Java 8 streams and filters?

From Dev

How to print x pattern in Java using for loops?

From Dev

Java 8 nested loops to stream

From Dev

Java 8 - triple nested for loops

From Dev

Transpose an 8x8 float using AVX/AVX2

From Dev

I'm trying to get movement on an 8x8 board on console application using a switch

From Dev

Issue displaying data on 8x8 led matrix using ARDUINO and PROCESSING

From Dev

How to group by range of values in Java 8 using streams

From Dev

Java 8 - How to group and sum on a list of maps using stream collectors

From Dev

How to group a set of objects into sorted lists using java 8?

From Dev

Java 8. Group a list of values into a list of ranges using Collectors

From Dev

How to group List of Lists using a certain criteria in Java 8

From Dev

Java 8 - How to group and sum on a list of maps using stream collectors

From Dev

Java 8 group by and BigDecimal

From Dev

How to iterate nested for loops referring to parent elements using Java 8 streams?

From Dev

Number Patterns using loops in Java

From Dev

Printing asterisks using for loops in java

From Dev

Making a table in Java using loops

From Dev

Timestables using nested loops in java

From Dev

Making pattern using loops Java

From Dev

Printing asterisks using for loops in java

From Dev

For loops in Java Swing using index

From Dev

Java 8 nested loops with streams & performance

From Dev

nested loops involving conditions in java 8

Related Related

  1. 1

    Using nested for loops in Java 8

  2. 2

    Lossless crop JPEG to whole 8x8 blocks

  3. 3

    Using Group By in Java 8 with Property

  4. 4

    Is there a way to merge two for loops using Streams in java 8?

  5. 5

    Can we Merge these three nested for loops by using streams in java 8?

  6. 6

    How to filter nested loops using Java 8 streams and filters?

  7. 7

    How to print x pattern in Java using for loops?

  8. 8

    Java 8 nested loops to stream

  9. 9

    Java 8 - triple nested for loops

  10. 10

    Transpose an 8x8 float using AVX/AVX2

  11. 11

    I'm trying to get movement on an 8x8 board on console application using a switch

  12. 12

    Issue displaying data on 8x8 led matrix using ARDUINO and PROCESSING

  13. 13

    How to group by range of values in Java 8 using streams

  14. 14

    Java 8 - How to group and sum on a list of maps using stream collectors

  15. 15

    How to group a set of objects into sorted lists using java 8?

  16. 16

    Java 8. Group a list of values into a list of ranges using Collectors

  17. 17

    How to group List of Lists using a certain criteria in Java 8

  18. 18

    Java 8 - How to group and sum on a list of maps using stream collectors

  19. 19

    Java 8 group by and BigDecimal

  20. 20

    How to iterate nested for loops referring to parent elements using Java 8 streams?

  21. 21

    Number Patterns using loops in Java

  22. 22

    Printing asterisks using for loops in java

  23. 23

    Making a table in Java using loops

  24. 24

    Timestables using nested loops in java

  25. 25

    Making pattern using loops Java

  26. 26

    Printing asterisks using for loops in java

  27. 27

    For loops in Java Swing using index

  28. 28

    Java 8 nested loops with streams & performance

  29. 29

    nested loops involving conditions in java 8

HotTag

Archive