User Tag List

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

Тема: Чанка 2х2

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,964
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    314
    Поблагодарили
    237 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    Exclamation

    Цитата Сообщение от tae1980 Посмотреть сообщение
    1. ИМХО с сточки зрения Профи это всё таки биты, а то что раскрашены, это частный случай их применения. Я кончено могу ошибаться, то это диктует физическое строение экрана.
    2. Все описанный метод УЖЕ применялись с данной картинке (я использую фотошоп). Картинка уже 16 цветов из 256 в палитре Профи.
    Вот это-то и плохо! Еще раз говорю: ЗАБУДЬ про биты и профик, это знание сейчас только тебе мешает, сбивает с толку. У тебя задача конвертировать картинку с исходным пиксельным форматом (допустим, RGB32) в картинку с ТАКИМ ЖЕ пиксельным форматом, но с ДРУГИМИ ЦВЕТАМИ, которые умеет профик. И вот её уже потом, на самом последнем этапе, элементарно конвертируешь в свои биты.

    Цитата Сообщение от tae1980 Посмотреть сообщение
    3. При переводе цвета в биты у нас из 3-8 цветов остается только 2.
    Неверно. Нужно не выбирать два цвета из имеющихся (притом уже испорченных фотошопом), а найти два НОВЫХ целевых цвета обработкой восьми оригинальных. К сожалению, объективного критерия для выбора быть не может. Я бы для начала поступил так:
    1) находим субъективную яркость каждого из 8 цветов по коэффициентам матриц по прошлой ссылке
    2) находим статистическую медиану по этим яркостям и делим яркости на две группы
    3) находим средневзвешенную яркость для каждой группы
    4) находим наиболее близкие по субъективной яркости цвета профика
    Это и будут два новых ЦЕЛЕВЫХ (то есть напрямую сразу в них НЕ меняем) цвета полоски 8x1, нужных в качестве ВХОДНЫХ ДАННЫХ для совершенно самостоятельного алгоритма распределения ошибки (который сам по себе попиксельный и которому хоть на каждом шаге можно новые входные подсовывать).

    Что касается фотошопа, то его лучше применить для предварительного сглаживания картинки, уборки шума, но не для конвертирования цвета.

    Цитата Сообщение от tae1980 Посмотреть сообщение
    Предлагаемый алгоритм для каждого байта:
    1. Определяем два основных цвета в байте.
    2. Берем первый цвет, приводим к одному из двух цветов,
    3. Получаем ошибку. (входит, что передать ошибку можем только вправо, так как байт линейный)
    4. Передаем её следующему цвету в байте.
    Вот о чём я и говорю - постоянно рассуждаешь о битах-байтах, в результате возникают странные мысли наподобие рассуждений в скобках в п.3
    Еще раз - обрабатываешь НЕ биты-байты, обрабатываешь ПИКСЕЛИ! - соответственно передать ошибку можешь в ЛЮБЫЕ ПИКСЕЛИ, вправо, вниз, по диагонали, через один - как захочется конкретному алгоритму.
    Прихожу без разрешения, сею смерть и разрушение...

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

  3. #2

    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    438
    Спасибо Благодарностей отдано 
    144
    Спасибо Благодарностей получено 
    115
    Поблагодарили
    50 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Lethargeek, пока я сживаюсь с основным ответом, хочу задать два косвенных вопросов.
    1. Почему вы считаете, Фотошоп портит рисунка? Он же проделывает те же операции.
    2. После прохождения алгоритма, на выходе получаем картинку с цветом на пиксель? И при конверсии в байт получим те же проблемы? Или можно выстроить алгоритм так, что на выходе на картинке будет два цвета на 8 точек, и тогда конверсия в байт будет элементарной?

  4. #3

    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Допустим у нас чёрно-белое изображение. 8 пикселей имеют яркость 50, 102, 54, 106, 58, 100, 62, 150. Если их преобразовать из оригинала, можем получить яркости 55 110 55 110 55 110 55 110. Два цвета, с малой погрешностью, причём недостаток яркости последнего пикселя можем не напрягаясь перебросить на соседний, в любом направлении - вверх, вниз, вправо... После приведения редактором картинки к 16 цветам получаем номера цветов 4 9 4 10 5 9 5 15 и мучительно думаем что с этим богатством теперь делать, потому что цветов в этой группе аж 5, и переброс погрешности в 16-цветной RGB палитре нетривиальная задача.

  5. #4

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,964
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    314
    Поблагодарили
    237 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tae1980 Посмотреть сообщение
    1. Почему вы считаете, Фотошоп портит рисунка? Он же проделывает те же операции.
    Если те же, то зачем писать свой конвертер и к чему вообще все вопросы? Если нет, то ненужная потеря информации происходит.

    Цитата Сообщение от tae1980 Посмотреть сообщение
    2. После прохождения алгоритма, на выходе получаем картинку с цветом на пиксель? И при конверсии в байт получим те же проблемы? Или можно выстроить алгоритм так, что на выходе на картинке будет два цвета на 8 точек, и тогда конверсия в байт будет элементарной?
    Так именно об этом и говорил.

    - - - Добавлено - - -

    Цитата Сообщение от Bolt Посмотреть сообщение
    и переброс погрешности в 16-цветной RGB палитре нетривиальная задача.
    ё-моё, ну так и не надо в 16-цветной фигнёй страдать, вся конверсия производится в палитре оригинала
    а точнее даже, в общем случае - в наиболее богатой палитре, покрывающей и результат, и оригинал
    просто в получившейся картинке остаётся намного меньшее количество уникальных цветов
    Прихожу без разрешения, сею смерть и разрушение...

  6. #5

    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Lethargeek, это сообщение предназначалось для tae1980, и я полностью согласен что не надо страдать 16-цветной фигнёй

    Из спортивного интереса пробовал выводить видео микроконтроллером, использовал дельта-кодирование 8 бит на пиксель и некоторые другие способы сжатия. Самому теперь интересно попробовать оптимизировать изображение в такой формат и посмотреть что из этого получится.

  7. #6

    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    438
    Спасибо Благодарностей отдано 
    144
    Спасибо Благодарностей получено 
    115
    Поблагодарили
    50 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Заранее прошу прощения за тупиз. Повторюсь, я геодезист, по этому эта тема очень далека от меня, а школьный курс алгебры я благополучно забыл 20 лет назад. Так что мне банально не хватает базы.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    Вот это-то и плохо! Еще раз говорю: ЗАБУДЬ про биты и профик, это знание сейчас только тебе мешает, сбивает с толку. У тебя задача конвертировать картинку с исходным пиксельным форматом (допустим, RGB32) в картинку с ТАКИМ ЖЕ пиксельным форматом, но с ДРУГИМИ ЦВЕТАМИ, которые умеет профик. И вот её уже потом, на самом последнем этапе, элементарно конвертируешь в свои биты.
    Всё, забыли.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    Неверно. Нужно не выбирать два цвета из имеющихся (притом уже испорченных фотошопом), а найти два НОВЫХ целевых цвета обработкой восьми оригинальных. К сожалению, объективного критерия для выбора быть не может. Я бы для начала поступил так:
    1) находим субъективную яркость каждого из 8 цветов по коэффициентам матриц по прошлой ссылке
    То есть для каждого цвета применяем эту формулу: "RGB Значение яркости = 0,3 R + 0,59 G + 0,11 B"?

    Нашел статью "Об относительной яркости, или насколько живучим бывает легаси"
    Исходя из нее формула должна быть такой: Y= 0.2126R + 0.7152G + 0,0722В

    Но у Профи слабая синяя составляющийся цвета только 2 бита, тогда как у остальных 3. Нужно ли здесь, что-то корректировать?

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    2) находим статистическую медиану по этим яркостям и делим яркости на две группы
    Сортируем полученные значения от большего к меньшему, и за медиану берем то значение которое окажется в центре?

    Или нашел такое: "
    * Если у вас нечетное количество чисел, вычеркните левое крайнее число, затем правое крайнее число и так далее. Один оставшийся номер и будет искомой медианой. Если вам дан ряд чисел 4, 7, 8, 11, 21, тогда 8 — медиана, так как 8 стоит посередине.
    * Если у вас четное количество чисел, вычеркните по одному числу с каждой стороны, пока у вас не останется два числа посередине. Сложите их и разделите на два. Это и есть значение медианы. Если вам дан ряд чисел 1, 2, 5, 3, 7, 10, то два средних числа — это 5 и 3. Сложим 5 и 3, получим 8, разделим на два, получим 4. Это и есть медиана."

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    3) находим средневзвешенную яркость для каждой группы
    За вес берётся количество повторения цвета?
    Тогда: для каждого цвета: яркость цвет*число повторений
    Складываем получившееся и делим на размер группы.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    4) находим наиболее близкие по субъективной яркости цвета профика
    Это и будут два новых ЦЕЛЕВЫХ (то есть напрямую сразу в них НЕ меняем) цвета полоски 8x1, нужных в качестве ВХОДНЫХ ДАННЫХ для совершенно самостоятельного алгоритма распределения ошибки (который сам по себе попиксельный и которому хоть на каждом шаге можно новые входные подсовывать).
    То есть нужно все цвета Профи перевести по формуле из первого пункта в серый цвет. И потом найти ближайший?

    Сначала мы картинку прогоняем через алгоритма распределения ошибки к 16 из 256 цветам, а потом собираем байт по этому алгоритму?
    А приводить цвета внутри байта к каким? К 16 или 256? Если к 256, потом снова нужно прогоняем через алгоритма распределения ошибки?

    Lethargeek, попробовал применить описанный алгоритм на 16 цветной картинке, получил такой результат.

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


    [свернуть]
    Последний раз редактировалось tae1980; 28.01.2019 в 22:50.

  8. #7

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,964
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    314
    Поблагодарили
    237 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tae1980 Посмотреть сообщение
    Но у Профи слабая синяя составляющийся цвета только 2 бита, тогда как у остальных 3. Нужно ли здесь, что-то корректировать?
    ничего, в формулу идут относительные доли от разных максимальных уровней компонент

    Цитата Сообщение от tae1980 Посмотреть сообщение
    ...
    ok (хотя я не утверждаю, что это лучший метод, но для начала)

    Цитата Сообщение от tae1980 Посмотреть сообщение
    Сначала мы картинку прогоняем через алгоритма распределения ошибки к 16 из 256 цветам, а потом собираем байт по этому алгоритму?

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    Это и будут два новых ЦЕЛЕВЫХ (то есть напрямую сразу в них НЕ меняем) цвета полоски 8x1, нужных в качестве ВХОДНЫХ ДАННЫХ для совершенно самостоятельного алгоритма распределения ошибки (который сам по себе попиксельный и которому хоть на каждом шаге можно новые входные подсовывать).
    Входных данных! Даже выделено нарочно! Вот как можно "сначала прогонять алгоритм", для которого еще не готовы входные данные?? И про байты не было там ни слова!

    Цитата Сообщение от tae1980 Посмотреть сообщение
    попробовал применить описанный алгоритм на 16 цветной картинке,
    1) сначала желательно найти оригинальную (и не слишком сильно пожатую) фотографию в RGB32 формате, а не испорченное штрихованное убожество
    2) даже если такая не нашлась, всё равно конвертировать сперва картинку в этот формат, потому что для распределения ошибки кодировка цвета нужна прямая
    3) выбрать целевую палитру профика из 16 цветов (а вот хз как, это отдельная задача, для начала попробуй фиксированную или подбери творчески)
    4) вычислить все целевые цвета для всех групп 8x1 пикселей и отдельно запомнить их (с самой картинкой еще ничего не делаем!)
    5) вот только теперь прогнать по картинке алгоритм распределения ошибки, в каждой группе приводя к двум целевым цветам этой группы
    6) полученная картинка (всё в том же формате RGB32) должна элементарно конвертироваться для профи, поскольку в ней всего 16 уникальных цветов
    Последний раз редактировалось Lethargeek; 04.02.2019 в 15:26.
    Прихожу без разрешения, сею смерть и разрушение...

  9. #8

    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    438
    Спасибо Благодарностей отдано 
    144
    Спасибо Благодарностей получено 
    115
    Поблагодарили
    50 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    1) сначала желательно найти оригинальную (и не слишком сильно пожатую) фотографию в RGB32 формате, а не испорченное штрихованное убожество
    2) даже если такая не нашлась, всё равно конвертировать сперва картинку в этот формат, потому что для распределения ошибки кодировка цвета нужна прямая
    Исходные разумеется есть, и нет проблема взять другие.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    3) выбрать целевую палитру профика из 16 цветов (а вот хз как, это отдельная задача, для начала попробуй фиксированную или подбери творчески)
    Фиг с ним, взяли 16 стандартных цветов спектрума в формате RGB24

    Видел статьи по подбору палитры, но надеялся это меня не коснется.
    Пока можно в фотошопе приводить к 16 цветам, и эту палитру брать за основу.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    3) вычислить все целевые цвета для всех групп 8x1 пикселей и отдельно запомнить их (с самой картинкой еще ничего не делаем!)
    В памяти всегда исходная картинка, картинка в 8Bpp (она служит источником для перевода и сюда же возвращаться результат для отображения на IBM) и сама GRF, которую так же можно использовать как источник информации.

    То есть, из исходной картинке рассчитываем массив, в котором для каждых 8 точек храним два 2 из 16 цветов.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    4) вот только теперь прогнать по картинке алгоритм распределения ошибки, в каждой группе приводя к двум целевым цветам этой группы
    * берём первый пиксель, приводим его к одному из 2 для данной восьмерки цветов. Путем нахождения ближайшего по серости.
    * получаем ошибку.
    * передаем ошибка следующим пикселям: влево, влево-вниз, вниз.

    И так для всей картинки, только для каждых 8 точек свой набор из 2 цветов.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    5) полученная картинка (всё в том же формате RGB32) должна элементарно конвертироваться для профи, поскольку в ней всего 16 уникальных цветов
    Если ни чего не путаю в RGB32, последний байт отвечает за прозрачность и в BMP не использоваться. Так что для BMP RGB24=RGB32.
    Последний раз редактировалось tae1980; 29.01.2019 в 09:08.

  10. #9

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,964
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    314
    Поблагодарили
    237 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tae1980 Посмотреть сообщение
    В памяти всегда исходная картинка, картинка в 8Bpp
    какой 8bpp? по 8 на каждую компоненту, итого 24 (RGB32 я по привычке пишу програмерской)
    или даже больше, чем по 8, для пущей точности, это же не отображаемая картинка,
    а чисто служебное представление, не обязано в правильном стандартном формате быть

    Цитата Сообщение от tae1980 Посмотреть сообщение
    и сама GRF, которую так же можно использовать как источник информации
    не нужно как источник (собственно, какой такой информации?) - это результатом конечным будет

    Цитата Сообщение от tae1980 Посмотреть сообщение
    * передаем ошибка следующим пикселям: влево, влево-вниз, вниз.
    зависит от конкретного алгоритма и направления движения по строке, но всегда "вперёд" - в еще не приведённые пиксели
    (для флойда-стейнберга, если слева направо двигаться, то ошибка в правую и в три нижних, с разными коэфициентами)
    Прихожу без разрешения, сею смерть и разрушение...

  11. #10

    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    438
    Спасибо Благодарностей отдано 
    144
    Спасибо Благодарностей получено 
    115
    Поблагодарили
    50 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    какой 8bpp? по 8 на каждую компоненту, итого 24 (RGB32 я по привычке пишу програмерской)
    или даже больше, чем по 8, для пущей точности, это же не отображаемая картинка,
    а чисто служебное представление, не обязано в правильном стандартном формате быть
    Это просто перечислил текущие буфера.
    В BMP 8bpp поровожу обратное преобразование из GRF, что бы иметь возможность видеть результат сразу без железного Профи.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    не нужно как источник (собственно, какой такой информации?) - это результатом конечным будет
    Информацию о двух цветах можно сразу запихнуть сюда, вместо массива. Минимум, но экономия.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    зависит от конкретного алгоритма и направления движения по строке, но всегда "вперёд" - в еще не приведённые пиксели
    (для флойда-стейнберга, если слева направо двигаться, то ошибка в правую и в три нижних, с разными коэфициентами)
    Хорошо. Значит утверждаем приведенный алгоритм. Мне нужно пару дней на реализация (приходиться отвлекаться на работу, к сожалению).
    Последний раз редактировалось tae1980; 29.01.2019 в 11:37.

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

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

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

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

Похожие темы

  1. Заполнение чанка
    от GM BIT в разделе Программирование
    Ответов: 3
    Последнее: 12.08.2011, 17:13

Ваши права

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