привет есть изо: http://savepic.ru/1600353.png необходимо определить координаты углов каждого квадрата. есть известные алгоритмы для поиска или работы с областями на изображении. а то выдумывать велосипед не хочется.
ring4 Ну так и называются угловой детектор. К примеру угловой детектор Хариса. Правда для вашей задачи не годится. Лучше выдумать.
Pavia спасибо, про детектор не знал, посмотрю. а то что придется выдумывать уже все чаще прихожу к этой мысли
ring4 Опишите контур попиксельно. Тогда точка в которой вектор меняется будет являться углом(находиться в вершине угла прим.). http://www.wasm.ru/forum/viewtopic.php?id=29695&p=1
это ясно. для квадратов анализатор написал, там все просто, завтра попробую на свежую голову для мноугольников и прочих фигур. еще попробую скурить многослойные текстуры, может тогда будет вообще легко.
В данном случае достаточно просканировать по вертикали и горизонтали, в поиске вертикальных и горизонтальных линий, и далее найти все их пересечения.
Давайте прикинем эффективность. Пусть дан прямоугольник. Число его пиксель: Sf = dX * dY Является суммой числа пиксель составляющих внутренний сектор: Si = (dX - 2) * (dY - 2) и границу: Se = 2 * dX + 2 * dY, тоесть Sf = Si + Se. При поиске пересечений нужно перечислить все пиксели региона. При использовании способа(4) только границу. Тогда число лишних пиксель при поиске пересечений: Sp = Sf - Se = Si. Допустим имеется квадрат из 100 пиксель. Тогда лишнее число пиксель при енумерации: 100*100 - (2*100 + 2*100) = 9600 пиксель, это 96% от общего числа пиксель.
Пробежаться слева-направо сверху-вниз квадратиком 2х2. Если внутри квадратика 3 черных и 1 белый, или наоборот, то это угол.
Пожалуйста не пишите А&O в хипе. Я специально его не читаю. Идеальный алгоритм: нужно проследить обрыв горизонтальных линий и по ним найти начало и конец. Кто понял - молодец. (Прям как палка о двух концах.)
_DEN_ прикольно (идеально) кратчайший путь от одной точки к другой - прямая линия. PS: точки не телепортируют
JCronuz Ваш этот матан никому не нужен, так как не имеет никакого отношения к решению задачи. Галок можно и без матчасти на битмапе наставить.
Clerk Ну зачем за всех говорить, Вам не нужен и ладно, может быть другим будет интересно узнать про разбор изображений.
Откопал у себя древнюю рукопись с алго заливки замкнутой фигуры, по сути это выделение на изображении всех областей методом в #4. (V - вектор, X и Y - координаты пикселя). o Если V = Up, то поверхность находится слева. o Если V = Up, то справа существует поверхность, в точке которой лежащей на одной оси X будет V = Down. 0. Ищем поверхность справа от затравки. 1. V = Down, TempXY = X, Y. - Описание поверхности в буфере. - 2. Set(Buf, X, Y) 3. X,Y = Next(X, Y) ; Определяем следующий пиксель и вектор. 4. Если TempXY != X, Y и V = Down идём к п.2. 5. Push(X, Y) ; Сохраняем в стеке. 6. X, Y = Next(X, Y) 7. Если V = Up идём к 13. 8. Если V != Down идём к п.6. 9. TempX, Y = Stack() ; Значение с вершины стека. Если X, Y != TempXY идём к п.6. 10. Pop(TempXY) Pop(TempXY) ; Удаляем коорднинаты двух пиксель. 11. Если стек исчерпан, то брейк. 12. V = Up. Идём к п.6. 13. Push(X, Y) 14. X = X + 1 15. Если Get(Scr, X, Y) идём к п.17. 16. Out(X, Y). Идём к п.14. 17. Если Get(Buf, X, Y) идём к п.1. 18. Pop(X, Y). Идём к п.6.