use of com.joliciel.jochre.utils.graphics.ImagePixelGrabber in project jochre by urieli.
the class ShapeImplTest method testGetBrightnessTotalsBySectorWithSquareBigger.
@Test
public void testGetBrightnessTotalsBySectorWithSquareBigger() throws Exception {
System.setProperty("config.file", "src/test/resources/test.conf");
ConfigFactory.invalidateCaches();
Config config = ConfigFactory.load();
JochreSession jochreSession = new JochreSession(config);
Shape shape = new Shape(jochreSession);
final int top = 0;
final int bottom = 5;
final int left = 0;
final int right = 4;
int[] pixels = new int[] { // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245 };
ImagePixelGrabber pixelGrabber = new ImagePixelGrabberMock(pixels, right - left + 1, bottom - top + 1);
final GroupOfShapes group = mock(GroupOfShapes.class);
final RowOfShapes row = mock(RowOfShapes.class);
final Paragraph paragraph = mock(Paragraph.class);
final JochreImage image = mock(JochreImage.class);
final BufferedImage shapeImage = mock(BufferedImage.class);
when(group.getId()).thenReturn(1);
when(group.getRow()).thenReturn(row);
when(row.getParagraph()).thenReturn(paragraph);
when(paragraph.getImage()).thenReturn(image);
when(image.normalize(anyInt())).then(returnsFirstArg());
when(image.isLeftToRight()).thenReturn(true);
shape.setPixelGrabber(pixelGrabber);
shape.setGroup(group);
shape.setTop(0);
shape.setBottom(bottom);
shape.setLeft(0);
shape.setRight(right);
shape.setMeanLine(1);
shape.setBaseLine(4);
shape.setImage(shapeImage);
double[][] totals = shape.getBrightnessBySection(6, 8, 0.5, 0.5, SectionBrightnessMeasurementMethod.RAW);
LOG.debug("Pixels:");
for (int y = 0; y < shape.getHeight(); y++) {
String pixelsStr = "";
for (int x = -1; x < shape.getWidth(); x++) {
pixelsStr += shape.getPixelInShape(x, y) + ",";
}
LOG.debug(pixelsStr);
}
LOG.debug("Brightness totals by sector:");
for (int y = 0; y < totals[0].length; y++) {
String brightnessTotalsStr = "";
for (int x = 0; x < totals.length; x++) {
brightnessTotalsStr += totals[x][y] + ",";
}
LOG.debug(brightnessTotalsStr);
}
for (int y = 0; y < totals[0].length; y++) {
for (int x = 0; x < totals.length; x++) {
double expected = 160.0 / 16.0;
if (x < 1)
expected = 0.0;
else if (y < 1)
expected = 0.0;
else if (y > 6)
expected = 0.0;
assertEquals("For x=" + x + ",y=" + y + " expected " + expected + " but was " + totals[x][y], expected, totals[x][y], 0.1);
}
}
}
use of com.joliciel.jochre.utils.graphics.ImagePixelGrabber in project jochre by urieli.
the class ShapeImplTest method testGetBrightnessTotalsBySectorWithSquareSmaller.
@Test
public void testGetBrightnessTotalsBySectorWithSquareSmaller() throws Exception {
System.setProperty("config.file", "src/test/resources/test.conf");
ConfigFactory.invalidateCaches();
Config config = ConfigFactory.load();
JochreSession jochreSession = new JochreSession(config);
Shape shape = new Shape(jochreSession);
final int top = 0;
final int bottom = 5;
final int left = 0;
final int right = 2;
int[] pixels = new int[] { // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245 };
ImagePixelGrabber pixelGrabber = new ImagePixelGrabberMock(pixels, right - left + 1, bottom - top + 1);
final GroupOfShapes group = mock(GroupOfShapes.class);
final RowOfShapes row = mock(RowOfShapes.class);
final Paragraph paragraph = mock(Paragraph.class);
final JochreImage image = mock(JochreImage.class);
final BufferedImage shapeImage = mock(BufferedImage.class);
when(group.getId()).thenReturn(1);
when(group.getRow()).thenReturn(row);
when(row.getParagraph()).thenReturn(paragraph);
when(paragraph.getImage()).thenReturn(image);
when(image.normalize(anyInt())).then(returnsFirstArg());
when(image.isLeftToRight()).thenReturn(true);
shape.setPixelGrabber(pixelGrabber);
shape.setGroup(group);
shape.setTop(0);
shape.setBottom(bottom);
shape.setLeft(0);
shape.setRight(right);
shape.setMeanLine(1);
shape.setBaseLine(4);
shape.setImage(shapeImage);
double[][] totals = shape.getBrightnessBySection(6, 8, 0.5, 0.5, SectionBrightnessMeasurementMethod.RAW);
LOG.debug("Pixels:");
for (int y = 0; y < shape.getHeight(); y++) {
String pixelsStr = "";
for (int x = -1; x < shape.getWidth(); x++) {
pixelsStr += shape.getPixelInShape(x, y) + ",";
}
LOG.debug(pixelsStr);
}
LOG.debug("Brightness totals by sector:");
for (int y = 0; y < totals[0].length; y++) {
String brightnessTotalsStr = "";
for (int x = 0; x < totals.length; x++) {
brightnessTotalsStr += totals[x][y] + ",";
}
LOG.debug(brightnessTotalsStr);
}
for (int y = 0; y < totals[0].length; y++) {
for (int x = 0; x < totals.length; x++) {
double expected = 120.0 / 12.0;
if (x < 3)
expected = 0.0;
else if (y < 1)
expected = 0.0;
else if (y > 6)
expected = 0.0;
assertEquals("For x=" + x + ",y=" + y + " expected " + expected + " but was " + totals[x][y], expected, totals[x][y], 0.1);
}
}
}
use of com.joliciel.jochre.utils.graphics.ImagePixelGrabber in project jochre by urieli.
the class ShapeImplTest method testGetBrightnessTotalsBySector.
@Test
public void testGetBrightnessTotalsBySector() throws Exception {
System.setProperty("config.file", "src/test/resources/test.conf");
ConfigFactory.invalidateCaches();
Config config = ConfigFactory.load();
JochreSession jochreSession = new JochreSession(config);
Shape shape = new Shape(jochreSession);
final int top = 0;
final int bottom = 6;
final int left = 0;
final int right = 4;
int[] pixels = new int[] { // row
0, // row
255, // row
254, // row
253, // row
252, // row
251, // row
250, // row
249, // row
248, // row
247, // row
246, // row
245, // row
244, // row
243, // row
242, // row
241, // row
240, // row
239, // row
238, // row
237, // row
236, // row
235, // row
234, // row
233, // row
232, // row
231, // row
230, // row
229, // row
228, // row
227, 226, 225, 224, 223, 222 };
ImagePixelGrabber pixelGrabber = new ImagePixelGrabberMock(pixels, right - left + 1, bottom - top + 1);
final GroupOfShapes group = mock(GroupOfShapes.class);
final RowOfShapes row = mock(RowOfShapes.class);
final Paragraph paragraph = mock(Paragraph.class);
final JochreImage image = mock(JochreImage.class);
final BufferedImage shapeImage = mock(BufferedImage.class);
when(group.getId()).thenReturn(1);
when(group.getRow()).thenReturn(row);
when(row.getParagraph()).thenReturn(paragraph);
when(paragraph.getImage()).thenReturn(image);
when(image.normalize(anyInt())).thenAnswer(invocationOnMock -> {
return invocationOnMock.getArgument(0);
});
when(image.isLeftToRight()).thenReturn(true);
shape.setPixelGrabber(pixelGrabber);
shape.setGroup(group);
shape.setTop(0);
shape.setBottom(6);
shape.setLeft(0);
shape.setRight(4);
shape.setMeanLine(1);
shape.setBaseLine(5);
shape.setImage(shapeImage);
double[][] totals = shape.getBrightnessBySection(5, 5, 1, SectionBrightnessMeasurementMethod.RAW);
LOG.debug("Pixels:");
for (int y = 0; y < shape.getHeight(); y++) {
String pixelsStr = "";
for (int x = 0; x < shape.getWidth(); x++) {
pixelsStr += shape.getPixel(x, y) + ",";
}
LOG.debug(pixelsStr);
}
LOG.debug("Brightness totals by sector:");
for (int y = 0; y < totals[0].length; y++) {
String brightnessTotalsStr = "";
for (int x = 0; x < totals.length; x++) {
brightnessTotalsStr += totals[x][y] + ",";
}
LOG.debug(brightnessTotalsStr);
}
assertEquals(255.0, totals[0][0], 0.0001);
double testBrightness = 0.0;
for (int y = 0; y < totals[0].length; y++) {
for (int x = 0; x < totals.length; x++) {
if (x != 0 || y != 0) {
assertEquals("For x=" + x + ",y=" + y + " expected " + testBrightness + " but was " + totals[x][y], testBrightness, totals[x][y], 0.0001);
testBrightness += 1.0;
}
}
}
}
use of com.joliciel.jochre.utils.graphics.ImagePixelGrabber in project jochre by urieli.
the class ShapeImplTest method testGetBrightnessTotalsBySectorTwoSectorMargins.
@Test
public void testGetBrightnessTotalsBySectorTwoSectorMargins() throws Exception {
System.setProperty("config.file", "src/test/resources/test.conf");
ConfigFactory.invalidateCaches();
Config config = ConfigFactory.load();
JochreSession jochreSession = new JochreSession(config);
Shape shape = new Shape(jochreSession);
final int top = 0;
final int bottom = 7;
final int left = 0;
final int right = 5;
int[] pixels = new int[] { // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, 245, 245, 245, 245, 245, 245 };
ImagePixelGrabber pixelGrabber = new ImagePixelGrabberMock(pixels, right - left + 1, bottom - top + 1);
final GroupOfShapes group = mock(GroupOfShapes.class);
final RowOfShapes row = mock(RowOfShapes.class);
final Paragraph paragraph = mock(Paragraph.class);
final JochreImage image = mock(JochreImage.class);
final BufferedImage shapeImage = mock(BufferedImage.class);
when(group.getId()).thenReturn(1);
when(group.getRow()).thenReturn(row);
when(row.getParagraph()).thenReturn(paragraph);
when(paragraph.getImage()).thenReturn(image);
when(image.normalize(anyInt())).then(returnsFirstArg());
when(image.isLeftToRight()).thenReturn(true);
shape.setPixelGrabber(pixelGrabber);
shape.setGroup(group);
shape.setTop(0);
shape.setBottom(7);
shape.setLeft(0);
shape.setRight(5);
shape.setMeanLine(2);
shape.setBaseLine(4);
shape.setImage(shapeImage);
double[][] totals = shape.getBrightnessBySection(4, 4, 2, SectionBrightnessMeasurementMethod.RAW);
LOG.debug("Pixels:");
for (int y = 0; y < shape.getHeight(); y++) {
String pixelsStr = "";
for (int x = 0; x < shape.getWidth(); x++) {
pixelsStr += shape.getPixel(x, y) + ",";
}
LOG.debug(pixelsStr);
}
LOG.debug("Brightness totals by sector:");
for (int y = 0; y < totals[0].length; y++) {
String brightnessTotalsStr = "";
for (int x = 0; x < totals.length; x++) {
brightnessTotalsStr += totals[x][y] + ",";
}
LOG.debug(brightnessTotalsStr);
}
for (int y = 0; y < totals[0].length; y++) {
for (int x = 0; x < totals.length; x++) {
double expected = 180.0 / 16.0;
if (y < 2)
expected = 120.0 / 8.0;
else if (y > 5)
expected = 180.0 / 8.0;
assertEquals("For x=" + x + ",y=" + y + " expected " + expected + " but was " + totals[x][y], expected, totals[x][y], 0.1);
}
}
double[][] ratios = shape.getBrightnessBySection(4, 4, 2, SectionBrightnessMeasurementMethod.SIZE_NORMALISED);
for (int y = 0; y < ratios[0].length; y++) {
String brightnessRatioStr = "";
for (int x = 0; x < ratios.length; x++) {
assertEquals(10.0, ratios[x][y], 0.01);
brightnessRatioStr += ratios[x][y] + ",";
}
LOG.debug(brightnessRatioStr);
}
}
use of com.joliciel.jochre.utils.graphics.ImagePixelGrabber in project jochre by urieli.
the class ShapeImplTest method testGetBrightnessBySectorNoMargins.
@Test
public void testGetBrightnessBySectorNoMargins() throws Exception {
System.setProperty("config.file", "src/test/resources/test.conf");
ConfigFactory.invalidateCaches();
Config config = ConfigFactory.load();
JochreSession jochreSession = new JochreSession(config);
Shape shape = new Shape(jochreSession);
final int top = 0;
final int bottom = 5;
final int left = 0;
final int right = 2;
int[] pixels = new int[] { // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245, // row
245 };
ImagePixelGrabber pixelGrabber = new ImagePixelGrabberMock(pixels, right - left + 1, bottom - top + 1);
final GroupOfShapes group = mock(GroupOfShapes.class);
final RowOfShapes row = mock(RowOfShapes.class);
final Paragraph paragraph = mock(Paragraph.class);
final JochreImage image = mock(JochreImage.class);
final BufferedImage shapeImage = mock(BufferedImage.class);
when(group.getId()).thenReturn(1);
when(group.getRow()).thenReturn(row);
when(row.getParagraph()).thenReturn(paragraph);
when(paragraph.getImage()).thenReturn(image);
when(image.normalize(anyInt())).then(returnsFirstArg());
when(image.isLeftToRight()).thenReturn(true);
shape.setPixelGrabber(pixelGrabber);
shape.setGroup(group);
shape.setTop(0);
shape.setBottom(bottom);
shape.setLeft(0);
shape.setRight(right);
shape.setMeanLine(1);
shape.setBaseLine(4);
shape.setImage(shapeImage);
double[][] totals = shape.getBrightnessBySection(6, 8, SectionBrightnessMeasurementMethod.RAW);
LOG.debug("Pixels:");
for (int y = 0; y < shape.getHeight(); y++) {
String pixelsStr = "";
for (int x = -1; x < shape.getWidth(); x++) {
pixelsStr += shape.getPixelInShape(x, y) + ",";
}
LOG.debug(pixelsStr);
}
LOG.debug("Brightness totals by sector:");
for (int y = 0; y < totals[0].length; y++) {
String brightnessTotalsStr = "";
for (int x = 0; x < totals.length; x++) {
brightnessTotalsStr += totals[x][y] + ",";
}
LOG.debug(brightnessTotalsStr);
}
for (int y = 0; y < totals[0].length; y++) {
for (int x = 0; x < totals.length; x++) {
double expected = 180.0 / (6 * 8);
assertEquals("For x=" + x + ",y=" + y + " expected " + expected + " but was " + totals[x][y], expected, totals[x][y], 0.1);
}
}
}
Aggregations