Пусть у меня есть рисунок. Пусть мне задан вопрос: определить доминирующий цвет на фотографии (какого больше) . Верно ли утверждение, что если я смотрю кривые, каждый цветовой канал по отдельности: что общая площадь графика данных гистограмм отражает кол-во цвета в рисунке; и где площадь больше - такого и цвета больше?
Если нет, и этот путь неверен - какие есть пути ответа на поставленный вопрос?
Спасибо.
Обработка и печать фото
Сложный вопрос для любителей и профессионалов фотошопа (проверьте себя):
Очнь простая формула:
getImageColor($pic , $colors_num, $step);
*
* $pic = 'путь к файлу'; (string)
*$colors_num = 'количество возвращаемых цветов'; (int)
*$step = 'шаг пикселей по вертикали и горизонтали'; (int)
*
*$colors -> возращается ассоциативный массив ( [цвет в hex]=>[количество вхождений] )
*/
// start of class : Generator Image Color Palette
class GeneratorImageColorPalette
{
public $error = 1;
//default 0x33;
//погрешность определения цвета
// get image color in RGB format function
function getImageColor($imageFile_URL, $numColors, $image_granularity = 5)
{
$image_granularity = max(1, abs((int)$image_granularity));
$colors = array();
//find image size
$size = @getimagesize($imageFile_URL);
if($size === false)
{
user_error("Unable to get image size data");
return false;
}
// open image
$img = @imagecreatefromjpeg($imageFile_URL);
if(!$img)
{
user_error("Unable to open image file");
return false;
}
// fetch color in RGB format
for($x = 0; $x < $size[0]; $x += $image_granularity)
{
for($y = 0; $y < $size[1]; $y += $image_granularity)
{
$thisColor = imagecolorat($img, $x, $y);
$rgb = imagecolorsforindex($img, $thisColor);
$red = round(round(($rgb['red'] / $this->error)) * $this->error);
$green = round(round(($rgb['green'] / $this->error)) * $this->error);
$blue = round(round(($rgb['blue'] / $this->error)) * $this->error);
$red = ($red>255) ? 255 : $red;
$green = ($green>255) ? 255 : $green;
$blue = ($blue>255) ? 255 : $blue;
$red = dechex($red);
$green = dechex($green);
$blue = dechex($blue);
$red = (strlen($red) == 1) ? '0'.$red : $red;
$green = (strlen($green) == 1) ? '0'.$green : $green;
$blue = (strlen($blue) == 1) ? '0'.$blue : $blue;
//$thisRGB = sprintf('XXX', $red, $green, $blue);
//$thisRGB = dechex($red).dechex($green).dechex($blue);
$thisRGB = $red.$green.$blue;
if(array_key_exists($thisRGB, $colors))
{
$colors[$thisRGB]++;
}
else
{
$colors[$thisRGB] = 1;
}
}
}
arsort($colors);
// returns maximum used color of image format like #C0C0C0.
return array_slice(($colors), 0, $numColors,true);
}
// html color to convert in RGB format color like R(255) G(255) B(255)
function getHtml2Rgb($str_color)
{
if ($str_color[0] == '#')
$str_color = substr($str_color, 1);
if (strlen($str_color) == 6)
list($r, $g, $b) = array($str_color[0].$str_color[1],
$str_color[2].$str_color[3],
$str_color[4].$str_color[5]);
elseif (strlen($str_color) == 3)
list($r, $g, $b) = array($str_color[0].$str_color[0], $str_color[1].$str_color[1], $str_color[2].$str_color[2]);
else
return false;
$r = hexdec($r); $g = hexdec($g); $b = hexdec($b);
$arr_rgb = array($r, $g, $b);
// Return colors format liek R(255) G(255) B(255)
getImageColor($pic , $colors_num, $step);
*
* $pic = 'путь к файлу'; (string)
*$colors_num = 'количество возвращаемых цветов'; (int)
*$step = 'шаг пикселей по вертикали и горизонтали'; (int)
*
*$colors -> возращается ассоциативный массив ( [цвет в hex]=>[количество вхождений] )
*/
// start of class : Generator Image Color Palette
class GeneratorImageColorPalette
{
public $error = 1;
//default 0x33;
//погрешность определения цвета
// get image color in RGB format function
function getImageColor($imageFile_URL, $numColors, $image_granularity = 5)
{
$image_granularity = max(1, abs((int)$image_granularity));
$colors = array();
//find image size
$size = @getimagesize($imageFile_URL);
if($size === false)
{
user_error("Unable to get image size data");
return false;
}
// open image
$img = @imagecreatefromjpeg($imageFile_URL);
if(!$img)
{
user_error("Unable to open image file");
return false;
}
// fetch color in RGB format
for($x = 0; $x < $size[0]; $x += $image_granularity)
{
for($y = 0; $y < $size[1]; $y += $image_granularity)
{
$thisColor = imagecolorat($img, $x, $y);
$rgb = imagecolorsforindex($img, $thisColor);
$red = round(round(($rgb['red'] / $this->error)) * $this->error);
$green = round(round(($rgb['green'] / $this->error)) * $this->error);
$blue = round(round(($rgb['blue'] / $this->error)) * $this->error);
$red = ($red>255) ? 255 : $red;
$green = ($green>255) ? 255 : $green;
$blue = ($blue>255) ? 255 : $blue;
$red = dechex($red);
$green = dechex($green);
$blue = dechex($blue);
$red = (strlen($red) == 1) ? '0'.$red : $red;
$green = (strlen($green) == 1) ? '0'.$green : $green;
$blue = (strlen($blue) == 1) ? '0'.$blue : $blue;
//$thisRGB = sprintf('XXX', $red, $green, $blue);
//$thisRGB = dechex($red).dechex($green).dechex($blue);
$thisRGB = $red.$green.$blue;
if(array_key_exists($thisRGB, $colors))
{
$colors[$thisRGB]++;
}
else
{
$colors[$thisRGB] = 1;
}
}
}
arsort($colors);
// returns maximum used color of image format like #C0C0C0.
return array_slice(($colors), 0, $numColors,true);
}
// html color to convert in RGB format color like R(255) G(255) B(255)
function getHtml2Rgb($str_color)
{
if ($str_color[0] == '#')
$str_color = substr($str_color, 1);
if (strlen($str_color) == 6)
list($r, $g, $b) = array($str_color[0].$str_color[1],
$str_color[2].$str_color[3],
$str_color[4].$str_color[5]);
elseif (strlen($str_color) == 3)
list($r, $g, $b) = array($str_color[0].$str_color[0], $str_color[1].$str_color[1], $str_color[2].$str_color[2]);
else
return false;
$r = hexdec($r); $g = hexdec($g); $b = hexdec($b);
$arr_rgb = array($r, $g, $b);
// Return colors format liek R(255) G(255) B(255)
..неверно - количество цветов на картинке, обычно значительно больше, чем количество цветовых каналов...
А вы н в курсе что там яркость цвета отображается.. .
это вопрос не для ,..фотошопа а для детей... .
Задайте корректно вопрос.. .
Учитывая частоты... .
или хоть пространство цветовое...
это вопрос не для ,..фотошопа а для детей... .
Задайте корректно вопрос.. .
Учитывая частоты... .
или хоть пространство цветовое...
Вообще-то для начал неплохо бы определиться, что такое преобладающий цвет и вообще, с какой стороны мы его будем определять: как цвет, занимающий не менее заданного процента от площади изображения или как цвет, имеющий отклонение не выше заданного от "центрального".
В частности, каков будет преобладающий цвет на картинке из 30% красного, 30% оранжевого и 40% зелеого? Красно-оранжевый или зеленый?
Если нам задана (или вычислена) некоторая погрешность, мы можем разбить цветовой куб на зоны, размеры которых примерно соответствуют величине погрешности (например на 10 частей при 10% и 20 частей при 5%) по каждой из цветовых координат.
При 10% получаем примерно 1000 зон (цвет трехмерен) .
Далее оцениваем, по сколько в среднем пикселей попадет в одну зону. Например, для рисунка 320х240 - примерно 77 штук. Если это число оказалось меньше нескольких единиц (например 4), вряд ли задача в такой постановке разрешима.
Далее мы выделяем зоны скопления цветов. Обозначив их границы примерно, можно разделить окрестности раниц на более подробные подзоны - для более точного опрелеления. Находим самую представительную зону скопления и принимаем решение о том, как будем вычислять средний по зоне цвет - как максимально удаленный от границ зоны либо как средневзвешенное значение по пикселям, входящим в зону.
В частности, каков будет преобладающий цвет на картинке из 30% красного, 30% оранжевого и 40% зелеого? Красно-оранжевый или зеленый?
Если нам задана (или вычислена) некоторая погрешность, мы можем разбить цветовой куб на зоны, размеры которых примерно соответствуют величине погрешности (например на 10 частей при 10% и 20 частей при 5%) по каждой из цветовых координат.
При 10% получаем примерно 1000 зон (цвет трехмерен) .
Далее оцениваем, по сколько в среднем пикселей попадет в одну зону. Например, для рисунка 320х240 - примерно 77 штук. Если это число оказалось меньше нескольких единиц (например 4), вряд ли задача в такой постановке разрешима.
Далее мы выделяем зоны скопления цветов. Обозначив их границы примерно, можно разделить окрестности раниц на более подробные подзоны - для более точного опрелеления. Находим самую представительную зону скопления и принимаем решение о том, как будем вычислять средний по зоне цвет - как максимально удаленный от границ зоны либо как средневзвешенное значение по пикселям, входящим в зону.
...у меня встречный вопрос - зачем???
Вот когда собаке делать нечего, она яйца лижет. Уж извините.
Не сложный а дебильный вопрос.
пил??
что такое фотошеп?
грузим фото и радуваемся :D
Ни фига!.. Там какая-то сложная формула... ну вот тут даже скрипт какой-то есть.
Похожие вопросы
- Вопрос к знатокам в Photoshop (Фотошоп) Обрабатываю себя в кошку, как сделать ушки и волосы похожие по тону?
- Просьба к профессионалам фотошопа... Вырежьте, пожалуйста собачку из фото!
- Помогите! вопрос про голые *опы и фотошоп! да, это связано между собой и причем сильно! прочтите плз----
- вопрос замыленный. кто как постигал фотошоп? интересуют личные примеры
- Вопрос для тех, кто владеет фотошопом
- Ребят, для меня очень важен этот вопрос (для любителей фото)
- Те, кто хорошо разбираются в фотошопе! Подскажите, пожалуйста, как можно так обработать фото, не обращаясь к профессионалу?
- Народ, вопрос по фотошопу и кадрированию...
- Совет профессионалам в фотошопе
- несколько вопросов по фотошопу....ВНУТРИ