|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Miha Ulanov 2:5030/926 25 Nov 2002 10:49:36 To : Sasha Pelepeichenko Subject : Красные глаза -------------------------------------------------------------------------------- 08 Nov 02, you wrote: SP> Каждое действие достаточно сложное. ИМХО самое сложное - пpогpамно найти SP> галаза, дальше особых пpоблем уже не будет. Мои мысли по поводу нахождения глаз. Задачу можно разбить на два этапа: 1. Hахождение красных "кружочков" 2. Определение, которые из кружочков могут быть глазами Первый этап на мой взгляд сложнее. Его можно попытаться реализовать следующим образом: 1) Ищем все точки, цвета которых близки к типичному цвету красных глаз. Степень близости характеризуем числом. (В фотошопе аналог этого: Select color range, Save selection to new channel). 2) К полученному монохромному изображению (яркость точек которого характеризует близость цвета исходной точки к цвету красных глаз) применяем медианную фильтрацию (Photoshop: Filter/noise/median) для подавления шума. 3) Отбираем наиболее "яркие" точки. (Photoshop: Image/adjust/threshold) 4) В полученной "картинке" ищем односвязные участки, похожие на круги (горизонтальный и вертикальный диаметры близки) Hа данном этапе мы нашли все красные круги. Занесем их центры и диаметры в массив для дальнейшей обработки. Второй этап - нахождение похожих на глаза кружочков 1) Отберем кружки, подходящие по размеру. Hапример, диаметр должен составлять от 0.5% до 5% от размера всей фотографии. Здесь и далее числа написаны от балды. Можно провести исследование, какого размера глаза бывают на фотографиях. Hе забываем, что с близких и далеких расстояний со вспышкой не снимают, так что диапазон допустимых размеров глаз будет довольно узким. Hа этом этапе мы отобрали все глаза, горошины на платьях и другие красные точки. 2) Вспоминаем основное свойство глаз - они расположены попарно, почти на одной горизонтали, причем расстояние между центрами глаз примерно в 5-10 раз больше диаметра зрачков. Рассматриваем кружочки по одному. Для каждого кружочка считаем количество других кружочков, лежащих не дальше, чем ~10 диаметров. Если насчитали больше одного - это не глаза. Если диаметры рассматриваемого и найденного сильно отличаются - это не глаза. Если они ближе, чем 5 диаметров - это не глаза. Если они не на одной горизонтали (например, dy/dx>0.2) - это не глаза. Иначе считаем их глазами и подавляем красный цвет. Впрочем, не думаю, что этот алгоритм будет работать и давать приемлимый результат на практике... * BYE * [ZX] [239] ... --- GoldED/386 3.0.0-mu1 * Origin: Smiling Sun BBS (2:5030/926) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/23193de1fe76.html, оценка из 5, голосов 10
|