package com.github.axet.lookup.common;
/**
* Minimal Sum-Tables required for any image for NCC or FNCC algorithm.
*
* 1) Base Image Array
*
* 2) Integral Image
*
* 3) Integral ^ 2 Image (Image Energy)
*
* 4) Zero Mean Image (image where each pixel substracted with image mean value)
*
* @author axet
*
*/
public class ImageBinaryChannel {
public SArray gi;
public IntegralImage integral;
public IntegralImage2 integral2;
public ImageZeroMean zeroMean;
public ImageBinaryChannel() {
integral = new IntegralImage();
integral2 = new IntegralImage2();
}
public ImageBinaryChannel(SArray img) {
gi = img;
integral = new IntegralImage();
integral2 = new IntegralImage2();
this.integral.initBase(gi);
this.integral2.initBase(gi);
for (int x = 0; x < this.gi.cx; x++) {
for (int y = 0; y < this.gi.cy; y++) {
step(x,y);
}
}
zeroMean = new ImageZeroMean(integral);
}
public void step(int x,int y) {
integral.step(x, y);
integral2.step(x, y);
}
public void initBase(SArray img) {
gi = img;
integral.initBase(img);
integral2.initBase(img);
}
public double dev2n() {
return integral2.dev2n(integral);
}
public double dev2() {
return integral2.dev2(integral);
}
public double dev() {
return integral2.dev(integral);
}
public double dev2n(int x1, int y1, int x2, int y2) {
return integral2.dev2n(integral, x1, y1, x2, y2);
}
public double dev2(int x1, int y1, int x2, int y2) {
return integral2.dev2(integral, x1, y1, x2, y2);
}
public double dev(int x1, int y1, int x2, int y2) {
return integral2.dev(integral, x1, y1, x2, y2);
}
public int getWidth() {
return gi.cx;
}
public int getHeight() {
return gi.cy;
}
public int size() {
return gi.cx * gi.cy;
}
}