?
Solved

Matrices -> Building weighted kernels

Posted on 2011-02-16
3
Medium Priority
?
897 Views
Last Modified: 2012-05-11
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.

Thanks,
Ryan
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

0
Comment
Question by:rossryan
  • 2
3 Comments
 
LVL 31

Accepted Solution

by:
GwynforWeb earned 2000 total points
ID: 34915861
Without knowing the full details of what the kernels are wanted to do I suggest the following

for  N
    new Matrix(new double[][]{{ 1, 0, -1},
                                            { 1, 0, -1},
                                            { 0, 0,  0}}).times(0.25); // North

for NW
    new Matrix(new double[][]{{ 0, -1, 0},
                                            { 1, 0, -1},
                                            { 0, 1,  0}}).times(0.25); // North West



The rest follow from symmetry
0
 
LVL 31

Expert Comment

by:GwynforWeb
ID: 34916035
....  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.
0
 

Author Comment

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

0

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
What to do if a split doesn't fit? Or a bunch of invoice lines must be rounded while the sum must match a total? It takes a little, but - when done - it is extremely easy to implement.
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
The viewer will learn how to implement Singleton Design Pattern in Java.

569 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question