Skip to content

Commit

Permalink
Unified behavior for audio / 3d files
Browse files Browse the repository at this point in the history
Unified code for all features wrt tracing entry / exit & timing
  • Loading branch information
silvanheller committed Jul 16, 2019
1 parent 1f34f60 commit f4e766a
Show file tree
Hide file tree
Showing 46 changed files with 404 additions and 387 deletions.
21 changes: 4 additions & 17 deletions src/org/vitrivr/cineast/core/features/AverageColor.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.vitrivr.cineast.core.features;

import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.vitrivr.cineast.core.color.ColorConverter;
Expand All @@ -13,7 +12,6 @@
import org.vitrivr.cineast.core.data.segments.SegmentContainer;
import org.vitrivr.cineast.core.features.abstracts.AbstractFeatureModule;
import org.vitrivr.cineast.core.util.ColorUtils;
import org.vitrivr.cineast.core.util.TimeHelper;

public class AverageColor extends AbstractFeatureModule {

Expand All @@ -30,30 +28,19 @@ public static ReadableLabContainer getAvg(MultiImage img) {

@Override
public void processSegment(SegmentContainer shot) {
TimeHelper.tic();
LOGGER.traceEntry();
if (shot.getAvgImg() == MultiImage.EMPTY_MULTIIMAGE) {
return;
}
if (!phandler.idExists(shot.getId())) {
if(shot.getAvgImg()==MultiImage.EMPTY_MULTIIMAGE){
LOGGER.debug("Empty Image, skipping");
LOGGER.traceExit();
return;
}
ReadableLabContainer avg = getAvg(shot.getAvgImg());
persist(shot.getId(), avg);
LOGGER.debug("AverageColor.processShot() for segment {} done in {}",
shot.getId(), TimeHelper.toc());
}
LOGGER.traceExit();
}

@Override
public List<ScoreElement> getSimilar(SegmentContainer sc, ReadableQueryConfig qc) {
LOGGER.traceEntry();
long start = System.currentTimeMillis();
ReadableLabContainer query = getAvg(sc.getAvgImg());
List<ScoreElement> _return = getSimilar(ReadableFloatVector.toArray(query), qc);
LOGGER.debug("AverageColor.getSimilar() done in {} ms", (System.currentTimeMillis() - start));
return LOGGER.traceExit(_return);
return getSimilar(ReadableFloatVector.toArray(query), qc);
}

}
9 changes: 8 additions & 1 deletion src/org/vitrivr/cineast/core/features/AverageColorARP44.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package org.vitrivr.cineast.core.features;

import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.vitrivr.cineast.core.config.QueryConfig;
import org.vitrivr.cineast.core.config.ReadableQueryConfig;
import org.vitrivr.cineast.core.data.FloatVector;
import org.vitrivr.cineast.core.data.MultiImage;
import org.vitrivr.cineast.core.data.Pair;
import org.vitrivr.cineast.core.data.ReadableFloatVector;
import org.vitrivr.cineast.core.data.score.ScoreElement;
Expand All @@ -14,12 +16,17 @@

public class AverageColorARP44 extends AbstractFeatureModule {

private static final Logger LOGGER = LogManager.getLogger();

public AverageColorARP44() {
super("features_AverageColorARP44", 115854f / 4f, 96);
}

@Override
public void processSegment(SegmentContainer shot) {
if (shot.getAvgImg() == MultiImage.EMPTY_MULTIIMAGE) {
return;
}
if (!phandler.idExists(shot.getId())) {
Pair<FloatVector, float[]> p = ARPartioner.partitionImage(shot.getAvgImg(), 4, 4);
persist(shot.getId(), p.first);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package org.vitrivr.cineast.core.features;

import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.vitrivr.cineast.core.config.QueryConfig;
import org.vitrivr.cineast.core.config.ReadableQueryConfig;
import org.vitrivr.cineast.core.data.FloatVector;
import org.vitrivr.cineast.core.data.MultiImage;
import org.vitrivr.cineast.core.data.Pair;
import org.vitrivr.cineast.core.data.ReadableFloatVector;
import org.vitrivr.cineast.core.data.score.ScoreElement;
Expand All @@ -15,23 +17,26 @@

public class AverageColorARP44Normalized extends AbstractFeatureModule {

private static final Logger LOGGER = LogManager.getLogger();

public AverageColorARP44Normalized() {
super("features_AverageColorARP44Normalized", 115854f / 4f, 96);
}

@Override
public void processSegment(SegmentContainer shot) {
if (shot.getAvgImg() == MultiImage.EMPTY_MULTIIMAGE) {
return;
}
if (!phandler.idExists(shot.getId())) {
Pair<FloatVector, float[]> p = ARPartioner
.partitionImage(ImageHistogramEqualizer.getEqualized(shot.getAvgImg()), 4, 4);
Pair<FloatVector, float[]> p = ARPartioner.partitionImage(ImageHistogramEqualizer.getEqualized(shot.getAvgImg()), 4, 4);
persist(shot.getId(), p.first);
}
}

@Override
public List<ScoreElement> getSimilar(SegmentContainer sc, ReadableQueryConfig qc) {
Pair<FloatVector, float[]> p = ARPartioner
.partitionImage(ImageHistogramEqualizer.getEqualized(sc.getAvgImg()), 4, 4);
Pair<FloatVector, float[]> p = ARPartioner.partitionImage(ImageHistogramEqualizer.getEqualized(sc.getAvgImg()), 4, 4);
return getSimilar(ReadableFloatVector.toArray(p.first),
new QueryConfig(qc).setDistanceWeights(p.second));
}
Expand Down
8 changes: 8 additions & 0 deletions src/org/vitrivr/cineast/core/features/AverageColorCLD.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.vitrivr.cineast.core.config.ReadableQueryConfig;
import org.vitrivr.cineast.core.data.FloatVector;
import org.vitrivr.cineast.core.data.MultiImage;
import org.vitrivr.cineast.core.data.ReadableFloatVector;
import org.vitrivr.cineast.core.data.score.ScoreElement;
import org.vitrivr.cineast.core.data.segments.SegmentContainer;
Expand All @@ -12,12 +15,17 @@

public class AverageColorCLD extends AbstractFeatureModule {

private static final Logger LOGGER = LogManager.getLogger();

public AverageColorCLD() {
super("features_AverageColorCLD", 1960f / 4f, 12);
}

@Override
public void processSegment(SegmentContainer shot) {
if (shot.getAvgImg() == MultiImage.EMPTY_MULTIIMAGE) {
return;
}
if (!phandler.idExists(shot.getId())) {
FloatVector fv = ColorLayoutDescriptor.calculateCLD(shot.getAvgImg());
persist(shot.getId(), fv);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package org.vitrivr.cineast.core.features;

import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.vitrivr.cineast.core.config.ReadableQueryConfig;
import org.vitrivr.cineast.core.data.FloatVector;
import org.vitrivr.cineast.core.data.MultiImage;
import org.vitrivr.cineast.core.data.ReadableFloatVector;
import org.vitrivr.cineast.core.data.score.ScoreElement;
import org.vitrivr.cineast.core.data.segments.SegmentContainer;
Expand All @@ -13,12 +15,17 @@

public class AverageColorCLDNormalized extends AbstractFeatureModule {

private static final Logger LOGGER = LogManager.getLogger();

public AverageColorCLDNormalized() {
super("features_AverageColorCLDNormalized", 1960f / 4f, 12);
}

@Override
public void processSegment(SegmentContainer shot) {
if (shot.getAvgImg() == MultiImage.EMPTY_MULTIIMAGE) {
return;
}
if (!phandler.idExists(shot.getId())) {
FloatVector fv = ColorLayoutDescriptor
.calculateCLD(ImageHistogramEqualizer.getEqualized(shot.getAvgImg()));
Expand All @@ -28,8 +35,7 @@ public void processSegment(SegmentContainer shot) {

@Override
public List<ScoreElement> getSimilar(SegmentContainer sc, ReadableQueryConfig qc) {
FloatVector query = ColorLayoutDescriptor
.calculateCLD(ImageHistogramEqualizer.getEqualized(sc.getAvgImg()));
FloatVector query = ColorLayoutDescriptor.calculateCLD(ImageHistogramEqualizer.getEqualized(sc.getAvgImg()));
return getSimilar(ReadableFloatVector.toArray(query), qc);
}

Expand Down
5 changes: 3 additions & 2 deletions src/org/vitrivr/cineast/core/features/AverageColorGrid8.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,14 @@ protected AverageColorGrid8(String tableName, float maxDist) {

@Override
public void processSegment(SegmentContainer shot) {
LOGGER.traceEntry();
if (shot.getAvgImg() == MultiImage.EMPTY_MULTIIMAGE) {
return;
}
if (!phandler.idExists(shot.getId())) {
MultiImage avgimg = shot.getAvgImg();

persist(shot.getId(), partition(avgimg).first);
}
LOGGER.traceExit();
}

protected static Pair<FloatVector, float[]> partition(MultiImage img) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.vitrivr.cineast.core.config.QueryConfig;
import org.vitrivr.cineast.core.config.ReadableQueryConfig;
import org.vitrivr.cineast.core.data.FloatVector;
Expand All @@ -14,12 +16,17 @@

public class AverageColorGrid8Normalized extends AverageColorGrid8 {

private static final Logger LOGGER = LogManager.getLogger();

public AverageColorGrid8Normalized() {
super("features_AverageColorGrid8Normalized", 12595f / 4f);
}

@Override
public void processSegment(SegmentContainer shot) {
if (shot.getAvgImg() == MultiImage.EMPTY_MULTIIMAGE) {
return;
}
if (!phandler.idExists(shot.getId())) {
MultiImage avgimg = ImageHistogramEqualizer.getEqualized(shot.getAvgImg());

Expand All @@ -30,8 +37,7 @@ public void processSegment(SegmentContainer shot) {
@Override
public List<ScoreElement> getSimilar(SegmentContainer sc, ReadableQueryConfig qc) {
Pair<FloatVector, float[]> p = partition(ImageHistogramEqualizer.getEqualized(sc.getAvgImg()));
return getSimilar(ReadableFloatVector.toArray(p.first),
new QueryConfig(qc).setDistanceWeights(p.second));
return getSimilar(ReadableFloatVector.toArray(p.first), new QueryConfig(qc).setDistanceWeights(p.second));
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package org.vitrivr.cineast.core.features;

import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.vitrivr.cineast.core.config.QueryConfig;
import org.vitrivr.cineast.core.config.ReadableQueryConfig;
import org.vitrivr.cineast.core.data.FloatVector;
Expand All @@ -14,12 +15,17 @@

public class AverageColorGrid8Reduced11 extends AverageColorGrid8 {

private static final Logger LOGGER = LogManager.getLogger();

public AverageColorGrid8Reduced11() {
super("features_AverageColorGrid8Reduced11", 12595f / 4f);
}

@Override
public void processSegment(SegmentContainer shot) {
if (shot.getAvgImg() == MultiImage.EMPTY_MULTIIMAGE) {
return;
}
if (!phandler.idExists(shot.getId())) {
MultiImage avgimg = ColorReductionUtil.quantize11(shot.getAvgImg());

Expand All @@ -30,8 +36,7 @@ public void processSegment(SegmentContainer shot) {
@Override
public List<ScoreElement> getSimilar(SegmentContainer sc, ReadableQueryConfig qc) {
Pair<FloatVector, float[]> p = partition(ColorReductionUtil.quantize11(sc.getAvgImg()));
return getSimilar(ReadableFloatVector.toArray(p.first),
new QueryConfig(qc).setDistanceWeights(p.second));
return getSimilar(ReadableFloatVector.toArray(p.first), new QueryConfig(qc).setDistanceWeights(p.second));
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package org.vitrivr.cineast.core.features;

import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.vitrivr.cineast.core.config.QueryConfig;
import org.vitrivr.cineast.core.config.ReadableQueryConfig;
import org.vitrivr.cineast.core.data.FloatVector;
Expand All @@ -14,12 +15,17 @@

public class AverageColorGrid8Reduced15 extends AverageColorGrid8 {

private static final Logger LOGGER = LogManager.getLogger();

public AverageColorGrid8Reduced15() {
super("features_AverageColorGrid8Reduced15", 12595f / 4f);
}

@Override
public void processSegment(SegmentContainer shot) {
if (shot.getAvgImg() == MultiImage.EMPTY_MULTIIMAGE) {
return;
}
if (!phandler.idExists(shot.getId())) {
MultiImage avgimg = ColorReductionUtil.quantize15(shot.getAvgImg());

Expand All @@ -30,8 +36,7 @@ public void processSegment(SegmentContainer shot) {
@Override
public List<ScoreElement> getSimilar(SegmentContainer sc, ReadableQueryConfig qc) {
Pair<FloatVector, float[]> p = partition(ColorReductionUtil.quantize15(sc.getAvgImg()));
return getSimilar(ReadableFloatVector.toArray(p.first),
new QueryConfig(qc).setDistanceWeights(p.second));
return getSimilar(ReadableFloatVector.toArray(p.first), new QueryConfig(qc).setDistanceWeights(p.second));
}

}
10 changes: 3 additions & 7 deletions src/org/vitrivr/cineast/core/features/AverageColorRaster.java
Original file line number Diff line number Diff line change
Expand Up @@ -154,15 +154,13 @@ Pair<float[], float[]> computeRaster(SegmentContainer shot) {

@Override
public void processSegment(SegmentContainer shot) {
LOGGER.traceEntry();
if (shot.getAvgImg() == MultiImage.EMPTY_MULTIIMAGE) {
return;
}
if (!phandler.idExists(shot.getId())) {

Pair<float[], float[]> pair = computeRaster(shot);

persist(shot.getId(), new FloatVectorImpl(pair.first), new FloatVectorImpl(pair.second));

}
LOGGER.traceExit();
}

protected void persist(String shotId, ReadableFloatVector fs1, ReadableFloatVector fs2) {
Expand Down Expand Up @@ -283,9 +281,7 @@ private List<ScoreElement> getSimilar(float[] raster, float[] hist, ReadableQuer

@Override
public List<ScoreElement> getSimilar(SegmentContainer sc, ReadableQueryConfig qc) {

Pair<float[], float[]> pair = computeRaster(sc);

return getSimilar(pair.second, pair.first, qc);
}

Expand Down
9 changes: 5 additions & 4 deletions src/org/vitrivr/cineast/core/features/AverageFuzzyHist.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.vitrivr.cineast.core.config.QueryConfig;
import org.vitrivr.cineast.core.config.ReadableQueryConfig;
import org.vitrivr.cineast.core.config.ReadableQueryConfig.Distance;
import org.vitrivr.cineast.core.data.MultiImage;
import org.vitrivr.cineast.core.data.ReadableFloatVector;
import org.vitrivr.cineast.core.data.score.ScoreElement;
import org.vitrivr.cineast.core.data.segments.SegmentContainer;
Expand All @@ -24,19 +25,19 @@ public AverageFuzzyHist() {

@Override
public void processSegment(SegmentContainer shot) {
LOGGER.traceEntry();
if (shot.getAvgImg() == MultiImage.EMPTY_MULTIIMAGE) {
return;
}
if (!phandler.idExists(shot.getId())) {
FuzzyColorHistogram fch = FuzzyColorHistogramCalculator
.getHistogramNormalized(shot.getAvgImg().getBufferedImage());
persist(shot.getId(), fch);
}
LOGGER.traceExit();
}

@Override
public List<ScoreElement> getSimilar(SegmentContainer sc, ReadableQueryConfig qc) {
FuzzyColorHistogram query = FuzzyColorHistogramCalculator
.getHistogramNormalized(sc.getAvgImg().getBufferedImage());
FuzzyColorHistogram query = FuzzyColorHistogramCalculator.getHistogramNormalized(sc.getAvgImg().getBufferedImage());
return getSimilar(ReadableFloatVector.toArray(query), qc);
}

Expand Down
Loading

0 comments on commit f4e766a

Please sign in to comment.