Link to home
Create AccountLog in
Avatar of rossryan

asked on

Matrices -> Building weighted kernels

Right, I'll admit I am no good with matrix math. No matter how many time I study it, it does not stay in my brain.

So, I am trying to build weighted kernels for some image processing. They are 3x3 kernels, and I need them for the various directions listed in the code section (8 different directions). I have one for West, just need to learn how to do the others.

This is for use with Processing and Jama, which is fun enough not having a proper IDE.

Matrix kernel =
    new Matrix(new double[][]{{ 1, 1, 0},
                              { 0, 0, 0},
                              {-1,-1, 0}}).times(0.25); // West

Matrix[] computeCost(PImage image) {

  // @todo Create kernels
  // @note Use constants NW, N, NE, W, E, SW, S, and SE (see above)
  //       If you don't use these properly, 'neighborCost' will not work correctly

  // @todo Compute the cost for each RGB band

  // the cost matrix is defined as the magnitude of the cost over the RGB bands
  // and is negated and normalized with respect the maximum value

  return cost;

// Different directions (do not edit these values)
static final int NW = 0; // These values are ordered top to bottom, left to right as in:
static final int N  = 1; //
static final int NE = 2; //  NW  N  NE
static final int W  = 3; //    \ | /
static final int E  = 4; // W -  ?  - E
static final int SW = 5; //    / | \
static final int S  = 6; //  SW  S  SE
static final int SE = 7; //

Open in new window

Avatar of GwynforWeb
Flag of Canada image

Link to home
Create an account to see this answer
Signing up is free. No credit card required.
Create Account
....  I can clearly see you are detecting directional gradients/edges but I am not sure what convention you are adopting for differentiating  NE form SW etc.  I have guessed and am probably right, but not sure.
Avatar of rossryan


Hmm. The TA is of the opinion that rotating the matrices by 90 degree increments should be enough.