2015-02-27 30 views
0

Учитывая значение RGB всех пикселей изображения, как мы можем найти вероятность того, что данный пиксель имеет цвет кожи и какой процент изображения имеет цвет кожи.Кожа вероятности данного пикселя изображения

+2

Ваш вопрос слишком широк. Как вы определяете цвет кожи - он варьируется в зависимости от многих факторов, таких как раса, здоровье, степень загара и т. Д. Какую терпимость вы могли бы приложить? Ваши два вопроса также равны одному и тому же. –

+1

Тег [processing] должен использоваться только для вопросов о языке обработки. –

+0

@utlesh singh Есть, вероятно, довольно много алгоритмов. Вы посмотрели на преобразование цветового пространства RGB в YCrCb, а затем попытались обнаружить в этом цветовом пространстве? (один из [1-го ответов] (http://www.wseas.us/e-library/conferences/2011/Mexico/CEMATH/CEMATH-20.pdf), который я нашел в google, является документом о процентах цвета кожи) –

ответ

2

нудлинг вокруг на Google говорит мне, что кавказские тона кожи часто, или, может быть, как правило, или, может быть, иногда соответствовать следующим рода правилу:

Blue channel: 140-180 
Green channel: Blue * 1.15 
Red channel: Blue * 1.5 

Итак, имея это в виду, я сделал несколько образцов цвета которые соответствуют тому, что с ImageMagick, используя эту команду:

#!/bin/bash 
for b in $(seq 140 5 180); do 
    g=$(echo "$b * 1.15/1" | bc) 
    r=$(echo "$b * 1.5/1" | bc) 
    convert -label "R:$r,G:$g,B:$b" -size 200x200 xc:"rgb($r,$g,$b)" miff:- 
done | montage - -frame 5 -tile 3x swatches.png 

И получил это:

enter image description here

Хорошо, эти взгляды кажутся разумными, теперь я пытаюсь использовать их для обнаружения тонов кожи, снова с помощью ImageMagick. На данный момент, и только таким образом вы можете видеть это, я собираюсь цвет лайма-зеленый Everthing я обнаружить как скин-тон, с помощью этого, который находится прямо в середине диапазона тонов, указанных выше:

convert -fuzz 5% face1.jpg -fill lime -opaque "rgb(240,184,160)" out.jpg 

enter image description here

Mmmm, не очень хорошо. Может быть, увеличить размытость?

enter image description here

Мммм, все еще довольно мусор - собирание только часть кожи и некоторые из белой рубашки воротник. Может быть, другое лицо?

enter image description here

Хорошо, не плохо распознают его, хотя уведомление, что полностью не удается обнаружить правую сторону его лица, однако есть еще несколько проблем, как мы можем видеть из розового кадиллака:

enter image description here

и мисс Пигги ниже ...

enter image description here

Возможно, мы можем быть немного более целенаправленными в нашем поиске, и, хотя я не могу рисовать его в 3-D, я могу объяснить в 2-D. Вместо того, чтобы нацеливать на один большой круг (фактически сферу в трехмерном пространстве) в середине нашего диапазона, возможно, мы могли бы нацелить несколько меньших кругов, распространяющихся по нашему диапазону, и тем самым включать меньше посторонних цветов ... пурпурный представляет степень пуха ,Таким образом, вместо этого:

enter image description here

мы могли бы сделать это:

enter image description here

с помощью этой команды:

convert -fuzz 13% face1.jpg -fill lime \ 
    -opaque "rgb(219,168,146)"   \ 
    -opaque "rgb(219,168,146)"   \ 
    -opaque "rgb(255,198,172)" out.jpg 

enter image description here

Таким образом, вы можете увидеть его довольно сложно найти оттенки кожи только с помощью значений RGB, и я даже не начал обращать внимание на разные расы, различное освещение и т. д.

Другой подход может заключаться в использовании другого цветового пространства, такого как HSL - Hue Saturation и Lightness. Мы не так заинтересованы в Lightness, потому что это всего лишь функция воздействия, поэтому мы ищем оттенки, которые соответствуют оттенкам кожи и некоторой степени насыщения, чтобы избежать размытых цветов. Вы можете сделать это с помощью ImageMagick, как это:

#!/bin/bash 
convert face1.jpg -colorspace hsl -separate   \ 
    \(-clone 0 -threshold 7% -negate +write h.png \) \ 
    \(-clone 1 -threshold 30% +write s.png  \) \ 
    -delete 0-2 -evaluate-sequence min out.png 

Это говорит, что это ... Берут образ face1.jpg и преобразовать его в HSL цветового, затем слои разделяют таким образом, мы теперь имеем 3 изображения в нашем стеке. image 0 - это оттенок, image 1 - это насыщенность и image 2 - это легкость. Следующая строка. Возьмите слой Hue и его порог на 7%, что означает розово-красный цвет, инвертируйте его и сохраните (просто чтобы вы его увидели), как h.png. Следующая строка. Возьмите слой насыщения и скажите «любая насыщенность более 30%, это достаточно хорошо для меня», затем сохраните как файл s.png. Следующая строка. Удалите 3 исходных слоя (HS & L) с исходного изображения, оставив только пороговые уровни оттенков и пороговых уровней насыщенности. Теперь поставьте эти ontop друг друга и выберите тот, который является минимальным, и сохраните его. Дело в том, что либо слой Hue, либо Saturation можно использовать для gate, какие пиксели выбраны.

Вот файлы, сначала Hue (h.png):

enter image description here

рядом Насыщенность (s.png):

enter image description here

и теперь объединенный выходной файл.

enter image description here

После того, как вы получили ваш алгоритм выяснял решить, какие пиксели кожи цвета, вам нужно будет считать их отработать проценты, которые вы ищете. Это довольно просто ... все, что мы делаем, - это изменить все, что не является липовым-зеленым, до черного (поэтому оно равно нулю в усреднении), а затем изменить размер изображения на один пиксель и получить его цвет как текст:

convert -fuzz 13% face1.jpg -fill lime  \ 
    -opaque "rgb(219,168,146)"    \ 
    -opaque "rgb(219,168,146)"    \ 
    -opaque "rgb(255,198,172)"    \ 
    -fill black +opaque lime -resize 1x1! txt: 

# ImageMagick pixel enumeration: 1,1,255,srgb 
0,0: (0,92,0) #005C00 srgb(0,92,0) 

Мы можем видеть, что нет ничего удивительного в отсутствии красного и синего, а средний цвет зеленых пикселей - 92/255, поэтому 36% пикселей соответствуют нашему описанию скинов.

Если вы хотите получить более изощренную форму, вам, возможно, придется искать формы, текстуры и контексты, или обучить классификатор скинов и написать целую кучу вещей в OpenCV или somesuch ...

+1

Это просто эпично. Любите использовать Роуэн Аткинсон. +1 – rayryeng

Смежные вопросы