Data Visualization

First, I should note that I could not find the correct library to access the data I was trying to use in Java, so I am using random data.

When presented with this prompt, my first thought was my capstone, which is largely data visualization. However, it uses software I could not recreate in less than a couple years, so I decided to process data similar to my capstone in a visually interesting way. In other words, I wanted to take a large set of floats mapped to 2d space, and group them into maxima. This is a very simple way to describe how stars are found in a digital image, which is roughly what I seek to recreate. I did this, but it was a bit boring, so I also set it up to make a more dynamic image that follows similar logic. These are the two modes in my program, mode 0 is more interesting but mode 1 is more intuitive.

float[][] visualization;
float[][] tempVisualization;
float max=0;
float min=255;
float range=255;
float growthfactor=255;
int mode= 0;
//loat[] data;
ImageHDU imageHdu;
void setup(){
  size(100,100);
  frameRate(15);
  //data = getImageHDUDataInFloatArray(imageHdu);
  visualization= new float[width][height];
  tempVisualization= new float[width][height];
  for(int x= 0; x< width; x++){
    for(int y= 0; y< height; y++){
     visualization[x][y]= random(25);
     //println(visualization[x][y]);
    }
  }
  
}

void draw(){
  min=255;
  max=0;
  for(int x= 1; x< width-1; x++){
    for(int y= 1; y< height-1; y++){
       if(mode==0){
         if(visualization[x][y]>visualization[x][y+1]&&
         visualization[x][y]>visualization[x][y-1]&&
         visualization[x][y]>visualization[x+1][y+1]&&
         visualization[x][y]>visualization[x-1][y+1]&&
         visualization[x][y]>visualization[x+1][y-1]&&
         visualization[x][y]>visualization[x-1][y-1]&&
         visualization[x][y]>visualization[x-1][y]&&
         visualization[x][y]>visualization[x+1][y]){
           tempVisualization[x][y]=visualization[x][y]+
           (visualization[x-1][y]+
           visualization[x-1][y-1]+
           visualization[x][y-1]+
           visualization[x+1][y-1]+
           visualization[x-1][y+1]+
           visualization[x][y+1]+
           visualization[x+1][y+1]+
           visualization[x+1][y])/2;
         }
         else{
           tempVisualization[x][y]=visualization[x][y]-
           (visualization[x-1][y]+
           visualization[x-1][y-1]+
           visualization[x][y-1]+
           visualization[x+1][y-1]+
           visualization[x-1][y+1]+
           visualization[x][y+1]+
           visualization[x+1][y+1]+
           visualization[x+1][y])/9;
         }
       }
     if(mode==1){
       for(int x2=-1; x2<2; x2++){
         for(int y2=-1; y2<2; y2++){
           if(x2!=0||y2!=0){
             process(x,y,x+x2,y+y2);
           }
         }
       }
     }
     max=max(max,tempVisualization[x][y]);
     min=min(min,tempVisualization[x][y]);
     stroke(tempVisualization[x][y]);
     point(x,y);
    }
  }
  range=max-min;
  range=min(range,254);
  if(mode==1){
    growthfactor=range*0.7;
  }
  if(mode==0){
    for(int x= 0; x< width; x++){
      for(int y= 0; y< height; y++){
       visualization[x][y]= visualization[x][y]*growthfactor/range;
      }
    }
  }
  println("looped");
  visualization=tempVisualization;
}
public void process(int largeX, int largeY, int smallX, int smallY){
  if(visualization[largeX][largeY]>visualization[smallX][smallY]){
     tempVisualization[largeX][largeY]+=visualization[smallX][smallY];
   }
   else{
     tempVisualization[largeX][largeY]=tempVisualization[largeX][largeY]*growthfactor/range;
   }
}

The file type I was attempting to use if fits, which I know the library for in python but not java.

Leave a Reply

Your email address will not be published. Required fields are marked *