Графика в Delphi
Вложений: 1
Здравствуйте. Нужна помощь в решении следующей задачи.есть картинка с n-фигурами произвольной формы, нужно найти xmin,xmax и ymin,ymax каждой.Все фигуры черного цвета. я картинку с помощью scanline перегнал в двумерный массив, где 0 - белый цвет, 1 - черный. Далее в цикле последовательно сверху вниз прохожу точки, проверяя их цвет. Но если фигуры, расположены, как на картинке в примере, то возникают проблемы( Как определить, что точка А принадлежит первой фигуре, а точка Б нет?
Может есть алгоритмы попроще, а то ощушение, что удаляю гланды не через то отверстие(( |
пройдите по массиву и если строка равна 0, то первая фигура закончилась.
|
Спасибо за совет, но:
1. В этой строке, может быть и черные цвета, от фигуры, расположенной дальше по оси Х. 2.Я прохожу масси во стоблцам, а Вы, если я правильно понял, предлогаете по строкам. Но тогда если мы рассмотрим представленные на рисунке фигуры, повернув их на 90 градусов, то опять получим ту же самую проблему. |
Это что у вас распознавание образов о_О
1) Что такое x,y (min, max) как расположены координаты. 2) Как вы считываете картинку? что, строка пикселей это столбец массива? 1. Ставьте правильно условие(т.к. вы написали относительно данной картинки)... Тогда надо анализировать каждый пиксель... если он - 1 и есть сосед 1, то это все та же фигура. И соответственно высчитывать max, min для этой фигуры.(эти координаты добавляем в какой-то массив т.е. будет массив массивов. где ключ - номер фигуры). Как только нету соседа (тоже 1) то это либо новая фигура, либо больше их нету. На когда нужна задача? |
Вложений: 1
1. xmin,xmax - это крайний левый и крайний правый пиксель фигуры.
2.Нет, строка картинки=страка массива. Извиняюсь,что не так выразился. Просто цикл у меня идет по столбцам, но можно и по строкам. Не вижу принципиальной разницы. Про сравнение и поиск соседнего пикселя я уже думал. Вот мы анализируем первую строку с черными пикселями. Назначаем ключ 1 и до точки 2 у всех сосед есть. Потом идет разрыв в строке, и у точки 3 соседа с ключем 1 нет. На этой проблеме я и застрял. Сроки не важны. |
Цитата:
|
Интересное задание, попробую что-нибудь для себя написать.
|
Цитата:
|
Вобщем, я алгоритм придумал, но он настолько извращенный и индийский, что мне даже не много стыдно.
в цикле находим первую точку черную. вызываем функцию, которая считает хмах, хmin и ymax,ymin первой попавшейся фигуры (эту функцию я так же приудмал, и она так же корява, как и этот алгоритм). Далее вызывае функцию, которая в цикле будет проходить от xmin до хmax и ymin и ymaх. В нем обнуляем все точки с черным цветом(заоодно и площадь фигуры можно посчитать). Далее продолжаем первый цикл, до следующей фигуры. З.Ы. прошу сильно не пинать,знаю что мысль ужасная. Так что тема актуальна. |
Можно сделать так, что бы он двигался от первого пикселя враво, как только находит точку черную записывает координаты, далее двигается дальше, как только обнаружил белую точку, то записывает координаты предыдущей позиции, и начинает считывать след. строку. и так далее, потом просто вбить формулы площади и все=)
|
Часовой пояс GMT +4, время: 01:53. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.