Имя: Пароль:
IT
 
Определение площади фигуры и ее периметра
0 Торин
 
13.02.06
15:20
Уважаемые коллеги!
Изините за офф-топик, но больше спросить негде.
Большинство из вас до 1С тоже на чем-то программировали.  
Очень нужно решение вот такой задачки (ну если не решение, то хотя бы экспертная оценка его возможности):
есть bitmap-файл. В нем содержится изображение плоской фигуры, напоминающей слегка деформированный круг. Цветность - бит на цвет (черный-белый). Требуется определить площадь фигуры и ее периметр. Пренебречь деформированностью нельзя, ибо конечной задачей является именно оценка степени отличия данной фигуры от правильного круга...
Задача может быть решена ЛЮБЫМИ средствами - любой язык, любая операционка и т.д. Главное - программа должна работать полностью автоматически, без диалога с пользователем
1 Vozhd
 
13.02.06
15:29
(0) Можно посчитать количество точечек...
2 Бешенная Нога
 
13.02.06
15:29
2 цвета церный и белый?
3 Торин
 
13.02.06
15:31
да. тока два цвета. Идея именно в том, что посчитать количество точек, но это тока площадь. А периметр? Нужно посчитать т.н. "пограничные" точки. а вот что это такое - "пограничные точки"?
4 Волшебник
 
модератор
13.02.06
15:32
(0) Для Волшебного форума - это не Офф-топик, так что извиняться не за что.
5 Торин
 
13.02.06
15:33
т.е точки, которые контактируют с другим цветом. Но как это определить...
6 Vozhd
 
13.02.06
15:33
(5) проверить соседние точки
7 igork1966
 
13.02.06
15:34
(3) Думаю белые точки у которых есть черные соседи.
8 Торин
 
13.02.06
15:35
дайте, плиз, ссылку на информацию типа "форматы графических файлов". И еще - на чем лучше всего попробывать такое написать?
9 Бешенная Нога
 
13.02.06
15:36
если ты найдешь площать круга который внутри прямоугольника,
то периметрКруга=ПериметрПрямоугольника*ПлощальКруга/ПлощадьПрямоугольника
10 igork1966
 
13.02.06
15:37
(8) google тебе поможет. Выдает кучу ссылок. Лень фразу написать?

http://jenyay.wallst.ru/index.php?id=bmp
11 igork1966
 
13.02.06
15:37
(9) "слегка деформированный круг."  "Пренебречь деформированностью нельзя,"
12 airyashov
 
13.02.06
15:38
да что писать на дельфе битмап и вперед по точкам
а вот как оценить деформацию, что значи неправильный круг, овал, эллипс или что-то иное
13 Торин
 
13.02.06
15:38
(12)круг со слегка "изъеденными" краями
14 AeDen
 
13.02.06
15:38
(7) А черная полоса, с двух сторон которой - белое поле. И полоса шириной 1-10 точек...
15 igork1966
 
13.02.06
15:41
(14) В (0) ихмо предпологается отсутствие дефектов закраски. (Если я правильно понял тебя и автора)
16 igork1966
 
13.02.06
15:43
(15) + можно "дефекты" построчно предварительно закрасить.
17 Торин
 
13.02.06
15:43
Давайте я уточню, откуда  взялась задача. Анализируется новый способ печати - лазерный луч, но жидкая краска. необходимо оценить качество полученных точек. используется два критерия - распределение оптической плотности на точке и степень отличия точки от правильного круга...
вот для этой второй задачи и нужна эта программка.
Дефектов закраски нет. предполагается что внутри круга "дырочек" нет. И не тока предполагется. Визуально, просмотрев несколько сотен отпечатков подтверждаю - нет.
18 smaharbA
 
13.02.06
15:44
Думаю в акаде или в 3дс возможно, там и скриптовый язык есть и приблуды что такие весчи в шейпы конвертят, можно и автоматом наверно сделать
19 Deon
 
13.02.06
15:47
(17) А зачем периметр? Чем он меньше, тем лучше?
20 Торин
 
13.02.06
15:49
Известно, что для данной площади минимальным периметром обладает именно правильный круг. Поэтому это и взято как критерий близости отпечатка к правильному кругу...
21 Токс
 
13.02.06
15:54
Так, вроде... математичка, интегральчики...
Периметр - сумма поверхностных точек, а площадь - сумма длин отрезков...
22 Mort
 
13.02.06
15:54
(0) И в каких единицах периметр? Если круг рассматривать как нарисованный из квадратов то его периметр будет равен 4*R*R всегда как бы плохо он не был нарисован.
23 Торин
 
13.02.06
15:59
для того, чтоб тут было что интегрировать, необходимо вначале задать функцию... пусть даже таблично...
А отпечатков несколько тысяч...

Идея какая:
посчитать пиксели, умножить на масштаб (dpi (dot per inch) - количество пикселей на дюйм) и так получить и площадь и периметр. вот тока КАК все это сделать?
24 Токс
 
13.02.06
16:12
Проблемы то нет...
Вертикально разлагаешь на отрезочки шириной в пиксель и пошел считать... Площадь - сумма длин черных отрезков (на белом фоне), а для периметра надо ещё теорему Пифагора вспомнить...
За скорость на Делфе ничего сказать не могу, но картинку она разложит...
ЗЫ Я б подождал smaharbA... щас из 1С замутит, он такой...
25 igork1966
 
13.02.06
16:17
Найти первую белую точку. Найти любую соседнюю имеющую >1 черного соседа.
Далее найти аналогично соседнюю(>1 черного соседа) исключив предыдущую из рассмотрения. Расстояние по теореме пифагора. Пока не дойдем до начальной точки.
26 Торин
 
13.02.06
16:29
спасибо, начал кодить на дельфях... Правда, года два за них не садился.. Но глядишь, не все еще позабыл...
27 Торин
 
13.02.06
16:30
Обязательно напишу результат. Но видимо, не раньше чем завтра...
28 Shaman100M
 
13.02.06
16:38
Можно вычислить пикселы, имеющие не более 6 "черных" соседей - это край окружности, дальше построить многоугольник по центрам пикселей / нижним правым точкам и посчитать его периметр. Можно оптимизировать выбор вершины будущего многоугольника как наиболее удаленной точки пиксела от центра..
29 Иде я
 
13.02.06
16:40
А что - толщина круга будет 1 пиксель ?!!!
Не верю!!
30 Иде я
 
13.02.06
16:41
Т.е. окружности
31 Череп
 
13.02.06
16:43
Чуть более широкая задача решалась на всеросийской олимпеаде по программированию года 99 или 2000. Можншь поискать решение.
32 igork1966
 
13.02.06
16:47
(27) Черт, есть ситуэшен когда придется брать точку только с 1 соседом черным
(если ненашлось других)
ББ ББ
БББББ
БББББ

(29) Чего-то непонял, ты о чем? Алгоритм придумал сейчас. Может какоя ошибка в рассуждениях?
33 Иде я
 
13.02.06
16:48
Б Б
ББ
Б
такое учитывается?
34 igork1966
 
13.02.06
16:51
(33) Договорились, что дефектов закраски нет.
35 Торин
 
13.02.06
16:51
(33) - нет. фигура плоская... это означает. что отрезок, соединяющий любые две точки на периметре полностью лежит во внутренней области... (каюсь, определение неточное.... )
36 igork1966
 
13.02.06
16:53
(35) Однако я бы посмотрел (31). Моя придумка может дать "неожиданный" сбой.
37 Торин
 
13.02.06
16:56
Обязательно поищу...
а изложить ваш алгоритм подробнее можно? Если не здесь, то мне на почту:
torin99@yandex.ru
38 Diter
 
13.02.06
16:56
Хм... а я делал такое на делфях лет 5 назад.... была интересная задачка по определению площади цветных пятен и вычислению их площади.....

пошёл через предварительную калибровку и подсчёт точек в пятне. Т.е. вначале подсовывал программе фигуру (квадрат) с точно известной площадью. Программа расчитывала площадь одного пикселя ну а дальше....

для чистоты проходил фигуру дважды. Вначале по горизонтале с верху вниз, а потом по вертикале с права на лево. результат суммировал и делил на два
39 Торин
 
13.02.06
16:57
а диаметр?
40 Diter
 
13.02.06
16:59
(+38) а по поводу периметра - задача найти граничные точки. можно решить с помощью такого алгоритма - юзер тыкает мышкой в картинку вне фигуры и программа получает цвет (можно и наоборот - получать цвет пятна и идти от противного). А дальше - перебираются все пиксели с права на лево (до получения граничных) и сверху в низ. Правда - при этом возможен вариант с "дыркой" в середине фигуры.... Короче - нужно думать....
41 igork1966
 
13.02.06
16:59
(37) Дык я его придумал буквально "на коленях". Все изложено в (25,32).
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс