Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Графика в Delphi (http://www.tehnari.ru/f43/t80838/)

NotaKron 19.11.2012 17:20

Графика в Delphi
 
Вложений: 1
Здравствуйте. Нужна помощь в решении следующей задачи.есть картинка с n-фигурами произвольной формы, нужно найти xmin,xmax и ymin,ymax каждой.Все фигуры черного цвета. я картинку с помощью scanline перегнал в двумерный массив, где 0 - белый цвет, 1 - черный. Далее в цикле последовательно сверху вниз прохожу точки, проверяя их цвет. Но если фигуры, расположены, как на картинке в примере, то возникают проблемы( Как определить, что точка А принадлежит первой фигуре, а точка Б нет?
Может есть алгоритмы попроще, а то ощушение, что удаляю гланды не через то отверстие((

kreol 19.11.2012 19:21

пройдите по массиву и если строка равна 0, то первая фигура закончилась.

NotaKron 19.11.2012 20:50

Спасибо за совет, но:
1. В этой строке, может быть и черные цвета, от фигуры, расположенной дальше по оси Х.
2.Я прохожу масси во стоблцам, а Вы, если я правильно понял, предлогаете по строкам. Но тогда если мы рассмотрим представленные на рисунке фигуры, повернув их на 90 градусов, то опять получим ту же самую проблему.

kreol 19.11.2012 21:39

Это что у вас распознавание образов о_О

1) Что такое x,y (min, max) как расположены координаты.
2) Как вы считываете картинку? что, строка пикселей это столбец массива?

1. Ставьте правильно условие(т.к. вы написали относительно данной картинки)... Тогда надо анализировать каждый пиксель... если он - 1 и есть сосед 1, то это все та же фигура. И соответственно высчитывать max, min для этой фигуры.(эти координаты добавляем в какой-то массив т.е. будет массив массивов. где ключ - номер фигуры).
Как только нету соседа (тоже 1) то это либо новая фигура, либо больше их нету.

На когда нужна задача?

NotaKron 19.11.2012 22:23

Вложений: 1
1. xmin,xmax - это крайний левый и крайний правый пиксель фигуры.
2.Нет, строка картинки=страка массива. Извиняюсь,что не так выразился. Просто цикл у меня идет по столбцам, но можно и по строкам. Не вижу принципиальной разницы.
Про сравнение и поиск соседнего пикселя я уже думал.
Вот мы анализируем первую строку с черными пикселями. Назначаем ключ 1 и до точки 2 у всех сосед есть. Потом идет разрыв в строке, и у точки 3 соседа с ключем 1 нет. На этой проблеме я и застрял.

Сроки не важны.

kreol 20.11.2012 01:40

Цитата:

Сообщение от NotaKron (Сообщение 821793)
Сроки не важны.

Отлично. Тогда давайте до выходных. Только просьба напомнить, т.к. голова дырявая :-) . скайп в моем профиле...

Gruvi 20.11.2012 02:15

Интересное задание, попробую что-нибудь для себя написать.

kreol 20.11.2012 02:44

Цитата:

Сообщение от Gruvi (Сообщение 821911)
Интересное задание

Да. Наконец-то из многих... Я что-то подобное думал для анализа текста на картинке... Правда так и не придумал(

NotaKron 21.11.2012 20:02

Вобщем, я алгоритм придумал, но он настолько извращенный и индийский, что мне даже не много стыдно.
в цикле находим первую точку черную.
вызываем функцию, которая считает хмах, хmin и ymax,ymin первой попавшейся фигуры (эту функцию я так же приудмал, и она так же корява, как и этот алгоритм).
Далее вызывае функцию, которая в цикле будет проходить от xmin до хmax и ymin и ymaх. В нем обнуляем все точки с черным цветом(заоодно и площадь фигуры можно посчитать).
Далее продолжаем первый цикл, до следующей фигуры.

З.Ы. прошу сильно не пинать,знаю что мысль ужасная. Так что тема актуальна.

Gruvi 21.11.2012 22:12

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


Часовой пояс GMT +4, время: 01:53.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.