package net.semanticmetadata.lire.imageanalysis.features.local.shapecontext; import net.semanticmetadata.lire.imageanalysis.features.LireFeature; import net.semanticmetadata.lire.imageanalysis.features.LocalFeature; import net.semanticmetadata.lire.utils.MetricsUtils; import net.semanticmetadata.lire.utils.SerializationUtils; /** * Created by Lukas Knoch on 23.09.15. * This class contains the histogram representation of the ShapeContext feature. It is actually a global feature aggregated * by many local features, but needs to be a local feature as that is required by the current indexer and searcher configuration. */ public class ShapemeHistogram implements net.semanticmetadata.lire.imageanalysis.features.LocalFeature { int[] histogram; @Override public String getFeatureName() { return ShapeContext.class.getSimpleName(); } @Override public String getFieldName() { return ShapeContext.SHAPE_CONTEXT_FIELD; } @Override public byte[] getByteArrayRepresentation() { return net.semanticmetadata.lire.utils.SerializationUtils.toByteArray(histogram); } @Override public void setByteArrayRepresentation(byte[] bytes) { histogram = net.semanticmetadata.lire.utils.SerializationUtils.toIntArray(bytes); } @Override public void setByteArrayRepresentation(byte[] bytes, int i, int i1) { histogram = net.semanticmetadata.lire.utils.SerializationUtils.toIntArray(bytes); } @Override public double getDistance(net.semanticmetadata.lire.imageanalysis.features.LireFeature lireFeature) { if(!(lireFeature instanceof ShapemeHistogram)){ throw new RuntimeException("not implemented"); } return net.semanticmetadata.lire.utils.MetricsUtils.distL1(((ShapemeHistogram) lireFeature).histogram, histogram); } @Override public double[] getFeatureVector() { double[] tmpHist = new double[histogram.length]; for (int i = 0; i < histogram.length; i++) { tmpHist[i] = histogram[i]; } return tmpHist; } @Override public double getX() { throw new UnsupportedOperationException(); } @Override public double getY() { throw new UnsupportedOperationException(); } @Override public double getSize() { throw new UnsupportedOperationException(); } @Override public Class<?> getClassOfExtractor() { return ShapeContextExtractor.class; } }