Как получить позиции совпадающих точек с помощью дескрипторов Brute-Force Matching / SIFT

Существуют небольшие различия в зависимости от того, говорите ли вы о «примитивах» или «типах объектов»; то же самое можно сказать, если вы говорите о «статических» или «нестатических» членах; вы можете также смешать все вышеперечисленное ...

Вот пример (вы можете запустить его):

public final class MyEqualityTest
{
    public static void main( String args[] )
    {
        String s1 = new String( "Test" );
        String s2 = new String( "Test" );

        System.out.println( "\n1 - PRIMITIVES ");
        System.out.println( s1 == s2 ); // false
        System.out.println( s1.equals( s2 )); // true

        A a1 = new A();
        A a2 = new A();

        System.out.println( "\n2 - OBJECT TYPES / STATIC VARIABLE" );
        System.out.println( a1 == a2 ); // false
        System.out.println( a1.s == a2.s ); // true
        System.out.println( a1.s.equals( a2.s ) ); // true

        B b1 = new B();
        B b2 = new B();

        System.out.println( "\n3 - OBJECT TYPES / NON-STATIC VARIABLE" );
        System.out.println( b1 == b2 ); // false
        System.out.println( b1.getS() == b2.getS() ); // false
        System.out.println( b1.getS().equals( b2.getS() ) ); // true
    }
}

final class A
{
    // static
    public static String s;
    A()
    {
        this.s = new String( "aTest" );
    }
}

final class B
{
    private String s;
    B()
    {
        this.s = new String( "aTest" );
    }

    public String getS()
    {
        return s;
    }

}

Вы можете сравнить объяснения для «==» (Equality Оператор) и ".equals (...)" (метод в классе java.lang.Object) через эти ссылки:

0
задан hajo 15 January 2019 в 17:19
поделиться

1 ответ

Поскольку вы не указали код, я отвечаю на ваш вопрос, основываясь на коде в руководстве. По сути, ключевые точки - это точки, обнаруженные алгоритмом SIFT с поворотом, масштабом и положением x, y, а дескрипторы - это просто векторы объектов, используемые для их сопоставления. В переменной совпадений у вас есть набор совпадений между дескрипторами (DMatch). Ключевые точки расположены в kp1 и kp2. Чтобы найти две точки (p1, p2), которые соответствуют, используйте код, подобный этому:

for match in matches:
  p1 = kp1[match.queryIdx].pt
  p2 = kp2[match.trainIdx].pt
0
ответ дан Tim Bradley 15 January 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: