001/** 002 * Copyright (c) 2011, The University of Southampton and the individual contributors. 003 * All rights reserved. 004 * 005 * Redistribution and use in source and binary forms, with or without modification, 006 * are permitted provided that the following conditions are met: 007 * 008 * * Redistributions of source code must retain the above copyright notice, 009 * this list of conditions and the following disclaimer. 010 * 011 * * Redistributions in binary form must reproduce the above copyright notice, 012 * this list of conditions and the following disclaimer in the documentation 013 * and/or other materials provided with the distribution. 014 * 015 * * Neither the name of the University of Southampton nor the names of its 016 * contributors may be used to endorse or promote products derived from this 017 * software without specific prior written permission. 018 * 019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 020 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 021 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 022 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 023 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 024 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 025 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 026 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 027 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 028 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 029 */ 030package org.openimaj.image.neardups.sim; 031 032import java.io.IOException; 033 034import org.openimaj.image.ImageUtilities; 035import org.openimaj.image.MBFImage; 036import org.openimaj.image.processing.resize.ResizeProcessor; 037 038public class WatermarkSimulation extends Simulation { 039 protected final static float minAlpha = 0.4f; 040 protected final static float maxAlpha = 1.0f; 041 protected final String[] watermarks = { "sotonimages.png", "logo.png" }; 042 043 public WatermarkSimulation(int seed) { 044 super(seed); 045 } 046 047 @Override 048 public MBFImage applySimulation(MBFImage input) { 049 try { 050 final String wmark = watermarks[random.nextInt(watermarks.length)]; 051 052 final MBFImage watermark = ImageUtilities.readMBFAlpha(WatermarkSimulation.class 053 .getResourceAsStream("/org/openimaj/image/neardups/" + wmark)); 054 055 if (watermark.getHeight() > input.getHeight()) { 056 final int newY = (input.getHeight() - 10); 057 final int newX = (int) (watermark.getWidth() * ((double) newY / (double) watermark.getHeight())); 058 watermark.processInplace(new ResizeProcessor(newX, newY)); 059 } 060 061 if (watermark.getWidth() > input.getWidth()) { 062 final int newX = (input.getWidth() - 10); 063 final int newY = (int) (watermark.getHeight() * ((double) newX / (double) watermark.getWidth())); 064 watermark.processInplace(new ResizeProcessor(newX, newY)); 065 } 066 067 final float alpha = randomFloatInRange(minAlpha, maxAlpha); 068 watermark.getBand(3).multiplyInplace(alpha); 069 final MBFImage output = input.clone(); 070 output.drawImage(watermark, (input.getWidth() / 2) - (watermark.getWidth() / 2), (input.getHeight() / 2) 071 - (watermark.getHeight() / 2)); 072 return output; 073 074 } catch (final IOException e) { 075 throw new Error(e); 076 } 077 } 078}