Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2019, 17:13   #11
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от kvitaliy Посмотреть сообщение
Ну ясно.
Может сможешь, что посоветовать.

Всё таки не могу успокоиться, всё кажется, что можно выжать больше из 16 цветов.
Был метод "По полубайту. Самый частые цвета", для каждого полубайта находим самым частый цвет и используем его, как один из двух цветов сравниваем с крайними цветами (для левого с левым, для правого с правым), если они встречаются чаще, берем их.

Добавил "По полубайту. Светлый и темный цвет" получились чуть лучше (5-10%), чем аналогичный метод для байта. В нем для каждого полубайта находим "среднюю серость" цветов (сложить серости всех цветов, поделить на их количество), а так же самый темный и светлый цвет в полубайте. Далее определяем по средней серости какой полубайт темнее и их него берем самый темный цвет, а из второго полубайта самый светлый.

Но у обоих есть свои недостатки. В попытка создать гибрид сделал метод "По полубайту. Ближайшие к среднему." В нем для каждого полубайта находим "среднюю серость" цветов , и выбираем ближайший к нему. Далее сравниваем с крайними цветами (для левого с левым, для правого с правым), если они встречаются чаще, берем их. Без этой операции ни куда, получается вообще ужас.

Вот что получилось. Цифрами обозначены проблемные места.
1. Линейность на небе.
2. Плавность линий и переходов.
3. Проявление не главного цвета, но самого яркого. Есть подобные места с темными цветами.
4. Размазанность края здания и опоры.
5. Сочетание колон и деревьев.
6. Люди о основания здания.
7. Просветы между деревьями.

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

У "По полубайту. Светлый и темный цвет" максимальная детализация, но страдает цветопередача (до резкости в глазах) и плавность перехода цветов, линии очень плавные.
Нужно подумать об выборке цвета.

У гибрида "По полубайту. Ближайшие к среднему". Высокая степень размытости изображения, да же больше чем у первого метода. Но лучше цветопередача чем у второго. Не могу сказать, что линейность изображения выше, скорее она более заметна.
Его проблемы в выборе крайних цветов. Но без этого результат ещё хуже, так как не сохраняются переходы цвета.

Хотелось бы получить метод с детализацией второго метода и цветопередачей первого.
Пока гибрид признан не удачным, склонен изъять его из программы.

С уважением, Алексей.

Последний раз редактировалось tae1980; 13.02.2019 в 17:17.
tae1980 вне форума Ответить с цитированием
Старый 14.02.2019, 04:54   #12
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Сообщений: 184
По умолчанию

Судя по палитре 332, самый неудачный вариант это картинки неба. В общем синий (8 бит на канал) цвет даже на графических мониторах плохо отображается, а тут вообще урезали до двух бит.

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




Все картинки в формате 332. Вот палитра:

У Вас такая же вышла?
jillitil вне форума Ответить с цитированием
Старый 14.02.2019, 09:49   #13
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от jillitil Посмотреть сообщение
Судя по палитре 332, самый неудачный вариант это картинки неба. В общем синий (8 бит на канал) цвет даже на графических мониторах плохо отображается, а тут вообще урезали до двух бит.
У Вас такая же вышла?
Палитра похожа. Но тут не всё немного сложнее.
Картинка выбрана из-за того что на ней есть большинство элементов (небо, деревья, мелкие детали, переливы) работу с которыми нужно оттестировать. Главной проблемой являться ограничение двух цветов на 8 точек. Решение работать с изображениями в 16 цветов не идеально, с одной сторны оно снимает большой уровень проблем, с другой потеря в гибкости. Скорее всего используя алгоритмы распределения ошибки можно добиться большего. Но это уже следующий этап работ, пока хочу выжать всё возможное из 16 цветов.
Сегодня ночью сделал "финт хвостом". Подготовил новый метод обработки изображения "По полубайтам. Частые цвета с учетом серости". Это гибрид двух методов описанных выше, он уравновешивает их недостатки, хотя не ликвидируют полностью. Если в байте до трёх цветов применяться метод с самыми частыми цветами. Если более трех то значения бит графики рассчитываться по самому темному и светлому (по сути получаем ч.б. изображение), а цвета накладываться самые частые. При таком подходе видно больше деталей, чем в методе с "частым цветами", но меньше чем в методе "самый темный и светлый цвет", а цвета искажаться меньше чем в методе с делением по яркости, но больше чем в методе с нахождением самых частых цветов. Так же в ряде мест может появиться дополнительная линейность, отсутствующая в методе по яркости. Несмотря на, это итоговый результат получается весьма сбалансированный. Привожу пример.

С палитрой 332rgb, то же не всё понятно. Везде написано, что синяя составляющая имеет значение 0-3. Но вот в одной статье нашел такое:
Цитата:
Условно байт состоит из 3-х частей, которые соотв. Цветам Green – зелёный, Red – красный и Blue –синий. Так как синяя компонента представлена всего 2-я битами, то считается, что у нее есть младший бит, но он равен всегда 0. Т.е. если мы задаем значение синей компоненты в 11 (т.е. десятичное 3), то для получения белого цвета зелёная и красная компоненты должны быть заданы в значение 110 (десятичное 6). И байт палитры соответствующий белому цвету будет выглядеть как 11011011.
Выходит, что синяя составляющая не 0-3, а 0,2,4,6. Статья касается Профи, я связался с автором, он сказал, что писал это на основе анализа схемы аппаратной части. Справедливо ли это во всех случаях, не знаю. Обращаю внимание на часть небо, выделил кружком. Видно, что цвета перенеслись не точно. Где косяк нужно ещё разбираться, но перевод осуществлялся из ход из того, что синяя составляющая имеет значение 0-3. К сожалению, не смотря на то что цвета приведены к палитре 332Rgb, они храняться в палитре 24bpp, и нужно использовать формулы перевода. Я использую вот эту для перевода 24bpp в 8bpp. То есть для получения итогового изображения цвет из 24bpp был переведен в 8bpp, а потом обратно. В теории потерь быть не должно, а они есть.
Код:
#rrr=format(#rrr*(7/255),,0); #ggg=format(#ggg*(7/255),,0); #bbb=format(#bbb*(3/255),,0) /* 24bpp в 8bpp */
#rrr=format(#rrr*(255/7),,0); #ggg=format(#ggg*(255/7),,0); #bbb=format(#bbb*(255/3),,0) /* 8bpp в 24bpp */
Как изменить перевод синей составлявшей если принят, что на может иметь значения 0,2,4,6, хрен его знает.
Так же есть вероятность, что проблема возникает только при обратном переводе в BMP (для вывода на экран), нужно проверить на реальном железе.
Возможно! это как раз проблема высвечивания не главных цветов. Но как проверить это я пока не понял.
С уважением, Алексей.

Последний раз редактировалось tae1980; 14.02.2019 в 10:31.
tae1980 вне форума Ответить с цитированием
Старый 30.07.2019, 12:02   #14
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Хочу снова поднять тему. Но немного с другой стороны
Для начал поясню задачу ещё раз. Есть много цветные изображения. Их нужно привести к 16 из 256 цветам палитра 8bpp 332. И для каждых восьми точек по горизонтали выбрать только два цвета из 16.

Если разбить на этапы то так:
1. Многоцветное изображение приводим к 256 цветам из заданой палитры.
2. Изображение 256 цветов приводим к 16 цветам.
Пункты 1 и 2 могут быть объеденные.
3. Для каждых 8 точек по горизонтали подбираем два цвета из 16 и приводим к ним.

Пункты 2 и 3 в общем похожи, только 2 относиться ко всей картинке и выбирает из палитры 256 цветов (всегда стандартна для всех изображений), а пункт 3 относиться только к 8 точкам и выбирает из 16 ранее выбранных цветов (палитра уникальна для каждого изображения).

Как выполнить пункты 1 и 2 я знаю, но как реализовать пункт 3 нет. Изучая документацию ImageMagick, понял, что можно заставить его самого перебрать всю картинку по 8 точек и произвести для них подбор цвета. Но вот как это делать не разобрался.

Может есть у кого советы, подсказки, примеры?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть n цветов разных видов. Составьте все возможные сочетания букетов из всех этих цветов. Количество цветов и их названия вводит lesha18 Паскаль, Turbo Pascal, PascalABC.NET 1 26.02.2013 16:54
ImageMagick. Конвертирование pdf в jpg. JuniorProger PHP 0 23.09.2012 01:22
ImageMagick и формат DDS J-Max PHP 1 26.08.2012 14:01
Вопрос по ImageMagick ALьT PHP 0 09.11.2011 15:00
Помогите с ImageMagick SENTINEL Мультимедиа в Delphi 1 01.02.2009 06:55