Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Вот матрицы фильтров из моей дипломной работы (метод Filter был частью класса для работы с изображениями в градациях серого BWS, который я написал в 1995 году): Вот кстати и будет с чем сравнивать быстродействие более оптимальных с точки зрения кэша данных методов
|
25 Jun 2023 14:34 |
|
|
forthuser
Senior
Joined: 12 Jan 2023 07:26 Posts: 165
|
Из напмсания редактора может получиться и другая полезная программа, как обработка изображений сканироанных электронных книг. Пример такой народной программы со своей историей ScanKromsatorP.S. Х.З. Можно ли в одиночку написать и программу по распознаванию текста+картинки на обработанных сканах и с вариантом подключения сторонних возможных решений.
|
25 Jun 2023 20:48 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Не - распознавание текста это совсем другая история
|
26 Jun 2023 00:33 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Я тут в топике про "Project Spirit" озаботился выбором самой лучшей прегенерённой 256-цветной палитры для отображения произвольных цветных изображений на палитровых графических системах: http://www.nedopc.org/forum/viewtopic.php?p=170985#p170985В результате выяснилось, что с ранних вебовских времён существует так называемая "Web Safe Palette", которая состоит из 216 цветов, представляющих цветовой куб 6x6x6, в котором каждая цветная составляющая принимает значения 0, 51, 102, 153, 204 и 255 (т.е. всего 6 значений): https://www.rapidtables.com/web/color/Web_Safe.htmlВ мае 2013 года я, когда игрался с палитрами для nedoVGA, придумал (не зная про существование "Web Safe" палитры) чуть более расширенную палитру, представляющую из себя уже цветовой "прямоугольный параллелепипед" 6x7x6, в котором зелёная составляющая принимает больше значений, чем красная и синяя (7 вместо 6), что уже даёт 252 цвета, к которым я вчера добавил ещё 4 градации серого (чтобы получить 6 равномерно распределённых бесцветных уровней), что даёт полную палитру 256-цветов - можно назвать такую палитру Uniform676G и сделать "стандартной" в нашем гипотетическом графическом редакторе для быстрой индексации полноцветных изображений Вот программа для её генерации: | | | | Code: #include <stdio.h> #include <stdlib.h>
int main() { int i,j,k,m,r,g,b; FILE *f = fopen("Uniform676G.gpl","wt"); if(f==NULL) return -1; fprintf(f,"GIMP Palette\n"); fprintf(f,"Name: UNIFORM-676-G6\n#\n"); m = 0; for(i=0;i<6;i++){ for(j=0;j<7;j++){ for(k=0;k<6;k++){ r = k*51; g = (int)(j*42.5); b = i*51; fprintf(f,"%3d %3d %3d\t%i\n",r,g,b,m++); }}} i = 51; while(m<256) { fprintf(f,"%3d %3d %3d\t%i\n",i,i,i,m++); i+=51; } fclose(f); }
| | | | |
А вот её сравнение с палитрой "Web Safe", которая по середине (а Uniform676G - справа): Особенностью палитр с равномерно распределёнными цветами является то, что найти индекс самого близкого цвета из палитры, пользуясь значениями RGB можно по простой формуле без поиска - в случае Uniform676G формула будет такая: INDEX=INT((R+25)/51)+INT((G+21)/42.5)*6+INT((B+25)/51)*42Но чтобы проверить, что оставшиеся 4 градации серого могут быть лучше выбранного индекса, придётся таки посчитать ошибку и сравнить - например это может потребоваться для изображений в градациях серого - вот вариант с выбором ближайшего цвета без учёта дополнительных серых оттенков: А вот с их учётом: А это - оригинал:
|
18 Oct 2023 21:11 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Вот исходник, который генерит палитру Uniform676G.gpl, а также если в качестве аргумента передали PPM файл (он всегда полноцветный RGB888), то программа сконвертирует картинку в XPM с палитрой Uniform676G по формуле INDEX=INT((R+25)/51)+INT((G+21)/42.5)*6+INT((B+25)/51)*42 без дизеринга (позже я формулу подправил, чтобы вычисления были целочисленные): https://gitlab.com/nedopc/sprintem/-/blob/master/tools/uniformg.c?ref_type=headsВот примеры, которые получены этой программой (слева полноцветный оригинал - справа преобразованная картинка 256 цветов без дизеринга): (в данных примерах 4 серых цвета в конце палитры не учитывались) P.S. В предыдущем сообщении те же картинки были получены в GIMP с использованием файла палитры UNIFORM676G.gpl, а в этом - с помощью моей программы по формуле и что-то мне кажется, что эти картинки выглядят лучше, чем те P.P.S. Возможно дело в гамме, которую GIMP учитывает (sRGB), а я - нет...
|
19 Oct 2023 01:45 |
|
|
shiny
Senior
Joined: 14 Oct 2023 06:59 Posts: 143
|
а квантизация цвета не поможет?
_________________ uselessretro.blogspot.com
|
19 Oct 2023 05:24 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Квантование цветов понадобится, когда я дойду до генерации оптимальной палитры под конкретное изображение Пока речь идёт про универсальные палитры, пригодные для любых изображений P.S. На самом деле универсальной палитры вполне достаточно, для терпимого Флойда-Стейнберга (см. справа):
|
19 Oct 2023 09:12 |
|
|
shiny
Senior
Joined: 14 Oct 2023 06:59 Posts: 143
|
https://en.everybodywiki.com/List_of_8-bit_computer_hardware_graphics/archiveБыла еще подобная страница, поищу в архивах. А если сподобится этому редактору, то появится большой список хотелок под форматы. Кстати, под Timex уже есть готовые утилиты - BMP2SCR и ZX Paintbrush(.mlt)
_________________ uselessretro.blogspot.com
|
19 Oct 2023 10:08 |
|
|
shiny
Senior
Joined: 14 Oct 2023 06:59 Posts: 143
|
_________________ uselessretro.blogspot.com
|
19 Oct 2023 21:06 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Спасибо за ссылки! BMP2SCR у меня есть скачанная в разных реинкарнациях, только я не знал (или забыл?), что она таймекс тоже умеет Более точная формула будет такая: INDEX=INT((R+25.5)/51)+INT((G+21.25)/42.5)*6+INT((B+25.5)/51)*42 Цветовые составляющие R, G и B сдвигаются влево на половину цветовой полосы, чтобы яркий вариант (255) покрывал столько же, сколько и самый тёмный (0), что в 2 раза меньше всех остальных диапазонов (т.е. оно выглядит примерно так 000111111222222333333444444555). А вообще чтобы оставаться полностью в целых числах можно вот так вот сделать: INDEX=INT((R+25)/51)+INT((2*G+43)/85)*6+INT((B+25)/51)*42 Вот примеры - оригинал (слева), ближайший цвет по формуле выше (центр) и Флойд-Стейнберг по палитре Uniform676 (справа): P.S. Поправил исходник: https://gitlab.com/nedopc/sprintem/-/blob/master/tools/uniformg.c?ref_type=heads
|
19 Oct 2023 21:25 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Увеличил в 2 раза, чтобы пикселы были виднее - слева палитра Uniform676 по формуле без дизеринга, справа дизеринг по Флойду-Стейнбергу с той же самой палитрой Uniform767:
|
19 Oct 2023 22:27 |
|
|
shiny
Senior
Joined: 14 Oct 2023 06:59 Posts: 143
|
Steinberg дело вкуса, но результат по мне не самый лучший. Вот такой поинтереснее.
_________________ uselessretro.blogspot.com
|
20 Oct 2023 01:25 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Спектрумовские цвета что ли? А где знакоместа и цветной «клашинг»?
|
20 Oct 2023 08:38 |
|
|
shiny
Senior
Joined: 14 Oct 2023 06:59 Posts: 143
|
упс, не тот конвертер
_________________ uselessretro.blogspot.com
|
20 Oct 2023 09:03 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
А вот классическая Лена (уменьшенная до 256х256) в палитре Uniform676 без дизеринга и с дизерингом по Флойду-Стейнбергу:
|
25 Oct 2023 22:48 |
|
|