Nano Hash - криптовалюты, майнинг, программирование

PHP - найти ближайший RGB к предопределенному RGB из списка

Моя цель — найти наиболее близкое соответствие RGB по сравнению с RGB из массива. Я уже создал функцию, которая перебирает каждый пиксель изображения. Единственное, что мне сейчас нужно, это найти ближайший цвет каждого пикселя изображения к цвету из массива.

$colors = array(
    array(221,221,221),
    array(219,125,62),
    array(179,80,188),
    array(107,138,201),
    array(177,166,39),
    array(65,174,56),
    array(208,132,153),
    array(64,64,64),
    array(154,161,161),
    array(46,110,137),
    array(126,61,181),
    array(46,56,141),
    array(79,50,31),
    array(53,70,27),
    array(150,52,48),
    array(25,22,22)
);

Я попытался преобразовать изображение в 8 бит, чтобы уменьшить количество цветов и сравнить их позже в базе данных, но это не кажется хорошей идеей.

02.06.2013

  • суммировать массивы и сравнивать наименьшую абсолютную разницу? 02.06.2013
  • Какую метрику расстояния вы хотели бы использовать? Абсолютная разница, квадрат абсолютной разницы или, может быть, метрика восприятия? 02.06.2013
  • Вы уже определили подходящую метрику восприятия? 02.06.2013
  • Я определил более 800 различных значений RGB в mySQL. 02.06.2013
  • Если у вас так много цветов, различия с разными показателями, вероятно, незначительны. Вы пробовали код ниже? 02.06.2013
  • Да, я пробовал это, хотя, похоже, это не работает должным образом. 02.06.2013

Ответы:


1

Попробуйте это так:

$inputColor = array(20,40,80);

function compareColors($colorA, $colorB) {
    return abs($colorA[0] - $colorB[0]) + abs($colorA[1] - $colorB[1]) + abs($colorA[2] - $colorB[2]);
}

$selectedColor = $colors[0];
$deviation = PHP_INT_MAX;

foreach ($colors as $color) {
    $curDev = compareColors($inputColor, $color);
    if ($curDev < $deviation) {
        $deviation = $curDev;
        $selectedColor = $color;
    }
}

var_dump($selectedColor);

Преимущество этого решения в том, что вы можете легко заменить функцию сравнения. Также можно было бы использовать

Отказ от ответственности: могут быть более элегантные способы реализации, возможно, с использованием map.

02.06.2013
  • Ваша функция не работает должным образом. Я не уверен, может быть, мне нужно как-то отсортировать цвета? 02.06.2013
  • Сортировка конечно не нужна. В чем проблема? 02.06.2013
  • Я установил inputColor в массив (20,22,22), и данный результат равен 221 221 221, хотя должно быть 25,22,22. Что гораздо ближе. 02.06.2013
  • Ваш код, кажется, работает правильно прямо сейчас. Большое спасибо ! 02.06.2013
  • Спасибо, пожалуйста. Обратите внимание, что вы всегда можете настроить функцию compareColors, если вас не устраивают результаты. 02.06.2013
  • Его не нужно будет настраивать. Работает отлично, как раз то, что мне было нужно! 02.06.2013
  • Какая легенда! Спасатель жизни! 11.03.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..