Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 19.11.2012, 17:20   #1 (permalink)
NotaKron
Новичок
 
Регистрация: 19.11.2012
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Графика в Delphi

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

Старый 19.11.2012, 17:20
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

На нашем форуме нашлись похожие обсуждения

Графика
PascalABC, графика

Старый 19.11.2012, 19:21   #2 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

пройдите по массиву и если строка равна 0, то первая фигура закончилась.
kreol вне форума   Ответить с цитированием
Старый 19.11.2012, 20:50   #3 (permalink)
NotaKron
Новичок
 
Регистрация: 19.11.2012
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо за совет, но:
1. В этой строке, может быть и черные цвета, от фигуры, расположенной дальше по оси Х.
2.Я прохожу масси во стоблцам, а Вы, если я правильно понял, предлогаете по строкам. Но тогда если мы рассмотрим представленные на рисунке фигуры, повернув их на 90 градусов, то опять получим ту же самую проблему.
NotaKron вне форума   Ответить с цитированием
Старый 19.11.2012, 21:39   #4 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

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

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

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

На когда нужна задача?
kreol вне форума   Ответить с цитированием
Старый 19.11.2012, 22:23   #5 (permalink)
NotaKron
Новичок
 
Регистрация: 19.11.2012
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

Сроки не важны.
Миниатюры
2.jpg  
NotaKron вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 20.11.2012, 01:40   #6 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

Цитата:
Сообщение от NotaKron Посмотреть сообщение
Сроки не важны.
Отлично. Тогда давайте до выходных. Только просьба напомнить, т.к. голова дырявая :-) . скайп в моем профиле...
kreol вне форума   Ответить с цитированием
Старый 20.11.2012, 02:15   #7 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

Интересное задание, попробую что-нибудь для себя написать.
Gruvi вне форума   Ответить с цитированием
Старый 20.11.2012, 02:44   #8 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

Цитата:
Сообщение от Gruvi Посмотреть сообщение
Интересное задание
Да. Наконец-то из многих... Я что-то подобное думал для анализа текста на картинке... Правда так и не придумал(
kreol вне форума   Ответить с цитированием
Старый 21.11.2012, 20:02   #9 (permalink)
NotaKron
Новичок
 
Регистрация: 19.11.2012
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

З.Ы. прошу сильно не пинать,знаю что мысль ужасная. Так что тема актуальна.
NotaKron вне форума   Ответить с цитированием
Старый 21.11.2012, 22:12   #10 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

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

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.