Я пытаюсь рассчитать максимальную разницу между двумя ранее определенными точками локальных объектов. Моя ключевая точка определяется как x, y, масштаб, ориентация и собственный вектор, и я использую библиотеку OpenImaj в Java в качестве основы. (http://openimaj.org/apidocs/org/openimaj/image/feature/local/keypoints/Keypoint.html)
Игнорируя масштаб, чтобы рассчитать максимальную разницу между двумя ключевыми точками на изображении, я использую следующее.
private double maxDiff(int width, int height) {
Keypoint p1 = new Keypoint(0, 0, 0, 0, null);
Keypoint p2 = new Keypoint(width, height, (float) (Math.PI * 2), 0, null);//scale neglected
return calculateDiff(new Pair<>(p1, p2));
}
private double calculateDiff(Pair<Keypoint> pair) {
Keypoint p1 = pair.getFirstObject();
Keypoint p2 = pair.getSecondObject();
return Math.sqrt(Math.pow((p1.x - p2.x), 2) + Math.pow((p1.y - p2.y), 2)
+ Math.pow((p1.scale - p2.scale), 2) + Math.pow((p1.ori - p2.ori), 2));
}
Это предполагает две точки, расположенные в противоположных углах изображений и имеющие максимальную ориентацию. Я буду рассчитывать евклидово расстояние по этим двум точкам.
В приведенном выше алгоритме я использую Math.PI * 2 в качестве максимальной ориентации. Я делаю это правильно или фактическая максимальная ориентация только Math.PI?