1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package org.openimaj.image.neardups.sim;
31
32 import java.io.IOException;
33
34 import org.openimaj.image.ImageUtilities;
35 import org.openimaj.image.MBFImage;
36 import org.openimaj.image.processing.resize.ResizeProcessor;
37
38 public class WatermarkSimulation extends Simulation {
39 protected final static float minAlpha = 0.4f;
40 protected final static float maxAlpha = 1.0f;
41 protected final String[] watermarks = { "sotonimages.png", "logo.png" };
42
43 public WatermarkSimulation(int seed) {
44 super(seed);
45 }
46
47 @Override
48 public MBFImage applySimulation(MBFImage input) {
49 try {
50 final String wmark = watermarks[random.nextInt(watermarks.length)];
51
52 final MBFImage watermark = ImageUtilities.readMBFAlpha(WatermarkSimulation.class
53 .getResourceAsStream("/org/openimaj/image/neardups/" + wmark));
54
55 if (watermark.getHeight() > input.getHeight()) {
56 final int newY = (input.getHeight() - 10);
57 final int newX = (int) (watermark.getWidth() * ((double) newY / (double) watermark.getHeight()));
58 watermark.processInplace(new ResizeProcessor(newX, newY));
59 }
60
61 if (watermark.getWidth() > input.getWidth()) {
62 final int newX = (input.getWidth() - 10);
63 final int newY = (int) (watermark.getHeight() * ((double) newX / (double) watermark.getWidth()));
64 watermark.processInplace(new ResizeProcessor(newX, newY));
65 }
66
67 final float alpha = randomFloatInRange(minAlpha, maxAlpha);
68 watermark.getBand(3).multiplyInplace(alpha);
69 final MBFImage output = input.clone();
70 output.drawImage(watermark, (input.getWidth() / 2) - (watermark.getWidth() / 2), (input.getHeight() / 2)
71 - (watermark.getHeight() / 2));
72 return output;
73
74 } catch (final IOException e) {
75 throw new Error(e);
76 }
77 }
78 }