2011-09-22 2 views
1

Я использую приложение примера обнаружения формы Emgu для обнаружения прямоугольников на заданном изображении. Размеры измененного изображения, по-видимому, влияют на количество обнаруженных фигур, даже если соотношение сторон остается неизменным. Вот что я имею в виду:Обнаружение формы EmguCV, подверженное влиянию размера изображения

Using (400,400), actual img size == 342,400

Using (520,520), actual img size == 445,520

Почему это так? И как определить оптимальное значение?

Благодаря

ответ

3

Я ответил на свой пост на EMGU, но понял, что вы не проверили назад, но это он. Обнаружение формы работает по принципу маловероятных совпадений, которые предотвращают множество ложных классификаций. Это справедливо для многих алгоритмов обработки изображений. В основном есть no идеальная настройка, и дизайнер должен выбрать наиболее подходящие настройки для получения наиболее желаемых результатов. И.Е. соответствуют большинству объектов, не говоря о том, что их больше, чем есть на самом деле.

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

Image<Gray, Byte> cannyEdges = gray.Canny(cannyThreshold, cannyThresholdLinking); 

Посмотрите на свое изображение меньшего размера, посмотрите, какая разница между обнаруженными прямоугольниками и тем, что нет. Вам может быть недостает и край или угол, поэтому он не классифицируется. Если вы настраиваете cannyThreshold и наблюдаете за результатами, если это хорошо, то держите его :) если плохо :(вернитесь к исходному значению. После того как вы удовлетворены, отрегулируйте cannyThresholdLinking и наблюдайте.

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

Если они похожи, вероятно, это черно-белое изображение, которое вам нужно перейти к обнаружению линий Hough.

 LineSegment2D[] lines = cannyEdges.HoughLinesBinary(
      1, //Distance resolution in pixel-related units 
      Math.PI/45.0, //Angle resolution measured in radians. 
      20, //threshold 
      30, //min Line width 
      10 //gap between lines 
      )[0]; //Get the lines from the first channel 

Использовать тот же метод настройки одного значения в время и наблюдение за выходом, вы, надеюсь, найдете нужные вам настройки. Никогда не прыгайте обеими ногами и не изменяйте все значения, поскольку вы никогда не узнаете, улучшаете ли вы точность или нет. Наконец, если все остальное не смотреть на раздел, который проверяет результаты HOUGH для прямоугольника

     if (angle < 80 || angle > 100) 
         { 
          isRectangle = false; 
          break; 
         } 

Меньше переменных для изменения в Хаф должен делать всю работу за вас. но все же все это могло бы сложиться здесь.

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

Приветствия

Chris

+0

Благодаря ... по крайней мере, это представляет собой путь, который я мог бы следовать. Я согласен с тем, что большинству алгоритмов обнаружения изображений нужна какая-то настройка; однако я никогда не сталкивался с тем, что зависит от размера изображения, а не от соотношения сторон. В любом случае обнаружение края не влияет на результат (по крайней мере, для этого изображения). Будет обновляться после проверки других параметров. – Nav

+0

В этом случае вы фактически увеличиваете размер объектов, которые ищете.Очень немногие алгоритмы фактически зависят от размера или отношения изображения, но фактически от размера объекта внутри. Возьмем ваш пример: необнаруженный Четырехугольник - это приблизительно Rectangle (165,97,240,114), площадь которого составляет 27360 пикселей. Теперь в вашем втором изображении тот же Квадратулярный прямоугольник (214, 129, 310, 146), который является увеличенной площадью 45'260 пикселей. Это увеличение x1.65 теперь я уверен, что вы можете понять, почему более крупный обнаружен. Изменение кода линии Hough должно исправить вашу проблему, если нет, я посмотрю, удачи – Chris

+0

Очевидно, что в примере приложения строки Hough не используются для определения формы ... контуры. Если число pts равно 4 => прямоугольник и т. Д. Кроме того, и это была моя проблема, угол ограничивает количество обнаруженных прямоугольников. Любой наклон более чем на 10 градусов (даже если все линии находятся под одним углом), и форма отбрасывается. Я могу поиграть с этим сейчас :). Существует еще одна зловещая вещь, хотя ... фигуры обнаруживаются дважды:/ – Nav

Смежные вопросы