Задача! Для умных и неочень!! Нужны идеи!!!
У меня для твоего ума и фантазии есть одна интересная задачка!! Итак:
Есть рисунок NxM точек. Рисунок цветной. На этом рисунке есть К изображений (различной форми, цвета и размера), которые лежат в произвольном порядке. Нужно определить цвет фона в АВТОМАТИЧЕСКОМ порядке. Причем извесно что фон рисунка темнее за цвет изображения.
Принимаются любые идеи.
Жду результатов Ваших умственных трудов!!
Здраствуйте многоуважаемый Умный Читатель!!!
У меня для твоего ума и фантазии есть одна интересная задачка!! Итак:
Есть рисунок NxM точек. Рисунок цветной. На этом рисунке есть К изображений (различной форми, цвета и размера), которые лежат в произвольном порядке. Нужно определить цвет фона в АВТОМАТИЧЕСКОМ порядке. Причем извесно что фон рисунка темнее за цвет изображения.
Принимаются любые идеи.
Жду результатов Ваших умственных трудов!!
Что то мне непонятна последняя фраза. Что значит "за цвет изображения"? Может это звучит как "чем цвет образов"?
Что то мне непонятна последняя фраза. Что значит "за цвет изображения"? Может это звучит как "чем цвет образов"?
"чем цвет образов"? да так оно и должно быть, извините за акцент :)
А вот ещо пояснения:
Изображения (ну припустим это яблоки или клетки организма или просто какие-то пятна (это для большей очевидности)) ражмещены в произвольном порядке, тоисть могут быть рядом, могут быть на, а могут быть для онних рядом, а для других на. Ну одним словом произвол ).
Нужно определить цвет фона рисунка, тоисть на каком фоне эти изображения нарисованы (припустим на рисунке красно-жолто-зелено-... яблоки на синем фоне. результатом должен быть синий цвет.).
Автоматически это без вмешательства человеческого фактора в работу алгоритма, тоисть на вход рисунок на выходе цвет фона.
"чем цвет образов"? да так оно и должно быть, извините за акцент :)
А вот ещо пояснения:
Изображения (ну припустим это яблоки или клетки организма или просто какие-то пятна (это для большей очевидности)) ражмещены в произвольном порядке, тоисть могут быть рядом, могут быть на, а могут быть для онних рядом, а для других на. Ну одним словом произвол ).
Нужно определить цвет фона рисунка, тоисть на каком фоне эти изображения нарисованы (припустим на рисунке красно-жолто-зелено-... яблоки на синем фоне. результатом должен быть синий цвет.).
Автоматически это без вмешательства человеческого фактора в работу алгоритма, тоисть на вход рисунок на выходе цвет фона.
Можно встречный вопрос для более ГЛУБОКО понимания задачи:
Если во всю картинку нарисована зад-ица, какой цвет фона должна выдать программа?8)
А теперь серъезно, возможна ли ситуация, когда объектов так много, что задний фон полностью закрыт (т.е. его нет) и что программа должна при этом выдавать пользователю?
Нужно определить цвет фона рисунка, тоисть на каком фоне эти изображения нарисованы (припустим на рисунке красно-жолто-зелено-... яблоки на синем фоне. результатом должен быть синий цвет.).
Имеем соотношение фигура-фон. Вообще оно может быть каким угодно, поэтому из него исходить трудно. Но мы будем считать, что оно не стремится к нулю или бесконечности, а лежит в пределах (0,2..5)и отлично от еиныцы.
По идее, фон должен отличаться равномерностью, то есть цвет должен иметь одно определённое значение плюс-минус какая-то допустимая дельта.
Дальше начинается самое интересное. Считаем количество уникальных цветов. Потом смотрим, как они распределяются. Условимся о tolerance, то есть о том, что мы считаем одним цветом. Так вот, смотрим на распределение, и если рядом стоящих писелей одного цвета оказывается больше, то автоматически считаем их фоном. Это из того соображения, что фон по площади больше фигуры.
Имеем соотношение фигура-фон. Вообще оно может быть каким угодно, поэтому из него исходить трудно. Но мы будем считать, что оно не стремится к нулю или бесконечности, а лежит в пределах (0,2..5)и отлично от еиныцы.
По идее, фон должен отличаться равномерностью, то есть цвет должен иметь одно определённое значение плюс-минус какая-то допустимая дельта.
Дальше начинается самое интересное. Считаем количество уникальных цветов. Потом смотрим, как они распределяются. Условимся о tolerance, то есть о том, что мы считаем одним цветом. Так вот, смотрим на распределение, и если рядом стоящих писелей одного цвета оказывается больше, то автоматически считаем их фоном. Это из того соображения, что фон по площади больше фигуры.
Этот подход имеет один маленький минус "фон должен быть больше сумарной площади фигур", что есть не очень хорошо, но все равно большое спасибо за предложение.
А теперь серъезно, возможна ли ситуация, когда объектов так много, что задний фон полностью закрыт (т.е. его нет) и что программа должна при этом выдавать пользователю?
Выдавать что фон опредилить невозможно :).
А если серъезно, то вероятность такой ситуации близка до 0 (Фон всеже гдето проскакивает).
если есть какието дельные предложения, то пиши обизательно проанализирую.
Здраствуйте многоуважаемый Умный Читатель!!!
У меня для твоего ума и фантазии есть одна интересная задачка!! Итак:
Есть рисунок NxM точек. Рисунок цветной. На этом рисунке есть К изображений (различной форми, цвета и размера), которые лежат в произвольном порядке. Нужно определить цвет фона в АВТОМАТИЧЕСКОМ порядке. Причем извесно что фон рисунка темнее за цвет изображения.
Принимаются любые идеи.
Жду результатов Ваших умственных трудов!!
Ты же уже спрашивал. Сколько ж можно???
Ты же уже спрашивал. Сколько ж можно???
Если ты не заметил, то я спрашивал в двух разных РАЗДЕЛАХ.
Одна голова хорошо, а две лутше.:!!!:
Если ты не заметил, то я спрашивал в двух разных РАЗДЕЛАХ.
Одна голова хорошо, а две лутше.:!!!:
Ну и ты хоть одну из предложенных идей реализовал? Сравнил разные методы? Поделись тогда результатами ;)
Ну и ты хоть одну из предложенных идей реализовал? Сравнил разные методы? Поделись тогда результатами ;)
Для уважаемого Archie отвечаю, я разсмотрел все (подчеркиваю) ВСЕ предложиные решения, и могу "авторитетно" ответить. Кехе-кехе(Прочистил горло перед виступлением).
Итак для разсмотрения были предложены следующие идеи:
№1 Автор Archie
Суть - Искать наиболее часто встречающийся цвет на рисунке.
+ работает в 75% рисунков.
- нужно перебирать все точки изображение (долго).
- фон должен быть больше сумарной площади изображений (нет 100% гарантии).
Результат тестов = крепкая троечка.
------------------------------------------
№2 Автор Archie
Суть - Разбивка изображения на полоски по +-5 точек и проходит проверка на наличии в ней точек одного цвета, если есть то записываэм в таблицу.Какой цвет встретится наибольшое число раз тот и фоновый.
+ работает в 79% рисунков.
- нужно перебирать все точки изображение ( очень долго).
- фон должен быть больше сумарной площади изображений (нет 100% гарантии).
Результат тестов = троечка.
------------------------------------------
№3 Автор Sanila_san
Суть - Перебор всех точек изображения. Если рядом стоящих писелей одного цвета оказывается больше, то автоматически считаем их фоном.
+ работает в 85% рисунков.
- нужно перебирать все точки изображение (долго).
- фон должен быть больше сумарной площади изображений (нет 100% гарантии).
- иногда за фон принимались изображения (вообще противоположный результат).
Результат тестов = слабенькое четыре.
------------------------------------------
№4 Автор StranikS
Суть - нет (написал здесь для моральной поддержки человека. Вопрос может ли возникнуть ситуация когда фона вообще небудет видно
+ работает в 0,00001% рисунков.
- ну нет здесь минусов :) (я серъозно.)
- нет есть ОНА НЕ РАБОТАЕТ.
Результат тестов = смотри % работоспособности (ели нашол нужную картинку).
------------------------------------------
№5 Автор fantom1983 (я старался быть к себе непридвзятым).
Суть - Перебор всех точек периметра изображения. Точек какова цвета больше, тот цвет автоматически считается фоном.
+ работает в 91% рисунков.
+ не нужно перебирать все точки изображение (быстро).
+ фон не должен быть больше сумарной площади изображений (выполняется одно из основных условий).
+ изображения должны лежать не на краях рисунка (нет 100% гарантии).
Результат тестов = крепкое четыре.
Р.С. Тесты проводились на фотографиях человеческих клеток. 20 рисунков. Реализована програма на Делфи 7.0.
Всеобщий итог :
- задачу не решили;
- идей катастрофически мало;
- разучились думать;
+ хоть что то но все же придумали.
+ надеюсь что то еще придумаем.
С уважением Юрий.
09.02.2006
№4 Автор StranikS
Суть - нет (написал здесь для моральной поддержки человека. Вопрос может ли возникнуть ситуация когда фона вообще небудет видно
+ работает в 0,00001% рисунков.
- ну нет здесь минусов :) (я серъозно.)
- нет есть ОНА НЕ РАБОТАЕТ.
Результат тестов = смотри % работоспособности (ели нашол нужную картинку).
------------------------------------------
Насколько, я понял 0.0...1% означает, что ситуация с отсутствием фона "практически не возможна". Тогда я могу предложить свой метод (вот его и нужно поместить в список методов): распознавание образов нейронной сетью, с последующим исключение их из картинки => что останется, то и будет фоном. Этот метод в текущей задаче наиболее оптимален, так как все нарисованные предметы, насколько я понял, однотипны (яблоки, клетки и т.д.)!
Недостатком может быть то, что необходимо будет НС обучить, т.е. перед тем как обрабатывать заданные картинки например с яблоками, нужно будет сформировать одну или несколько (чем больше, тем меньше потом будет ошибок) картинок для обучения. Там будут те же яблоки, но НС по обучающему входу надо будет заранее задавать пиксели являющиеся фоном. После обучения НС готова к работе.
Если хочется, чтобы она одновременно работала с яблоками, клетками, бегемотами и т.д. без переобучения, то в обучающий набор надо будет включить все типы, иначе эффективность распознавания упадет (насколько, я конкретно сказать не смогу, все будет зависеть от конфигурации сети, ее вида ("мадалайн" - например), числа нейронов).
Отсюда вывод, понадобиться программа для формирования обучающих картинок или придется их распознавать вручную чтобы скормить потом НС для обучения.
Реализацию я здесь не рассматриваю, если интересно или есть вопросы, можешь написать я периодически сюда буду заглядывать, сейчас материала по НС много. Правда часто бывает, что пишут заумно, но здесь для реализации нужны только основы.
Уважаемый StranikS основная задача это выделение и класыфикация клеток человека, эту задучу нужно решить без нейронных сетей, програма должна работать только на логических правилах без предворительного набора изображений, так что эта идея неподходит. Если тебе не трудно можеш дать инфу на нейро сети, мне нужно для описания существующих решений.
Здраствуйте многоуважаемый Умный Читатель!!!
У меня для твоего ума и фантазии есть одна интересная задачка!! Итак:
Есть рисунок NxM точек. Рисунок цветной. На этом рисунке есть К изображений (различной форми, цвета и размера), которые лежат в произвольном порядке. Нужно определить цвет фона в АВТОМАТИЧЕСКОМ порядке. Причем [COLOR=red]извесно что фон рисунка темнее за цвет изображения.[/COLOR]
Принимаются любые идеи.
Жду результатов Ваших умственных трудов!!
А может ето ключевая фраза ???
А может ето ключевая фраза ???
Ты прав это ключевая фраза, но нужно найти этот цвет, за минимальное число операций и некоторые точки могут быть намного темнее за цвет фона, так что нужно их откидать.
А вот такой вопрос. Какой цвет фона у российского флага? какие еще есть доп. условия?
Я даже незнаю как тебе ответить. У флага нет фона. Представь себе рисунки с каками я работаю, это фотографии сделаные на микроскопе человеческих органов, точнее фотки клеток они есть на фоне и каждий микроскоп дайот свой цвет фона + красители(для улутшения качества фоток). ну так вот нужно без вмешательства человека опредилить фон фоток.
Ну вроде обяснил.
Я даже незнаю как тебе ответить. У флага нет фона. Представь себе рисунки с каками я работаю, это фотографии сделаные на микроскопе человеческих органов, точнее фотки клеток они есть на фоне и каждий микроскоп дайот свой цвет фона + красители(для улутшения качества фоток). ну так вот нужно без вмешательства человека опредилить фон фоток.
Ну вроде обяснил.
Попробуй перебирать не все точки изображения, а часть, координаты точек определяй случайным образом. Если цвета изображения имееют нормальное распределение, то с некоторой вероятностью можно получить цвет фона.
Ты прав это ключевая фраза, но нужно найти этот цвет, за минимальное число операций и некоторые точки могут быть намного темнее за цвет фона, так что нужно их откидать.
Как говорил один сатирик умножая 2 семизначних числа : "Я могу точно, но медленно, а могу бистро но неточно" :)
Тогда я предлагаю Брать из картинки виборочно некоторие точки. Скажем сделать сетку с определенним шагом. (Ето для скорости) Считать количество Точек каждого встретившегося цвета. Потом взять те что будут темнее других (на тот случай если фона меньше чем 50% а само изображение достаточно светлое), а среди них вибрать тот какого наибольше. Но ето все приблизительно.
Берем первую строку пикселей и перебираем ее, находя самый светлый пиксел C и самый темный в строке T. Затем инвертируем brightness С. После этого пробегаем строку в обратной последовательности и запоминаем цвета всех пикселей, brightness которых лежит в интервале [brightness(Т)...Invert(brightness(C))], или [Invert(brightness(C))...brightness(Т)], смотря кто больше кого получиться. Теперь повторяем этот алгоритм для остальных строк и получаем полную выборку со всего рисунка. Остается подсчитать кол-во пикселей каждого цвета в выборке и выбрать наибольшее число - эти пиксели будут соотв. фону
1.Исходное изабражения пропускается через фильтры повышения контрастности и выделения контуров изображения(Sobel, Prewitt и т.п. )
2. Зная границы изображения определяются параметры фона.
Замечание по поводу скорости.
Обработка изображений - процесс весьма ресурсоемкий. Приходтся перелопачивать большие объемы информации и часто по несколько раз. Методы ускорений разработаны только для отдельных частных случаев.
А результат 92-94% считается блестящим
Однозначно цвет фона ты простыми логическими операциями не выделишь никогда, т.к. компу ведь все равно, клетки у тебя или сыр с дырками. Нейронные сети тут, как было замечено, могут помочь, но 20 фоток - будет слишком мало, для обучения :)
Интересно, какого же у тебя размера фотки после микроскопа получаются? ... В таком случае, задача по перебору всех точек может затянуться максимум на несколько секунд, а то и мс.
Абсолютно согласен, и каждый может проверить это в Фотошопе. Время выполнения на современном компьютере действительно представляет интерес преимущественно для оптимизации алгоритма. Если же нет завала с тысячами картинок, вполне можно и забить на время выполнения в пользу надёжности.
Однозначно цвет фона ты простыми логическими операциями не выделишь никогда, т.к. компу ведь все равно, клетки у тебя или сыр с дырками. Нейронные сети тут, как было замечено, могут помочь, но 20 фоток - будет слишком мало, для обучения :)
Господа, будем же мыслить системно. Начнём с постановки задачи.
1. Почему невозожно опрределить цвет фона силами человека?
2. Почему неприемлем вариант предварительного обучения?
2.1. Если используется конечное число красителей (а я почему-то уверен, что это так и есть), то никто не мешает заранее внести в память цветовой тон каждого красителя. Если пересчитать RGB в HSB, то дальше понадобится только значение H, каковое указывает на цвет фона и слабо зависит от концентрации красителя.
В принципе, можно использовать значение B с учётом значения H по принципу AND/OR, коль скоро фон у нас всё равно темнее. Поясняю.
if (H = Hconst) OR (H = Hconst AND B = Bconst) then
//...
С учётом (2.1.) реализация сильно упрощается. Пресеты можно выбирать и руками, и автоматически.
А вообще было бы правильнее ставить задачу не от функциональности программы, а от рабочего процесса, который обслуживается этой программой. Поэтому хочу поблагодарить тов. fantom1983 за задачу и немного попенять за подход. ИМХО, задача была не сравнивать конкретные алгоритмы между собой, а взять разумное из каждого. :)
А вообще было бы правильнее ставить задачу не от функциональности программы, а от рабочего процесса, который обслуживается этой программой. Поэтому хочу поблагодарить тов. fantom1983 за задачу и немного попенять за подход. ИМХО, задача была не сравнивать конкретные алгоритмы между собой, а взять разумное из каждого. :)
БРАВО, БРАВО, :P
Sanila_san, Вы первый из нас дошли до мысли: а нафига бросаться на решение проблемы, которую в сущности то и решать и не нужно!!!!!
Есть единственный путь достижения 100% точности - по порядку просматривать изображения и записывать для каждого из них список признаков, по которым ты определил фон. Затем отыскать единственный признак, общий для всех изображений. И научить распознавать этот признак программу. Только так.
Кто скажет, что я не прав? =)
Возьмите любой вариант - он будет работать лишь в конкретном случае. А кто кроме fantom'a знает, возможно у всех этих фотографий есть общий признак, а мы тут просто гадаем на кофейной гуще?
Ты прав это ключевая фраза, но нужно найти этот цвет, за минимальное число операций и некоторые точки могут быть намного темнее за цвет фона, так что нужно их откидать.
ну так в чём дело ?:)
формализацию задачки не можеш сделать ?
... нафига бросаться на решение проблемы, которую в сущности то и решать и не нужно!!!!!
Если проблема возникла, её нужно решать. Но мне эта ветка скорее напомнила экзамен, тогда как я надеюсь на то, что тов. fantom1983 имел целью решить задачу, а не проверить, какие мы тут умные.
А вообще интересно было поработать мозгом. Проблема действительно интересная, хотя и решалась странновато. ;)
AndreySar
То что Вы предложили это вариант №5 (но с меньшим % работоспособности). (Его + и - смотри выше.)
Rebbit
См вариат №5.
StranikS и dinasok51
С Вашими предложениями я ознакомился и в скором времени реализую и протестирую. Результаты конешно же будут достоянием общественность :)
Archie
У меня есть фотографии с разрешением от 600х600.
Завтра выложу некоторые примеры.
Sanila_san
Идея принята к обработке.
А кто сказал что я не беру лутшее из всех идей, помоему так и родился вариант №5.
StranikS
Почему это не нужно, мне очень даже и нужно:) !!!
Кстати есль поразмыслить, то можно найти примеры, где эта проблема стоит очень остро, в смысле быстрое и коректноэ опредиление фона.
IPz
Понял свою ошибку. Исправлюсь. Фотки будут очень скоро.
koderAlex
Пожалуста нвпишите здесь вашу формализацию, а мы с радостью оценим ее. Проблема не так проста как кажется на первый взгляд.
Sanila_san
Задача ставилась решить проблему. А то что у Всех присутствующих гениальный ум Я и не сомневаюсь.
С уважением Юрий.
Rebbit
См вариат №5.
Не совсем. Я предлогаю вообще не анализировать светлие цвета, а россматривать только темные. Тогда больше шансов попасть на фон. Сам ведь говорил что есть точки темнее фона, но их мало. Вот я и говорю что надо идти от темных цветов к светлым пока не попадем на цвет который часто встречается (не наичаще, а достаточно часто, но первий если идти от темных).
А периметр перебирать я вообще не предлогаю. Так можно попасть на какуюто специфическую картинку где по пириметру вообще фона не будет. (Ето я относительно сходства с вар №5)
Я так понимаю что задача не откудато, а из реальной жизни. Тоесть нет гарантии что у нее есть 100% решаемость ???
Пожалуста нвпишите здесь вашу формализацию, а мы с радостью оценим ее. Проблема не так проста как кажется на первый взгляд.
задача сводится к поиску локального максимума цветового спектра картинки в его ( спектра ) тёмной области . локальный максимум в светлой части даст базовый тон рисунка.
алгоритм нужен ? или сам составиш ? :)