Android OpenCV - получение расстояния между двумя нечеткими линиями

Как уже упоминалось, я пытаюсь получить расстояние между двумя нечеткими линиями на изображении с применением обнаружения краев. В качестве примера, пожалуйста, посмотрите на изображение ниже для пояснения.

введите здесь описание изображения

Как видите, линии неправильные. В идеале я хотел бы получить самые дальние точки от каждой строки, как показано выше, и рассчитать их расстояние от этого. Возможно ли это с OpenCV? Я знаю, что могу использовать функцию величины для правильного расчета расстояния, но проблема возникает, когда на самом деле пытаются найти самые дальние точки.

У кого-нибудь есть идеи относительно того, как я могу это сделать?


person Zy0n    schedule 05.08.2015    source источник
comment
Если вы можете удалить одну из строк с изображения, вы можете использовать distanceTransform для вычисления расстояния от всех пикселей в другой строке; затем вы прошли через все пиксели в другой строке и нашли тот, который имеет наибольшее значение преобразования расстояния до другой строки.   -  person Andy Turner    schedule 06.08.2015
comment
Хм, ты подал мне идею. Я мог бы сделать это для каждой строки отдельно, а затем взять среднее максимальное расстояние друг от друга. Вы понимаете, что я имею в виду? Я ужасно объясняю потоки идей, которые приходят на ум..   -  person Zy0n    schedule 06.08.2015
comment
Вам не нужно делать это для каждой строки отдельно: вам нужно сделать это только для одной строки или другой. Результат должен быть симметричным.   -  person Andy Turner    schedule 06.08.2015


Ответы (1)


Если вы знаете две точки на этих линиях, вы можете рассчитать расстояние, используя приведенный ниже код в OpenCV.

public double euclideanDistance(Point a, Point b){
    double distance = 0.0;
    try{
        if(a != null && b != null){
            double xDiff = a.x - b.x;
            double yDiff = a.y - b.y;
            distance = Math.sqrt(Math.pow(xDiff,2) + Math.pow(yDiff, 2));
        }
    }catch(Exception e){
        System.err.println("Something went wrong in euclideanDistance function in "+Utility.class+" "+e.getMessage());
    }
    return distance;
}

Надеюсь, это поможет.

person Karthik N G    schedule 27.06.2016