use of boofcv.struct.ImageRectangle in project BoofCV by lessthanoptimal.
the class ImplIntegralImageOps method convolve.
public static void convolve(GrayF32 integral, IntegralKernel kernel, GrayF32 output) {
for (int y = 0; y < integral.height; y++) {
for (int x = 0; x < integral.width; x++) {
float total = 0;
for (int i = 0; i < kernel.blocks.length; i++) {
ImageRectangle b = kernel.blocks[i];
total += block_zero(integral, x + b.x0, y + b.y0, x + b.x1, y + b.y1) * kernel.scales[i];
}
output.set(x, y, total);
}
}
}
use of boofcv.struct.ImageRectangle in project BoofCV by lessthanoptimal.
the class ImplIntegralImageOps method convolveBorder.
public static void convolveBorder(GrayS64 integral, IntegralKernel kernel, GrayS64 output, int borderX, int borderY) {
for (int x = 0; x < integral.width; x++) {
for (int y = 0; y < borderY; y++) {
long total = 0;
for (int i = 0; i < kernel.blocks.length; i++) {
ImageRectangle b = kernel.blocks[i];
total += block_zero(integral, x + b.x0, y + b.y0, x + b.x1, y + b.y1) * kernel.scales[i];
}
output.set(x, y, total);
}
for (int y = integral.height - borderY; y < integral.height; y++) {
long total = 0;
for (int i = 0; i < kernel.blocks.length; i++) {
ImageRectangle b = kernel.blocks[i];
total += block_zero(integral, x + b.x0, y + b.y0, x + b.x1, y + b.y1) * kernel.scales[i];
}
output.set(x, y, total);
}
}
int endY = integral.height - borderY;
for (int y = borderY; y < endY; y++) {
for (int x = 0; x < borderX; x++) {
long total = 0;
for (int i = 0; i < kernel.blocks.length; i++) {
ImageRectangle b = kernel.blocks[i];
total += block_zero(integral, x + b.x0, y + b.y0, x + b.x1, y + b.y1) * kernel.scales[i];
}
output.set(x, y, total);
}
for (int x = integral.width - borderX; x < integral.width; x++) {
long total = 0;
for (int i = 0; i < kernel.blocks.length; i++) {
ImageRectangle b = kernel.blocks[i];
total += block_zero(integral, x + b.x0, y + b.y0, x + b.x1, y + b.y1) * kernel.scales[i];
}
output.set(x, y, total);
}
}
}
use of boofcv.struct.ImageRectangle in project BoofCV by lessthanoptimal.
the class ImplIntegralImageOps method convolveBorder.
public static void convolveBorder(GrayF32 integral, IntegralKernel kernel, GrayF32 output, int borderX, int borderY) {
for (int x = 0; x < integral.width; x++) {
for (int y = 0; y < borderY; y++) {
float total = 0;
for (int i = 0; i < kernel.blocks.length; i++) {
ImageRectangle b = kernel.blocks[i];
total += block_zero(integral, x + b.x0, y + b.y0, x + b.x1, y + b.y1) * kernel.scales[i];
}
output.set(x, y, total);
}
for (int y = integral.height - borderY; y < integral.height; y++) {
float total = 0;
for (int i = 0; i < kernel.blocks.length; i++) {
ImageRectangle b = kernel.blocks[i];
total += block_zero(integral, x + b.x0, y + b.y0, x + b.x1, y + b.y1) * kernel.scales[i];
}
output.set(x, y, total);
}
}
int endY = integral.height - borderY;
for (int y = borderY; y < endY; y++) {
for (int x = 0; x < borderX; x++) {
float total = 0;
for (int i = 0; i < kernel.blocks.length; i++) {
ImageRectangle b = kernel.blocks[i];
total += block_zero(integral, x + b.x0, y + b.y0, x + b.x1, y + b.y1) * kernel.scales[i];
}
output.set(x, y, total);
}
for (int x = integral.width - borderX; x < integral.width; x++) {
float total = 0;
for (int i = 0; i < kernel.blocks.length; i++) {
ImageRectangle b = kernel.blocks[i];
total += block_zero(integral, x + b.x0, y + b.y0, x + b.x1, y + b.y1) * kernel.scales[i];
}
output.set(x, y, total);
}
}
}
use of boofcv.struct.ImageRectangle in project BoofCV by lessthanoptimal.
the class TestImplIntegralImageOps method convolve.
public void convolve(Method m) throws InvocationTargetException, IllegalAccessException {
Kernel2D_S32 kernel = new Kernel2D_S32(3, new int[] { 1, 1, 1, 2, 2, 2, 1, 1, 1 });
GrayU8 input = new GrayU8(width, height);
GrayS32 expected = new GrayS32(width, height);
GImageMiscOps.fillUniform(input, rand, 0, 10);
ImageBorder_S32 border = FactoryImageBorderAlgs.value(input, 0);
ConvolveImage.convolve(kernel, input, expected, border);
Class[] paramType = m.getParameterTypes();
Class inputType = paramType[0];
Class outputType = paramType[2];
ImageGray inputII = GeneralizedImageOps.createSingleBand(inputType, width, height);
ImageGray integral = GeneralizedImageOps.createSingleBand(outputType, width, height);
ImageGray expectedII = GeneralizedImageOps.createSingleBand(outputType, width, height);
ImageGray found = GeneralizedImageOps.createSingleBand(outputType, width, height);
GConvertImage.convert(input, inputII);
GConvertImage.convert(expected, expectedII);
GIntegralImageOps.transform(inputII, integral);
IntegralKernel kernelII = new IntegralKernel(2);
kernelII.blocks[0] = new ImageRectangle(-2, -2, 1, 1);
kernelII.blocks[1] = new ImageRectangle(-2, -1, 1, 0);
kernelII.scales = new int[] { 1, 1 };
m.invoke(null, integral, kernelII, found);
BoofTesting.assertEqualsRelative(expected, found, 1e-4f);
}
use of boofcv.struct.ImageRectangle in project BoofCV by lessthanoptimal.
the class TestImplIntegralImageOps method convolveBorder.
public void convolveBorder(Method m) throws InvocationTargetException, IllegalAccessException {
Kernel2D_S32 kernel = new Kernel2D_S32(3, new int[] { 1, 1, 1, 2, 2, 2, 1, 1, 1 });
GrayU8 input = new GrayU8(width, height);
GrayS32 expected = new GrayS32(width, height);
GImageMiscOps.fillUniform(input, rand, 0, 10);
ImageBorder_S32 border = FactoryImageBorderAlgs.value(input, 0);
ConvolveImage.convolve(kernel, input, expected, border);
Class[] paramType = m.getParameterTypes();
Class inputType = paramType[0];
Class outputType = paramType[2];
ImageGray inputII = GeneralizedImageOps.createSingleBand(inputType, width, height);
ImageGray integral = GeneralizedImageOps.createSingleBand(outputType, width, height);
ImageGray expectedII = GeneralizedImageOps.createSingleBand(outputType, width, height);
ImageGray found = GeneralizedImageOps.createSingleBand(outputType, width, height);
GConvertImage.convert(input, inputII);
GConvertImage.convert(expected, expectedII);
GIntegralImageOps.transform(inputII, integral);
IntegralKernel kernelII = new IntegralKernel(2);
kernelII.blocks[0] = new ImageRectangle(-2, -2, 1, 1);
kernelII.blocks[1] = new ImageRectangle(-2, -1, 1, 0);
kernelII.scales = new int[] { 1, 1 };
m.invoke(null, integral, kernelII, found, 4, 5);
BoofTesting.assertEqualsBorder(expected, found, 1e-4f, 4, 5);
}
Aggregations