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 }