Задача! Для умных и неочень!! Нужны идеи!!!
У меня для твоего ума и фантазии есть одна интересная задачка!! Итак:
Есть рисунок NxM точек. Рисунок цветной. На этом изображении есть К какихто изображений (лежащих в произвольном порядке). Нужно опредилить цвет фона АВТОМАТИЧЕСКИ(!!!). Причем извесно что фон темнее за изображения.
Принимаются разные идеи.
Жду плодов Вашего умственного труда с нетерпением
Здраствуйте многоуважаемый Умный Читатель!!!
У меня для твоего ума и фантазии есть одна интересная задачка!! Итак:
Есть рисунок NxM точек. Рисунок цветной. На этом изображении есть К какихто изображений (лежащих в произвольном порядке). Нужно опредилить цвет фона АВТОМАТИЧЕСКИ(!!!). Причем извесно что фон темнее за изображения.
Принимаются разные идеи.
Жду плодов Вашего умственного труда с нетерпением
Абсолютно непонятное условие. Как размещены изображения? Одно на другом или одно рядом с другим? Цвет фона рисунка или изображения нужно найти? Что значит автоматически?
Абсолютно непонятное условие. Как размещены изображения? Одно на другом или одно рядом с другим? Цвет фона рисунка или изображения нужно найти? Что значит автоматически?
Идя на встречу пожеланиям Dart Bobr расписиваю детали:
Изображения (ну припустим это яблоки или клетки организма или просто какие-то пятна (это для большей очевидности)) ражмещены в произвольном порядке, тоисть могут быть рядом, могут быть на, а могут быть для онних рядом, а для других на. Ну одним словом произвол ).
Нужно определить цвет фона рисунка, тоисть на каком фоне эти изображения нарисованы (припустим на рисунке красно-жолто-зелено-... яблоки на синем фоне. результатом должен быть синий цвет.).
Автоматически это без вмешательства человеческого фактора в работу алгоритма, тоисть на вход рисунок на выходе цвет фона.
Идя на встречу пожеланиям Dart Bobr расписиваю детали:
Изображения (ну припустим это яблоки или клетки организма или просто какие-то пятна (это для большей очевидности)) ражмещены в произвольном порядке, тоисть могут быть рядом, могут быть на, а могут быть для онних рядом, а для других на. Ну одним словом произвол ).
Нужно определить цвет фона рисунка, тоисть на каком фоне эти изображения нарисованы (припустим на рисунке красно-жолто-зелено-... яблоки на синем фоне. результатом должен быть синий цвет.).
Автоматически это без вмешательства человеческого фактора в работу алгоритма, тоисть на вход рисунок на выходе цвет фона.
В общем случае это невозможно, даже с человеческим участием. Алгоритмы выделения фона и прочие алгоритмы распознавания изображений ищи в книгах. Могу посоветовать: Форсайт,Понс "Компьютерное зренние"
Другой вариант (если площадь открытых областей меньше или соразмерна с суммарной площадью пятен):
Отличительная особенность фонового цвета - довольно большие группы идущих подряд точек (скажем, больше 5-ти) имеют одинаковый цвет (вероятнее всего это и есть цвет фона). Итак, берем окно, скажем в 5 пикселей (подбирать экспериментально по картинкам) и двигаем его по картинке с шагом в один пиксель. Если оказалось что в этом окне все пикселы одного цвета - +1 в статистической таблице для этого цвета, нет - поехали дальше. И так по всему изображению. Затем смотрим на статистику - какой цвет выпадал чаще всего - он и есть цвет фона. Если по статистике невозможно однозначно выявить цвет - уменьшаем окно (было 5, стало 4 пиксела) и повторяем операцию.
В пределе этот метод сводится к нахождению спектра Фурье изображения (двухмерного или набора одномерных, можно вейвлеты использовать). Так вот, коэффициент спектрального представления с самой низкой частотой - он и будет цветом фона.
Да, все это нужно проделывать отдельно для каналов R, G, B или яркостного и каналов разности.
Надеюсь понятно мысль изложил :)
Идею ты изложил понятно:), над таким вариантом я уже дума, но есть один минус, нет 100% гарантии что сумарная площадь пятен изображения меньше площади незанятых частей (т.е. того, что закрашено цветом фона), тоисть пятен может быть очень много.
Вариант какой я тестую, берутся точки по контуру рисунка - 5, тоисть получается меньший контур (-5 потому что бы застраховатся от искажений на краях рисунка). Потом с каждих 5 точек рамдомом выбираю одну. И т.д. Этод алгоритм немнож колутше (тестирывал) во-первых, как правило пянна все таки ближе к центру. Во-вторых операций нужно выполнить меньше. Но все равно не панацея :(.
Но все равно спасибо за участие:!!!: , Если будут идеи пиши буду очень рад. задачка и интересная.
что то непонятно в чём проблема если сказано что фон темнее изображения? Найти самый тёмный цвет. Уж не знаю тока как определить в РГБ какой из них темнее.
Проблема как раз в том что нужно зделать это быстро и качественно.
Причем на фотках можгут быть темные точки (намного темнее за фон).
Проблема как раз в том что нужно зделать это быстро и качественно.
Причем на фотках можгут быть темные точки (намного темнее за фон).
дак это противоречит условию, ты же говорил, что фон темнее изображений. Вообще, 100% ты не получишь в любом случае, так как даже человек не всегда определит, где фон. Ты лучше скажи для какой задачи тебе это нужно, может ее можно решить другим путем?
дак это противоречит условию, ты же говорил, что фон темнее изображений. Вообще, 100% ты не получишь в любом случае, так как даже человек не всегда определит, где фон. Ты лучше скажи для какой задачи тебе это нужно, может ее можно решить другим путем?
Это не противоречит, фон темнее за клетки, а не какието точки (которых есть несколько (десятков) штук на фотографии.)
Я и сам уже разнадеялся получить 100%, но всеже стремлюсь к этому бареру:angel:
Задача простая: Дана фоткас изображением клеток человеческого органа, нужно класыфицировать в автоматическом режиме. Она из подзадач опредиление фона в автоматическом режиме.
Это не противоречит, фон темнее за клетки, а не какието точки (которых есть несколько (десятков) штук на фотографии.)
Я и сам уже разнадеялся получить 100%, но всеже стремлюсь к этому бареру:angel:
Задача простая: Дана фоткас изображением клеток человеческого органа, нужно класыфицировать в автоматическом режиме. Она из подзадач опредиление фона в автоматическом режиме.
Тогда тут вполне сойдет поиск зон с похожим цветом. Если и это не катит, то используй нейросети для распознавания, но ты с ними напаришься, поверь...
А потом статистика. Например, первый максимум гистограммы (то есть при минимальной яркости), или может быть не гистограммы, а подобной ей функции, которая будет учитывать не только суммарную площадь пикселей определённой яркости, но и "размазанность" этой площади по картинке. Правда, для того чтобы говорить о максимуме, надо бы снять случайные возмущения типа этих более тёмных точек. Для того чтобы понять как это делать, надо экспериментировать. Может быть достаточно сгладить гистограмму увеличив дискретность оси яркости, а может ещё проще: отсечь максимумы которые меньше определённой величины.
А может стоит анализировать не гистограмму яркости, а rgb гистограмму... А может и не гистограмму, а попытаться работать с выпуклостью/вогнутостью границ.
Короче, возьми gimp/fotoshop, и в них рисуй гистограммы на нужные картинки, потом переводи в gray-scale, и опять рисуй, не забывая разглядывать и находить на них (вручную) цвет фона. Не знаю как fotoshop, а в гимпе можно приделывать свои статистики, вот приделывай другие статистики помимо гистограммы и тоже смотри на результат. Ежели и этого окажется мало, к твоим услугам MathLab, Statistica, и пр. гадости. Если просветления не наступит, то наверное, это действительно проблема, а не задача :)
надо сужать задачу.
Спасибо за идею(сочуствие) по решению этой проблемы. Иду работать :):angel:
Спасибо за идею(сочуствие) по решению этой проблемы. Иду работать :):angel:
Можно обратится к матстатистике в смеси с матанализом. К проимеру, рассматривать каждую строку/столбец пикселов как выборку значений интенсивности и строить для них функцию распределения (то есть, считать для каждого пиксела производную по формуле (X[SIZE=1]i+k[/SIZE] - X[SIZE=1]i[/SIZE])/k, где Х - интенсивность либо отдельного канала цвета, либо корень из суммы квадратов интенсивностей каждой из цветовых составляющих. Шаг k можно варьировать, тем самым изменяя соотношение - скорость выполнения/качество (наиболее лучшее k = 1), i изменяется от 0 до n - k, где n - общее количество точек по выбранному направлению. Далее сверяем полученное значение производной со значением, полученным на предыдущем шаге. Если производная изменила свой знак, значит на отрезке [i, i + k] наблюдаем минимум или максимум интенсивности. Уточнить положение пиксела можно, взяв середину отрезка, или воспользоваться методом деления пополам (то есть, методом вилки), всё зависит от желаемой точности. Знак в нашем случае (в случае нахождения минимума) должен изменяться с минуса на плюс, если мы движемся в направлении увеличения координаты. Наша цель - найти и сохранить значение цвета, дающего минимальную интенсивность на [0, n] в данной строке/столбце пикселов; иными словами, ищем минимум интенсивности среди точек, в которых производная меняет знак с минуса на плюс (или обращается в ноль, но в этом случае значение производной от интенсивности справа от нулевого участка должно быть больше соответствующего значения слева). Такие числа мы должны получить для каждой строки (или столбца) пикселов. Затем ищем среднее из полученных значений минимумов, оно и будет наиболее ожидаемой интенсивностью цвета фона. По ходу дела можно подсчитать и дисперсию этих значений, определяемую как сумму крадратов разностей текущего и среднего значения интенсивностей точек, дающих минимумом интенсивности по каждой из строк/столбцов, поделенной на количество строк или столбцов соответственно. Корень из дисперсии даст нам максимальное отклонение интенсивности истинного цвета от полученного (можем использовать в качестве порога точности при вырезании фона). На мой взгляд, это наиболее оптимальный метод из всех предложенных.
Желаю удачи!