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

User Tag List

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 36

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

  1. #21
    Member Аватар для tae1980
    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    166
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    10 сообщений
    Mentioned
    0 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 в 10:08.

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

    По умолчанию

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

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

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

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

    По умолчанию

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

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

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

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

    По умолчанию

    Цитата Сообщение от tae1980 Посмотреть сообщение
    Это просто перечислил текущие буфера.
    ааа, не понял с недосыпу (тебе надо было двоеточие там поставить))

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

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

    По умолчанию

    Lethargeek, сегодня получил такой результат:

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

    [свернуть]

    Палитру 16 цветов брал ту которую создал фотошоп.
    Попробу понять где накосячил.

    Начал анализировать ход расчетов.
    В первых же 8 пикселях имеем разных 7 цветов. После расчета серости и разбиение на две группы получаем:
    для первой группы 64 значение серости и 5 раз встречаться (суммарный вес), для второй значение серости 60 и встреться (суммарный вес) 3 раза.

    При подборе цвета из палитры 16 цветов имеем следующее расчеты:

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

    [свернуть]

    где 1) это передпаваемые данные серости группы цветов
    далее, разница между серостью цвета в палитре и переданным цветов
    далее, серость цвета в палитре

    Я беру тот цвет палитры, у которого разница серости с переданным цветом ближе к нулю. Получается, что для обоих групп берется 6 цвет. То есть 7 исходных цветов прировнялись к одному.
    Что-то тут не так....
    Последний раз редактировалось tae1980; 03.02.2019 в 20:07.

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

    По умолчанию

    tae1980, ну что значит "приравнялись"?? Ты найти сначала должен ЦЕЛЕВЫЕ цвета, и ничего к ним не сразу и не приравнивать, а потом уже ПРИВОДИТЬ, распределяя ошибку. Никакой разницы не надо пока считать. Вот у тебя есть две групповых яркости, теперь из 16-цветной палитры выбирай два разных цвета, самых близких к твоим цифрам (61 и 65). Именно два РАЗНЫХ, даже если один из них намного дальше от этих цифр, чем они друг от друга. Это будут целевые цвета полоски, когда рассчитаешь так же для всех полосок, только тогда прогоняй распределение ошибки по всей картинке.

    И начать, наверно, лучше с конвертации чёрно-белой версии оригинальной картинки в серую 16-цветную палитру.

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

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

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

    По умолчанию

    Lethargeek, Разуметься все действия по оговоренному алгоритму.
    Цикл 1. Подбор двух цветов на 8 точек. Путем расчета серости для каждой точки, сортировки 8 точек по серости, делением на две группы по медиане, нахождение средневзвешенного цвета для группа (за вес принимаем число рез сколько цвет встретился).
    Цикл 2. Независимо от Цикла 1, для исходной картинки разбрасываем невязки.
    Цикл 3. На основе Циклов 1 и 2 находим для каждой точки цвет (один из двух найденных в Цикле 1).

    Так как внутри есть ещё другие мелкие циклы но для каждой точки, все работает очень долго (используемый язык не Си). Как укоротит ума не приложу. Объединять циклов в общем безполезно, так как на организацию цикла тратиться не много времени, а вот объем расчетов при этом не изменится.

    Так вот, то что я назвал "приравнивание" происходит на первом цикле. Когда подряд идут несколько разных, но близких цветов. При нахождении двух средневзвешенных серостей, получаем очень близкие значение. Специально привел значения серости для палитры 16 цветов (правда в не очень удобном виде). Видно, что шаг серости очень значителен и измеряется десятками. В описном случае, для 8 точек было получены близкие значения средневзвешенной серости 60 и 64 (разница 4 единицы), что при вело к выбору одного цвета для обоих групп. По этому как бы не сработали циклы 2 и 3, на экране будет линий одного цвета.
    Подобная ситуация наблюдается по большей части изображения, разбор на два цвета происходит только в самых контрастных местах.

    Пробовал в таких случаях в Цикле 1 принудительно брать два самых подходящих цвета. Но в Цикле 3, они всё равно приводятся к одному самому подходящему.

    Возможно нужно как-то "увеличивать" разницу средневзвешенной серости двух групп (получаться от 5 до 10 раз). Обоснованием сможет служить резкое сужение диапазон цветов с 16М до 2.
    Последний раз редактировалось tae1980; 04.02.2019 в 10:48.

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

    По умолчанию

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

    а при конверсии чёрно-белого оригинала что получилось?

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

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

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    что за циклы? это явно не мои пункты, распиши уже тогда подробно свой алгоритм
    Цикл1. Идет последовательный перебор всех строк
    В каждой строке последовательно берутся пиксели по 8 шт.
    Для каждого пикселя считается серость и заноситься в массив (#Gray=0.2126*#24rrr + 0.7152*#24ggg + 0.0722*#24bbb). Массив сразу сортируется от самого светлого к самому темному.
    Медину не нахожу, так как число цветов до 8, проще через if. Делим массив на два блока.
    Для каждого блока считаем средневзвешенное значение: СуммаN(СеростьN*ЧислоПовтор овN) / ОбщееЧислоПовторов всех цветов
    Для каждого блока определяем номер цвета в палитре 16, для чего находим ближайший цвет по серости.
    Создаем массив, где каждого пикселя храниться два возможных цвета.

    Цикл2. Распределяем ошибку.
    Каждый пиксель приравниваться к ближайшему из двух рассчитанных цветов.
    Считаться ошибка: #ERR.r=#24rrr-#24rrr1; #ERR.g=#24ggg-#24ggg1; #ERR.b=#24bbb-#24bbb1. Где 24xxx - исходный цвет пикселя, 24xxx1 - цвет к которому привели.
    Распределяем ошибку:
    вправо 7/16 ;
    вниз-назад 3/16;
    вниз 5/16;
    вниз-вперед 1/16.
    данные хранятся в массиве в виде строк BMP. Собственно это и вывожу на экран.

    Цикл3. Перевод в GRF. Не реализован.

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

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    а при конверсии чёрно-белого оригинала что получилось?
    Не приводил.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    еще стоит попробовать выбирать целевые цвета по крайностям:
    темнее самого тёмного и ярче самого яркого в той полоске
    Есть подобный режим для 16 цветов, результат не очень, так как в ряде мест высвечиваются не главные цвета. Например: на небе. Но возможно тут заработает по другому, так как идет разброс ошибки.
    Последний раз редактировалось tae1980; 04.02.2019 в 21:00.

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

    По умолчанию

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

    Цитата Сообщение от tae1980 Посмотреть сообщение
    Распределяем ошибку:
    влево 7/16 ;
    почему влево? справа налево по строке движемся?

    и всё-таки начни с чёрно-белого
    Прихожу без разрешения, сею смерть и разрушение...

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

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

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

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

Похожие темы

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

Ваши права

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