Render.ru

Intillegent Dithering? ( Full colour -> 4 colour )

digital_silence

Пользователь сайта
Рейтинг
2
#1
Доброго дня.

(Постил это на ру-борд'e и videoediting'e‚ пока ничего конкретного не ответили... )


Как в шопе (а может и не в шопе? тогда какая прога?) сделать следующее:

Надо уметь преобразовывать любой графический файл (никакой Альфы нет) в три одноцветных составляющих (канала) вот по таким параметрам:

1) Каждый канал должен быть B/W (только черный или белый‚ без серого)‚ т.е. 1 bit per pixel.

2) Kонвертить каждый Channel в B/W в лоб - не прокатит‚ т.к. потом эти три файла нужно будет потом накладывать друг на друга в другой проге БЕЗ СМЕШИВАНИЯ слоев‚ т.е. если яркие пиксели каналов будут в одном и том же месте‚ то виден будет ТОЛЬКО верхний‚ а это нехорошо. Следовательно‚ нужен интеллигентный dither с разводом разных цветов в разные точки экрана - адаптивный пространственный разнос пикселей с адаптивными же весовыми коэффициентами заполнения пространства цветовыми пикселями. Что‚ впрочем‚ и есть Colour Dithering. СМЕШИВАТЬСЯ ЦВЕТОВЫЕ КОМПОНЕНТЫ ДОЛЖНЫ ТОЛЬКО в ГЛАЗУ СМОТРЯЩЕГО!

Подумал еще чуть-чуть - наверное‚ это больше подходит под категорию мозаики (четыре цвета - Black, Red, Green, Blue) или вышивки “крестиком“ с такими же четырьмя цветами.

Либо хорошая конвертация из 24bpp в Indexed Color с палитрой из 4-х цветов - Black, Red, Green, Blue. Встроенный ФШ конвертор производит на редкость гадостный результат. Понятно‚ что качества оригинала никто и не ждет‚ но чтобы уж так отвратительно... Я не собираюсь с него фотографии печатать - задачи тут совсем другие‚ и качества 4-х цветов мне хватит. Но я ожидаю от алгоритма dither'a по крайней мере‚ чтобы однородный белый цвет из оригинала был в результате представлен равномерно пространственно-размешанными RGB цветами‚ а Фотошоп этого не умеет (точнее‚ умеет‚ но ошибается очень сильно - коричневый лепит вместо белого...).

Сегодня еще попробовал Easy Mosaic 2005 - лучше‚ чем шоп‚ но тоже не то. Я имею в виду НЕ КАЧЕСТВО‚ а то‚ что ошибается он на элементарных цветах (например‚ фиолетовый‚ который должен быть представлен ”шахматной доской” из синего и красного - и близко не лежал...)


Чтобы “привестись к одному знаменателю“‚ давайте выберем какую-нибудь картинку для пробы. Ну вот хоть эту:
http://www.ezthemes.com/previews/d/donaldtheme.jpg

Кто сможет разложить по каналам‚ как описано выше? Я не знаю‚ как и подступиться...


Спасибо!
:-DS


PS Еще раз на ум приходит аналогия с вышиванием ”крестиком” тремя катушками ниток на черной канве: каждый крестик - пиксель‚ И ведь можно сделать прилично - видел кучу вышивок.

Или мозаика из трех типов пластинок (RGB) на черном фоне.






 
#2
Дорогой, не рип ли тебе нужен? Описываемая тобой задача очень смахивает на результат работы растрового процессора. Уточни зачем тебе это нужно.
 

digital_silence

Пользователь сайта
Рейтинг
2
#3
Уточняю.

Есть приложение‚ которое воспроизводит битмапы следующим образом:

1) Каждому битмапу присваивается цвет из стандартной 16-цветовой палитры.

2) В каждом битмапе нет оттенков‚ т.е. каждый бит - либо выключен‚ либо включен.

3) Битмапов может быть сколько угодно‚ но каждый битмап может быть ассоциирован только с одним из трех цветов.

4) Битмапы накладываются НЕ КАК СЛОИ С ПРОЗРАЧНОСТЬЮ. Виден только верхний битмап.


Лучше всего описать задачу таким примером: Надо непрозрачной мозаикой‚ в один слой‚ на черной стене‚ плитками только трех цветов выложить картинку‚ максимально приближенную к Full-colour оригиналу (скажем‚ для примера‚ утенок по моей ссылке выше).

Три цвета могут быть RGB, но не обязательно - главное‚ чтобы они все три были из стандартной 16-цветовой палитры.

Тогда плитки одного цвета сформируют мой первый битмап‚ второго - второй‚ третьего - третий. Битмапы не имеют общих “ярких“ точек (т.е. вся плитка лежит одним слоем)‚ и при просмотре издали должна создаваться картинка‚ похожая на оригинал.

Мой вопрос - Какой софт разложит Full-colour картинку на таких вот три битмапа НАИЛУЧШИМ способом?

Надеюсь‚ теперь понятней...
:-DS

PS Если это поможет‚ то можно класть плитки не на черной‚ а на белой стене (менее желательно‚ но могу примириться). Опять же‚ плитки ТОЛЬКО трех цветов!

PPS Схожая задача - embroidery (Вышивание Крестом) - вышить портрет любимой тремя нитками по черной (или белой) канве... так‚ чтобы она тебя потом не прибила... :)

PPS Забыл сказать. Пиксели (плитки) - квадратной формы (не треугольники‚ и не шестиугольники (или кружочки))‚ лежат стандартной сеткой‚ как тетрадка в клеточку.
 
#4
Это ж будет дикое разрешение. Скажем чтобы воспроизвести 256 градаций яркости вам нужна матрица 16 на 16. А так как вы не хотите накладывать цвета друг на друга, а их у вас 4, то стало быть получится 48х48 точек. Нехилый пиксел!

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

digital_silence

Пользователь сайта
Рейтинг
2
#5
Как я уже говорил - мне это не для печати фоток - я готов мириться с заметной потерей качества и яркости. Было бы хотя бы “отдаленно“ похоже на оригинал. А шоп такое делает... попробуйте взять предложенную мной выше картинку утенка‚ и шопом преобразовать ее в четырехцветную - это ж “п0рн0графика“ какая-то выходит. Вместо белого - коричневый‚ хотя казалось бы‚ чего уж проще - R,G,B смешать в одинаковых пропорциях...


 
#6
В общем по теме. Очевидно вы не можете создать условия задачи. А без них найти решение нельзя.

О чем вы пишите в пунктах 1 - 3? Если битовая карта отождествляет некоторый цвет, то при чем тут 16-цветная палитра? Битовая карта может показывать только 2 цвета - цвет пиксела или цвет фона. Если вы хотите сделать 16 битовых карт по одной на каждый цвет из палитры, то могу вас обрадовать - перевод в индексный цвет с ограничением в 16 цветов то и есть.

Для вышивки достаточно преобразовать картинку в индекс по заданному количеству цветов. Зададите 16 - понадобится 16 ниток.

Чтобы понизить детализацию к разрешению вышивки без уменьшения разрешения изображения примените Filter > Pixelate > Mosaic, задайте рассчитанное значение размера ячейки и затем конвертите в индексный цвет. Палитру документа в индексном цвете можно сохранить на диск и затем загрузить в Swatch.

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

 

digital_silence

Пользователь сайта
Рейтинг
2
#7
Давайте по порядку.

Мне казалось‚ что условия задачи я поставил - яснее некуда.

Я нигде НЕ ГОВОРИЛ‚ что мне надо 16 цветов. Наоборот‚ я всячески подчеркивал‚ что я ограничен только 3-мя цветами + черный (или на худой конец белый) фон.

А 16-цветовая палитра тут при том‚ что эти 3 цвета могут быть ЛЮБЫМИ‚ но обязательно из 16-цветовой палитры. Для одной картинки хороши будут R,G,B, a для другой‚ к примеру - Cyan, Red и Yellow.

Итак - ЧЕТЫРЕ и только ЧЕТЫРЕ цвета‚ включая фон (Ч или Б).

Вы правильно поняли насчет битовых карт - цвет пиксела или цвет фона. Для каждого из 3-х цветов.

Теперь про паттерны: шаблон Байера и т.п. - я знаю‚ но это потеря разрешения‚ т.к. придется увеличивать размер пикселя для достижения цветовых оттенков‚ так как у Вас описано в Вашем первом посте. А это очень нежелательно.

Для примера: пусть начальная картинка состоит из двух равномерно окрашенных половин - голубовато-серой и темно-коричневой. Тогда результирующая картинка‚ которую я хотел бы получить от алгоритма‚ будет такой:

Четыре цвета - Черный‚ Белый‚ Желтый‚ Голубой.

первая половина - черно/белая шахматная доска в один пиксель с регулярными вкраплениями голубого.

вторая половина - черно/желтая шахматная доска в один пиксель (чем темнее коричневый‚ тем больше процент черных клеток).


И наконец‚ по поводу Pixelate - Mosaic или конвертации в 4-цветный индекс:
очень прошу Вас - потратьте на меня еще 5 минут и сделайте это сами в фотошопе на примере-утенке по моей ссылке в первом посте. Посмотрите на результат. Если понравится - запостите сюда‚ плз. Условие прежнее - результат должен состоять только из 4-х цветов‚ один из которых - черный или белый‚ а остальные три - любые из 16-цветной палитры.

Спасибо‚
:-DS
 
#8
Еще раз. Каналы и цвет это разные вещи. Цвет каналов может быть каким угодно и может быть изменен в любое время. Но нельзя задать для части канала один цвет, а для другой части - другой. Технология индексирования цветов основывается на исключении каналов как таковых из изображения и заменой цвета пикселей на указатель палитры, ячейки которой содержат информацию о True color компонентах цвета.

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

При индексировании получается столько условных каналов, сколько используется ячеек в палитре. Если там 16 то и битовых карт будет 16. Если 256 то будет 256 условных каналов. На этом основывается оптимизация изображения под особенности его цветов. Вместо универсального трехцветного синтеза по 8 бит на цветоделенный канал мы используем частный случай от частотного растрирования с разбиением битовых карт на множество условных каналов каждый со своим full color цветом. После чего пикселы каждого такого канала заполняем числом - адресом его цвета в палитре. Индексом. Так получается индексный цвет.

Далее, чем больше оттенков вы хотите получить в изображении созданном частотным планарным растрированием, тем больше потребуется размер матрицы. Если вы хотите получить full colors в определенных вами условиях непересечения точек матриц, то пиксел такого изображения будет 48 на 48 точек при условии использования трех базовых цветов для синтеза. При этом динамический диапазон обрушится - даже максимальное значение одного из базовых цветов приведет к тому, что он будет заполнен только на треть. Оптимизация приведет к имитации амплитудного растрирования - точки цвета в пикселе будут заполнять его от центра к краям.

Так вот, теперь избавившись от заморочек с палитрами и паттернами мы сведем задачу от сложного частотного к простому амплитудному растрированию.

Справка: пикселы и точки это не одно и тоже. Часто путают dpi и ppi. В то время как dpi это точки на дюйм, а ppi это пикселы. Pixel - pictures element, а точка, dot - элементарная точка, наименьшее изображение которое может создать устройство воспроизведения изображения. Пикселы при печати состоят из точек.

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

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

А разбиение этих пятен на элементарные точки и перемешивание точек разных каналов между собой - как вы хотите - просто вариант растрирования.

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

А что вы там делаете, если не секрет?
 
#9
Вы пишите: "А 16-цветовая палитра тут при том‚ что эти 3 цвета могут быть ЛЮБЫМИ‚ но обязательно из 16-цветовой палитры. Для одной картинки хороши будут R,G,B, a для другой‚ к примеру - Cyan, Red и Yellow. " конец цитаты.

Это бред. Само по себе растрирование не учитывает информацию о цвете канала - тут фиолетово какого там он цвета будет.

Если вы хотите растрировать на 16 цветов, то вам сначала нужно преобразовать картинку к 16-ти каналам. А затем уже и отрастрировать каналы по любому алгоритму.

Скажем струйники имеют по 6 цветов - значит драйвер берет RGB изображение и сначала его превращает в 6-ти канальное, то есть, проводится процесс цветоделения. Именно в процессе цветоделения учитывается цвет каналов и цвет изображения (сначала изображение превращается в Lab с учетом заданного профиля, чтобы получить информацию о цвете, а затем из Lab'а в нутренное цветовое пространство принтера). И еще в процессе цветоделения учитывается особенность заданного растрирования - поскольку как вы уже поняли от него зависит в конечном счете и результат. Там куча факторов.

Поэтому никакого смысла цитата выше не имеет.

Перечитал ваш первый постинг: "Либо хорошая конвертация из 24bpp в Indexed Color с палитрой из 4-х цветов - Black, Red, Green, Blue. "

...

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

digital_silence

Пользователь сайта
Рейтинг
2
#10
Отвечаю только на последние три абзаца‚ поскольку остальное (весьма полезное в принципе) напрямую не относится к задаче.

1) Про растрироване - поподробней можно? То‚ что я хочу - это и называется растрированием?

2) “Моей“ технологии нет никакой - я наоборот‚ ищу прогу‚ которая помогла бы мне это сделать.

3) Как все-таки насчет попробовать утенка на практике зафигачить в 4 цвета?

Что я там делаю - не секрет. Это мне нужно для создания DVD-менюшек. Цветовые ограничения сабпикчера плюс невозможность моментального переключения между менюшками... долго рассказывать. В общем‚ если мне удастся разложить картинку‚ как я описывал‚ то откроется широкое поле для манипуляции с полноценными (ну более-менее) в плане цвета сабпикчерами‚ в результате чего можно будет делать красивые псевдо-анимированные меню без переключения‚ и следовательно‚ без времЕнных задержек...

Можно и подробнее‚ да что толку - софт-то я так и не могу найти...

Что посоветуете?

:-DS
 

digital_silence

Пользователь сайта
Рейтинг
2
#11
Еще раз. Терпеливо.

3 цвета из 16-цветовой “СТАНДАРТНОЙ“ (EGA DOS-овской‚ если угодно) палитры. Таково ограничение сабпикчера.
Поэтому смысл цитата выше имеет‚ и очень даже. Поскольку при преобразовании в 4 цвета‚ эти цветА не могут быть ЛЮБЫМИ‚ а могут быть ТОЛЬКО из набора тех самых 16 стандартных.

Вы‚ безусловно‚ знаете‚ о чем говорите‚ но зачем-то отворачиваете от темы - картинку с разрешением A x B нужно максимально достоверно преобразовать в картинку же с разрешением A x B, но с только четырьмя цветами (из 16 стандартных).

Может‚ все-таки попробуете утенка?

Спасибо‚
:-DS
 
#12
Так бы сразу и сказали. У меня есть такая аватара - на форумах где цвет фона ячеек соседних постингов разный, она выглядит по-разному: в одном моем постинге это, например, цифра 1, а на другом, там где фон другой - цифра 2. Делается просто: два изображения разбитых по строчкам и с прозрачностью: т.к. фон и цвет полосок какого-то одного совпадает, то визуализируется другое.

Есть еще такие картинки, которые немного меняют свой контент при выделении их в окне бровзера. Как-то видел такую с одетыми телками, а выделяешь ее - упс, телки голые. Вы так хотите? - Но там скрытое изображение очень слабо после визуализации (потому что вы уже поняли почему) и его видно на основном изображении частично.

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

digital_silence

Пользователь сайта
Рейтинг
2
#13
Нет‚ у меня не совсем так. Точнее‚ совсем не так. Сабпикча в моем случае изначально не видна‚ а при выборе - появляется. Фон не играет роли‚ т.к. при выделении об’ект закроет фон. Далее - все сабпикчи могут принадлежать лишь к трем группам‚ каждой из которой может быть присвоен свой цвет (из тех самых 16 стандартных). Идея - наложить три сабпикчи‚ чтобы они дали полноцветную картинку.

Что с утенком?

:-DS
 
#14
"3 цвета из 16-цветовой “СТАНДАРТНОЙ“ (EGA DOS-овской‚ если угодно) палитры. Таково ограничение сабпикчера. "

Что мне утенка пробовать, еще птичьим гриппом заболею.

У вас же там нет места вашей идее: сколько сабпикча размеров в пикселах?
 
#15
Нет, мне конечно не жалко времени - информация будет полезна и тем кто просто почитает, но все-таки вам стоило бы в самом начале изложить фактуру.

Блин, у вас же нет точек чтобы реализовать планарное растрирование, у вас самые настоящие пикселы изображения. Если вы хотите сделать так, чтобы пикселы наложенных друг на друга изображений не пересекались, то вам придется отрезать по трети от каждого.

И все. У вас фундаментальная сетка пикселов (а не точек) и поэтому построить свою (из точек) вы не можете. Поэтому ваш вопрос совершенно не имеет смысла.

Но можете сделать так - пробейте дырки по паттерну в трех картинках в разных местах, сложите их вместе и посмотрите на что это будет похоже. Вот все что вы можете в этом смысле.
 
#16
Т.к. полоски есть вариант растрирования, я так и сделал: http://img363.imageshack.us/my.php?image=duck8lp.png - как видите ни один пиксел основного цвета не пересекается с любым другим пикселом других основных цветов. Как вы и хотели. Теперь можете проиндексировать это на 16 цветов той пол-литры и готово.

И еще, вы не читаете. Индексный цвет это не базовый цвет цветоделенного канала. Пиксел индексного цвета НЕ содержит никаких данных о своей яркости или цвете. Он содержит ТОЛЬКО указатель на ячейку в таблице цветов. Там лежит ГОТОВЫЙ для него цвет в модели RGB 8-8-8. По сути никаких пикселов в индексной картинке и нет - они условны, поскольку заменены на массив указателей.

Вы решили что 16 цветов палитры это типа 16 базовых цветов для 16-ти возможных каналов. Тогда глубина цвета в такой цветовой модели была бы 16^256. Поэтому вы и хотели использовать любые 3 из 16. А вы попробуйте перевести зайца в индексный цвет на три ячейки. Впишите 3 в поле Colors в диалоге индексации цвета и посмотрите что будет...
 

digital_silence

Пользователь сайта
Рейтинг
2
#17
"Разговор глухого с немым...“ :)))

Про индексные указатели я знаю - хрен с ними‚ с индексами‚ давайте говорить о цветах напрямую.

Ваш растрированный утенок содержит не 4 цвета‚ а гораздо больше.
В том смысле‚ что для моей задачи светло-зеленый и темно-зеленый - это ДВА РАЗНЫХ цвета.

Давайте забудем про каналы. Давайте забудем про индексы. Давайте забудем про растрирование. Поставим задачу очень кратко:

Мой утенок состоит из 250 точек по горизонтали‚ и 187 по вертикали.
Положите‚ пожалуйста‚ 250х187 плиток квадратной мозаики так‚ чтобы при рассмотрении издали картинка была максимально похожа на моего утенка. При этом‚ у Вас есть только плитки ЧЕТЫРЕХ цветов. Каких - выберите сами‚ но только ЧЕТЫРЕ цвета. Оттенки одного и того же цвета считаются РАЗНЫМИ цветами! Все плитки одного цвета должны быть абсолютно неотличимо-идентичны. Всё!

Если и сейчас я не объяснил задачу доходчиво‚ то тогда уж не знаю‚ что делать...


Удачи‚
:-DS

 
#18
Нет, вы не так все поняли. Это ваша "задача", а не моя. И решение для нее очень простое: переводите в индексный цвет ограничив число цветов 4 и все.

Вот 4 цвета заданных вручную. Растрирование - diffusion.

http://img378.imageshack.us/my.php?image=donaldtheme4jg.gif

Вопросы?

 
#19
Вы можете посмотреть и отредактировать цвета индексной картинки: Image > Mode > Color Table...
 

digital_silence

Пользователь сайта
Рейтинг
2
#20
Ну слава Богу! Сделали полный круг!

1) Задача‚ разумеется‚ моя. И писАл я сюда для того‚ чтобы найти помощь в ее ОПТИМАЛЬНОМ решении.

2) Ваша фраза: ”И решение... очень простое”. ЗАМЕТЬТЕ! Это не решение‚ а ОДНО из ВОЗМОЖНЫХ РЕШЕНИЙ! Если Вы глянете самый первый мой пост в этом топике‚ то найдете‚ что в 4 цвета фотошопом я (таким же методом‚ как и Вы) перевел картинку давным-давно‚ но НЕ УДОВЛЕТВОРЕН РЕЗУЛЬТАТОМ! В Вашей (последней) картинке‚ сделанной шопом‚ у утенка полностью отсутствует синий цвет‚ что об’яснимо‚ поскольку мЕста в 4-х цветах для него уже не осталось.

3) Сама суть моего постинга в теме: Я искал (и ищу) прогу‚ которая проделала бы вышеозначенную операцию ЛУЧШЕ (желательно намного лучше)‚ чем фотошоп. Отсюда и тема топика - Intillegent Dithering. Вы же не станете спорить‚ что Dithering (Ваш термин - растрирование) можно провести кучей РАЗЛИЧНЫХ способов?

Еще раз: Ищу прогу‚ которая перевела бы картинку из FullColour в 4-Colour ЛУЧШЕ‚ чем это умеет делать Шоп.

Спасибо Вам‚ кстати‚ за то‚ что отвечаете. Другие так просто игнорируют.

Удачи‚
:-DS
 
Сверху