package resa.evaluation.topology.tomVLD;
import org.bytedeco.javacpp.opencv_core;
import org.bytedeco.javacpp.opencv_features2d;
/**
*
* <p>Descriptors and keypoints are precomputed before matching occurs, so that there is no need to extract features
* and key points each time. Priority is used to compare the value of the logo templates. The higher the priority,
* the earlier this logo is checked for presence on the patch. Also logo templates with higher priority have less
* chance to be removed from the list of logo templates. Finally, each logo template has its own identifier, so
* that we can distinguish between them.</p>
* <p>How can we uniquely identify logo template? Since any logo template was
* extracted from some frame's patch, each logo template is identified by patchIdentifier. patchIdentifier is the
* identifier of the patch from which this template was extracted. This is only applied to dynamic list of templates
* that is created during real-time detection. Those that were there from the beginning (original logo templates,
* loaded during initialization) have not been extracted from the video, and hence their patch identifier have
* negative frameId and null rectangle.</p>
*/
public class LogoTemplate implements Comparable<LogoTemplate> {
opencv_core.Mat imageMat;
opencv_core.Mat descriptor;
opencv_features2d.KeyPoint keyPoints;
Serializable.PatchIdentifier identifier;
public int priority;
/* Creates template with given image, key points, descriptor, and identifier */
public LogoTemplate(opencv_core.Mat mat, opencv_features2d.KeyPoint keyPoints, opencv_core.Mat descriptor, Serializable.PatchIdentifier identifier)
{
this.imageMat = mat;
this.descriptor = descriptor;
this.keyPoints = keyPoints;
this.identifier = identifier;
priority = 0;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
LogoTemplate that = (LogoTemplate) o;
if (!identifier.equals(that.identifier)) return false;
return true;
}
@Override
public int hashCode() {
return identifier.hashCode();
}
public String toString() {
return "" + priority;
}
@Override
public int compareTo(LogoTemplate o) {
if (this.priority > o.priority) return -1;
return 1;
}
}