Алгоритм обнаружения углов

Сегодня попробовал себя в обнаружении углов в C #. Я добавил туда пример изображения. Изображение выполнено в черно-белом цвете и имеет внешнюю и внутреннюю формы.

пример изображения

Меня волнует только внешняя форма, а не внутренняя. Попытка обнаружения углов Харриса ни к чему не привела, поэтому я подумал, что могу поместить каждый пиксель в простую структуру с двумя целыми числами, подобную этой:

struct coordinates
{
    public int x, y;
    public coordinates(int xx, int yy)
    {
        this.x = xx;
        this.y = yy;
    }
};

но попытка получить самый большой и самый низкий, самый правый и левый тупель снова потерпела неудачу и вернула что-то вроде этого (красная линия соединяет верхний левый, верхний правый и нижний левый):

пример изображения обработано

Я думаю, это происходит из-за неполной формы прямоугольника (левый верхний и нижний углы закруглены) и неровной формы (правый верхний угол правый, но правый нижний угол заканчивается где-то на 3/4 в нижнем правом углу).

Есть идеи, как я могу решить эту проблему? Использование верхнего / нижнего левого угла в качестве некруглых углов подойдет мне (и даже лучше), поэтому в итоге у меня получается полный прямоугольник вокруг этой белой формы.


person user3079834    schedule 12.01.2014    source источник
comment
вам нужны координаты фигуры или только сама фигура? (= контур)   -  person wondra    schedule 12.01.2014
comment
Вы используете EmguCV или реализуете свои собственные алгоритмы?   -  person phyrox    schedule 13.01.2014
comment
Я использую свою реализацию, и мне нужно только согласовать углы фигуры.   -  person user3079834    schedule 20.01.2014


Ответы (1)


Сделайте грубое преобразование, найдите доминирующие линии и вычислите их пересечения. Это улучшит ваш результат, хотя не гарантирует, что найденная форма содержит все белые пиксели. Это требуется?

person Sebastian Roether    schedule 12.01.2014