Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 15

Тема: Привести цвет к одному из двух основных

  1. #1
    Member Аватар для tae1980
    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    172
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Привести цвет к одному из двух основных

    Такая задачка.

    Есть два цвета принятые как основные. Палитра 8bpp (rrrgggbb).
    Нужно привести (приравнять) третий цвет к одному из основных цветов, который больше всего подходит.

    Может кто подскажет алгоритм или направление куда рыть?

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,119
    Записей в дневнике
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    5 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    как вариант -покурить сырки bmp2scr или другого продвинутого конвертера. или, как вариант, почитать про квантизацию цветов например.

  4. #3
    Member Аватар для tae1980
    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    172
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Поиск ближайшего цвета в палитре

    Ответ найден (но ещё не тестировал). Поиск ближайшего цвета в палитре.

    Этот алгоритм Вам может понадобиться когда например нужно перекодировать картинку с одной палитры на другую. Для решения рассмотрим более простую задачу - нужно найти в некоторой палитре из n цветов, цвет максимально похожий на некоторый заданный цвет.

    Введем обозначения:

    (R0,G0,B0) - цвет, аналог которого нужно найти в палитре.
    (Ri,Gi,Bi) - i-тый цвет в палитре.

    Различие цветов будем оценивать с помощью следующей функции:
    fi = 30*(Ri-R0)2+59*(Gi-G0)2+11*(Bi-B0)2.

    Множители 30;59;11 - отражают различную чувствительность человеческого глаза к красному,зеленому и синему цветам соответственно. Далее мы поочереди перебираем все цвета палитры и ищем цвет, для которого fi принимает минимальное значение. Это и будет искомый цвет.

    Код:
     // структуры
     typedef struct RGB_type
     {
     char r,g,b;
     } RGB;
    
     typedef struct Pal_type
     {
     int n;   // число цветов в палитре
     RGB* C;
     } Pal;
    
     // это подпрограмма поиска
     // P - палитра
     // С - цвет, который требуется найти
     // Возвращаемое значение - индекс цвета в палитре
     int FindColor(Pal *P,RGB *C)
     {
        int i, fi, best_color, f_min=1000000;
        for(i=0;i<P->n,i++)
           {
           fi=30*(P->C.r-C->r)*(P->C.r-C->r)+
              59*(P->C.g-C->g)*(P->C.g-C->g)+
              11*(P->C.b-C->b)*(P->C.b-C->b);
           if(fi<f_min){best_color=i,f_min=fi;}
           }
        return(best_color); }

  5. #4
    Member
    Регистрация
    09.04.2009
    Адрес
    Зеленоград
    Сообщений
    185
    Спасибо Благодарностей отдано 
    13
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    42 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У меня была задача преобразовать полноцветные картинки RGB888
    в палитру для Spec256. В палитре - 256 цветов в кодировке RGB888.
    В картинках, где преобладал синий цвет, поиск минимума отличий
    был лучше по формуле 1R+1G+1B вместо 3R+6G+1B.
    В других наоборот.
    Нажмите на изображение для увеличения. 

Название:	ship1.jpg 
Просмотров:	82 
Размер:	44.1 Кб 
ID:	67771
    Нажмите на изображение для увеличения. 

Название:	ship2.jpg 
Просмотров:	64 
Размер:	96.0 Кб 
ID:	67772
    Нажмите на изображение для увеличения. 

Название:	ship5.jpg 
Просмотров:	67 
Размер:	51.7 Кб 
ID:	67773
    Нажмите на изображение для увеличения. 

Название:	ship7.jpg 
Просмотров:	56 
Размер:	92.2 Кб 
ID:	67774
    Нажмите на изображение для увеличения. 

Название:	lady.jpg 
Просмотров:	79 
Размер:	97.5 Кб 
ID:	67775
    Нажмите на изображение для увеличения. 

Название:	dizzy.jpg 
Просмотров:	66 
Размер:	57.7 Кб 
ID:	67776

  6. #5
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    2,713
    Записей в дневнике
    2
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Exclamation

    Цитата Сообщение от tae1980 Посмотреть сообщение
    Множители 30;59;11 - отражают различную чувствительность человеческого глаза к красному,зеленому и синему цветам соответственно...
    ...отображаемым на устройстве древнего стандарта NTSC. Для других стандартов другие пр0центы:
    http://www.brucelindbloom.com/index....YZ_Matrix.html (в матрицах смотреть на вторую строку)
    Прихожу без разрешения, сею смерть и разрушение...

  7. #6
    Member Аватар для tae1980
    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    172
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Lethargeek, И что лучше взять для Профи 5.06, палитра 16 из 256 (rrrgggbb) с выводом на жк монитор?
    Я не спец по графике, можно для таких ткнуть пальцем? Была бы одна матрица, а там целый веер.
    Последний раз редактировалось tae1980; 22.01.2019 в 00:46.

  8. #7
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    2,713
    Записей в дневнике
    2
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    tae1980, лучше - знать, на какой стандарт рассчитывал автор пикчи
    да не парься, просто напиши конвертер с выводом кучи вариантов всех сразу
    просматривай потом результаты и выбирай каждый раз один на свой вкус
    Прихожу без разрешения, сею смерть и разрушение...

  9. #8
    Member Аватар для tae1980
    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    172
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В продолжении темы.
    В текущей версии конвектора изображения под экран Profi реализованы две схемы выборки цветов для байта:
    1. Находим два самых частых цвета, остальные приводим к ним.
    2. То же, но если по краям находятся два самых светлых или самых темных цвета, приводом все цвета к ним.

    Начитался про квантизацию изображений, но тут не много другая задача. Не вижу возможности применить её здесь. Или я не прав?

    Вопрос: можно ли улучшить качество? Будут ли советы, рекомендации?

    Вот два примера:

    Скрытый текст

    [свернуть]

    Скрытый текст

    [свернуть]
    Последний раз редактировалось tae1980; 26.01.2019 в 00:02.

  10. #9
    Master
    Регистрация
    06.02.2009
    Адрес
    Кемерово
    Сообщений
    867
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    10 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Про дизеринг напомнить?
    https://ru.wikipedia.org/wiki/Дизеринг
    ПК8010 "Корвет"+ExtRom+AY, Atari 65XE+SDrive, Дельта-С(52ИС)+AY, Scorpion ZS 1024+SMUC

  11. #10
    Member Аватар для tae1980
    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    172
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    marinovsoft, думал о нем. Но для меня это сложно.
    Поступаю так в фотошопе сначала индексирую цвет к 256 в палитре Профи. Потом делаю цвет снова 24 битным. После привожу к 16 цветам. Такая последовательность, так как фотошоп не позволяет привести к 16 цветам если загружена палитра 256 цветов.
    если я правильно понимаю, то квантизацию и дизеринг изображения делает при этих манипуляциях фотошоп.

    Я же беря подготовленный файл, привожу палитру 24bpp к палитре Профи и объединяю последовательность из 8 точек в байт. Так как у Профи 2 цвета на 8 точек. Для чего нужно выкинуть до 6 цветов, приведя их к двум основным (правила их выбора из 8 возможных описал выше). От сюда и вылазит "размазывание" картинок.

    Думаю дизеринг в данной ситуации мог бы помочь "сгладить" изображение. Но вот как его организовать я не пойму.
    Последний раз редактировалось tae1980; 23.01.2019 в 17:36.

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Реально ли отъюстировать 2 дисковода один к одному?
    от Evgeny Muchkin в разделе Внешние накопители
    Ответов: 33
    Последнее: 01.04.2018, 12:19
  2. Как привести в чувства пленочную клаву?
    от Evgeny Muchkin в разделе Устройства ввода
    Ответов: 6
    Последнее: 08.02.2017, 09:00

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •