Красные глаза

From
Miha Ulanov (2:5030/926)
To
Sasha Pelepeichenko
Date
2002-11-25T09:49:36Z
Area
RU.ALGORITHMS
      Hello!

 08 Nov 02, you wrote:

 SP> Каждое действие достаточно сложное. ИМХО самое сложное - пpогpамно найти
 SP> галаза, дальше особых пpоблем уже не будет.

Мои мысли по поводу нахождения глаз.

Задачу можно разбить на два этапа:
1. Нахождение красных "кружочков"
2. Определение, которые из кружочков могут быть глазами

Первый этап на мой взгляд сложнее. Его можно попытаться реализовать следующим образом:
1) Ищем все точки, цвета которых близки к типичному цвету красных глаз. Степень близости характеризуем числом. (В фотошопе аналог этого: Select color range, Save selection to new channel).
2) К полученному монохромному изображению (яркость точек которого характеризует близость цвета исходной точки к цвету красных глаз) применяем медианную фильтрацию (Photoshop: Filter/noise/median) для подавления шума.
3) Отбираем наиболее "яркие" точки. (Photoshop: Image/adjust/threshold)
4) В полученной "картинке" ищем односвязные участки, похожие на круги (горизонтальный и вертикальный диаметры близки)

На данном этапе мы нашли все красные круги. Занесем их центры и диаметры в массив для дальнейшей обработки.

Второй этап - нахождение похожих на глаза кружочков

1) Отберем кружки, подходящие по размеру. Например, диаметр должен составлять от 0.5% до 5% от размера всей фотографии. Здесь и далее числа написаны от балды. Можно провести исследование, какого размера глаза бывают на фотографиях. Не забываем, что с близких и далеких расстояний со вспышкой не снимают, так что диапазон допустимых размеров глаз будет довольно узким.

На этом этапе мы отобрали все глаза, горошины на платьях и другие красные точки.

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)