1 /** 2 * Copyright (c) 2011, The University of Southampton and the individual contributors. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * * Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 11 * * Redistributions in binary form must reproduce the above copyright notice, 12 * this list of conditions and the following disclaimer in the documentation 13 * and/or other materials provided with the distribution. 14 * 15 * * Neither the name of the University of Southampton nor the names of its 16 * contributors may be used to endorse or promote products derived from this 17 * software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 package org.openimaj.image.processing.restoration.inpainting; 31 32 import java.util.Collection; 33 34 import org.openimaj.image.FImage; 35 import org.openimaj.image.Image; 36 import org.openimaj.image.pixel.Pixel; 37 import org.openimaj.image.pixel.PixelSet; 38 import org.openimaj.image.processor.ImageProcessor; 39 40 /** 41 * Interface defining an implementation of an inpainting algorithm. Inpainting 42 * algorithms are {@link ImageProcessor}s, but it is expected that a mask 43 * showing which pixels need to be painted is provided before the 44 * {@link #processImage(Image)} call. 45 * <p> 46 * {@link Inpainter}s are necessarily not thread safe, but implementations are 47 * expected to be reusable once the mask has been reset. <strong>It is expected 48 * that a call to one of the <code>setMask</code> methods is made before every 49 * call to {@link #processImage(Image)}.</strong> 50 * 51 * @author Jonathon Hare (jsh2@ecs.soton.ac.uk) 52 * 53 * @param <IMAGE> 54 * The type of image that this processor can process 55 */ 56 public interface Inpainter<IMAGE extends Image<?, IMAGE>> 57 extends 58 ImageProcessor<IMAGE> 59 { 60 /** 61 * Set the mask. The mask configures which pixels need to be painted. 62 * 63 * @param mask 64 * the mask image; should be binary, with 1 values where painting 65 * needs to occur. 66 */ 67 public void setMask(FImage mask); 68 69 /** 70 * Set the mask. The mask configures which pixels need to be painted. 71 * 72 * @param width 73 * the mask width 74 * @param height 75 * the mask height 76 * @param mask 77 * the mask pixels 78 */ 79 public void setMask(int width, int height, Collection<? extends Iterable<Pixel>> mask); 80 81 /** 82 * Set the mask. The mask configures which pixels need to be painted. 83 * 84 * @param width 85 * the mask width 86 * @param height 87 * the mask height 88 * @param mask 89 * the mask pixels 90 */ 91 public void setMask(int width, int height, PixelSet... mask); 92 93 /** 94 * Inpaint the given image, painting all the mask pixels set by a prior call 95 * to {@link #setMask(int,int,Collection)}, {@link #setMask(FImage)} or 96 * {@link #setMask(int,int,PixelSet...)} 97 * 98 * @param image 99 * the image to perform inpainting on 100 */ 101 @Override 102 public void processImage(IMAGE image); 103 }