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.feature.global; 31 32 import org.openimaj.citation.annotation.Reference; 33 import org.openimaj.citation.annotation.ReferenceType; 34 import org.openimaj.feature.DoubleFV; 35 import org.openimaj.feature.DoubleFVComparison; 36 import org.openimaj.feature.FeatureVectorProvider; 37 import org.openimaj.image.FImage; 38 import org.openimaj.image.analyser.ImageAnalyser; 39 import org.openimaj.image.pixel.statistics.BlockHistogramModel; 40 import org.openimaj.math.statistics.distribution.MultidimensionalHistogram; 41 42 /** 43 * Implementation of the intensity balance algorithm described by Yeh et al. 44 * <p> 45 * The intensity balance measures how different the intensity is on the left 46 * side of the image compared to the right. A balance of zero means exactly 47 * balanced. Higher values are produced for more unbalanced images. 48 * 49 * @author Jonathon Hare (jsh2@ecs.soton.ac.uk) 50 */ 51 @Reference( 52 type = ReferenceType.Inproceedings, 53 author = { "Che-Hua Yeh", "Yuan-Chen Ho", "Brian A. Barsky", "Ming Ouhyoung" }, 54 title = "Personalized Photograph Ranking and Selection System", 55 year = "2010", 56 booktitle = "Proceedings of ACM Multimedia", 57 pages = { "211", "220" }, 58 month = "October", 59 customData = { "location", "Florence, Italy" }) 60 public class LRIntensityBalance implements ImageAnalyser<FImage>, FeatureVectorProvider<DoubleFV> { 61 int nbins = 64; 62 double balance; 63 64 /** 65 * Construct with the default 64 intensity histogram bins. 66 */ 67 public LRIntensityBalance() { 68 } 69 70 /** 71 * Construct with the given number of intensity histogram bins. 72 * 73 * @param nbins 74 * number of intensity histogram bins 75 */ 76 public LRIntensityBalance(int nbins) { 77 this.nbins = nbins; 78 } 79 80 @Override 81 public DoubleFV getFeatureVector() { 82 return new DoubleFV(new double[] { balance }); 83 } 84 85 /* 86 * (non-Javadoc) 87 * 88 * @see 89 * org.openimaj.image.analyser.ImageAnalyser#analyseImage(org.openimaj.image 90 * .Image) 91 */ 92 @Override 93 public void analyseImage(FImage image) { 94 final BlockHistogramModel hm = new BlockHistogramModel(2, 1, nbins); 95 96 hm.estimateModel(image); 97 98 final MultidimensionalHistogram left = hm.histograms[0][0]; 99 final MultidimensionalHistogram right = hm.histograms[0][1]; 100 101 balance = left.compare(right, DoubleFVComparison.CHI_SQUARE); 102 } 103 }