Нужна подсказка.

Darky 09.05.2004 - 00:43 | Шеф дал задание. Объясняю: Есть фото или рисунок на котором изображено озеро неправильной формы (вид сверху) Надо: Отсканировать ?( в каком лучше формате), затем выделить озеро по его границам и расчитать и отобразить его середину визуально там же на рисунке. Спасибо всем тем кто откликнется.
x77 1 - 09.05.2004 - 00:53 | Darky, 1. сканировать лучше в бмп, более громоздко, но более точно, от попиксельной обработки всё равно никуда не денешься. . 2. выделить по границам проще всего по цвету. задаёшь цвет, задаёшь корреляцию, скажем 3-10%%, и вытаскиваешь координаты всех подходящих пикселов в некий массив. . 3. ищещь в это массиве минимумы и максимумы, считаешь середину, отображаешь.
Darky 2 - 09.05.2004 - 01:03 | Большое спасибо за ответ. Как мне его выделить и вытащить координаты на етом я и застрял. Если можно поподробнее или линк на что-нибудь такое.
x77 3 - 09.05.2004 - 01:16 | Darky, смотря на чём писать. смысл в том, чтобы выдрать все пикселы, RGB-составляющие которых будут колебаться в заранее заданных пределах.
Darky 4 - 09.05.2004 - 01:29 | Писать буду на Delphi. В работе с изображениями я нов, но смысл ясен как божий день, небольшой толчек для сдвига, ДОБРОГО СЛОВА НЕ ХВАТАЕТ.
x77 5 - 09.05.2004 - 01:35 | а как выглядят фотки? попробуй в любом редакторе преобразовать их в ч/б цвет. если контур озера будет чётко виден, то вообще все просто.
Darky 6 - 09.05.2004 - 01:43 | Без проблем фотки можно сделать любыми, главное чтобы был виден контур озера и его середина. Контур принеобходимости можно даже на рисунке подрисовать в конце концов.
x77 7 - 09.05.2004 - 01:46 | в любом случае. у Bitmap'а есть свойство Pixels. достаточно тормознутое. поэтому использовать лучше scanline, в хелпе есть примеры. ты получишь массив точек, каждый элемент этого массива будет содержать цвет. преобразовываешь его в RGB функцией ColorToRgb, получаешь четырёхбайтовое значение, в котором один байт системный, а три других - значение R, G и B соответственно. берёшь своё значение "базового" цвета, так же раскладываешь на состалвяющие, и проверяешь, что "твой" R отличается от R пиксела не более, чем на, скажем, 1 процент. также для G и B. если пиксел принадлежит озеру, пишешь в какой-то массив (a: array of TPoint). потом находишь в этом массиве элемент с наименьшим X (самая левая точка озера), наименьшим Y (самая верхняя), наибольшим X (самая правая) и наибольшим Y (самая нижняя). вычилсяешь центр по школьной формуле. всё.
Darky 8 - 09.05.2004 - 01:56 | Спасибо буду реализовывать если будут вопросы буду писать в эту же тему.
нонейм 9 - 09.05.2004 - 14:33 | а фиг так получится что-то толковое :) а вдруг где-нить в углу фотографии на местности будет лужа с тем же цветом? или часть ручья? да просто пара пикселей будут по цвету совпадать с заданным... так что для начала программе нужно указать какую-то точку на озере, от которой она и начнет работу, определяя границы озера...
Delphist 10 - 09.05.2004 - 14:47 | Тогда ничто не мешает спросить у пользователя: обнаружено два (три, пять, десять...) контура, который из них считать озером, выберите в списке и нажмите ОК. Тем более, если допустима ручная предварительная обработка рисунков, то проблемы вообще нет.
Delphist 11 - 09.05.2004 - 14:48 | 2 Darky А что, шеф рыбак? Или сельхозмелиоратор-ирригатор?
Darky 12 - 10.05.2004 - 00:32 | Шеф не рыбак а занимается разметкой территорий. Озеро мне бы самому выделить и измерить его середину. А вообще как задачка, есть идеи?
x77 13 - 10.05.2004 - 12:29 | Darky, кстати, что считается "серединой" озера? если озеро имеет виды рыгалика, то середина его может находиться на земле обетованной, а не на самой воде. по усоиям задачи это допустимо?
Darky 14 - 11.05.2004 - 04:27 | К примеру у вас есть озеро НЕОПРЕДЕЛЕННОЙ формы ну пусть в виде рыгалика. То середина должна проходить по водной глади, то есть мы ентот рыгалить поделим не поперек, а вдоль, чтобы количество воды и берегов было одинаково. Задача резделить вдоль, а вдальнейшем и на несколько частей. Как к примеру поделен каспий между государствами. Почти тоже самое. А если совсем непонятно, то возми карандаш и нарисуй озеро любой формы, и рездели напаполам, как если бы у тебя был сосед и озеро половина твоя и половина его. Ты же разделишь точно напополам? Ну-у может где больше прихватишь :))))
ПМ 15 - 11.05.2004 - 17:44 | Есть такое понятие как центр масс, вот и вычисли его для своего озера, считая, что каждый пиксель имеет массу 1. Получишь то, что можно считать серединой
BugMaker 16 - 13.05.2004 - 19:34 | Я тут в гугле набрал "Центр масс", т.к. раньше никогда не сталкивался с этим понятием и сделал для себя вывод, что в озере в форме рыгалика центр масс может находиться вне этого рыгалика (ИМХО) Литература: http://www.mccme.ru/free-books/prasolov/planim/gl14s1.htm#14.1
Dikich 17 - 14.05.2004 - 07:35 | задачка то не программированию , а "чистой воды" по геометрии...

>>