我正在尝试计算两个先前定义的局部特征关键点之间的最大差异。我的关键点定义为x,y,比例,方向和本征向量,我使用Java中的OpenImaj库作为基础。 (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?