Closed zvezdochiot closed 1 year ago
Можешь описать, как выхлоп от этой функции запихнуть в csepdjvu? Там только два варианта: фон+передний план+маска или фон+маска. Справка есть здесь https://djvu.sourceforge.net/doc/man/csepdjvu.html Ещё тут http://djvu-soft.narod.ru/scan/low_color_djvu.htm
Я вообще думал сделать следующий алгоритм - пользователь выделяет на изображении иллюстрации (или запускается автоматический алгоритм, который это делает). Затем белый фон с иллюстрацией кодируется как Background. Затем из изображения вырезаются иллюстрации (закрашиваются белым), оно приводится к чб, кодируется как foreground
@plzombie say:
Можешь описать, как выхлоп от этой функции запихнуть в csepdjvu?
Лови Малоцветное DjVu-кодирование. Это по поводу csepdjvu
. А в чём именно вопрос? Про размеры или что? Или как использовать маску?
Но я с чанками горазжо "жёстче" работал, по полной пользуя djvulibre
. Смотри Конвертирование djvu в pdf с сохранением сегментации (pdfbeads), скрипты layer из imthreshold и скрипты MFB из imthreshold (используются djvuextract
и djvumake
).
И наконец. А depressImageApplyDjvulBinarization()
взлетела? Я же мог где то и ляпянуть.
@plzombie say:
оно приводится к чб, кодируется как foreground
А почему не noteshrink с кодированием в cpaldjvu
(аля DjVu Solo)?
PS: И Binarization как то коряво. Используй общеизвестное Threshold.
А почему не noteshrink с кодированием в cpaldjvu (аля DjVu Solo)?
Можно с палитрой, можно чб, как угодно. Мне кажется, чб для сканов книг будет предпочтительнее
Лови Малоцветное DjVu-кодирование. Это по поводу csepdjvu. А в чём именно вопрос? Про размеры или что? Или как использовать маску?
Основной вопрос - как в csepdjvu засунуть цветной foreground (не с палитрой), ещё чтобы отдельную маску можно было как-то подать, ещё чтобы разный размер был у foreground и background. Как бы это не вылилось, чтобы пришлось сначала писать свою реализацию csepdjvu
Не думаю, что barak разберётся в переписке на русском
@plzombie say:
как в csepdjvu засунуть цветной foreground
Да что ты упёрся в csepdjvu
? Ежели хочешь аля DjVu Editor, то пользуй cjb2
+c44
. После этого дёргай чанки из файлов с помощью djvuextract
и компонуй их в djvumake
.
Простой пример компоновки можно почерпнуть из мана djvumake
:
cjb2 mymask.pbm mymask.djvu
djvumake my.djvu Sjbz=mymask.djvu PPM=myimage.ppm
но там разделение на FG-BG ужасное (это собственно тестовая функция djvumake
).
Я пользовал:
djvuextract "mymaks.djvu" Sjbz="mymaks.Sjbz.cnk" # mymask.djvu - cjb2 of B/W
djvuextract "myfg.djvu" BG44="myfg.FG44.cnk" # myfg.djvu - c44 of 1 layer IW4
djvuextract "mybg.djvu" BG44="mybg.BG44.cnk" # mybg.djvu - c44 of 3 layer IW4
djvumake "my.djvu" INFO=,,300 Sjbz="mymaks.Sjbz.cnk" FG44="myfg.FG44.cnk" BG44="mybg.BG44.cnk" # 300 - DPI
PS: Пониманию djvumake
может также подсобить djvujpgpack (shell script).
@plzombie .
Допилил я таки код на базе STB: stb-image-djvul djvul.h.gz
./stbdjvul lena.png lena.mask.png lena.bg.png lena.fg.png
Load: lena.png
image: 512x512:3
BG,FG: 171x171:3
DjVuL... 8 level
Save png: lena.m.png, lena.bg.png, lena.fg.png
./stbdjvul -c 1 lena.png lena.mask.c1.png lena.bg.c1.png lena.fg.c1.png
Load: lena.png
image: 512x512:3
BG,FG: 171x171:3
DjVuL... 8 level
Save png: lena.mask.c1.png, lena.bg.c1.png, lena.fg.c1.png.
Hi @plzombie .
Дело пошло: DjVuLibre ticket #107.
Hi @plzombie .
Обнаружил конкретнейший логический ляп. То то я всё думал, что это картинка такая размыленная получается. Теперь всё пучком:
-> reсonstruct ->
Hi @plzombie .
Добавил демку stb-image-djvul-demo с уже готовыми DjVu-шками и рецептами изготовления. Всё в пределах DjVuLibre и DjVuL. Пример специально в виде картины, потому как на простом изображении текста особенностей не разберёшь.
PS: Сделано всё "топорно", не использована возможность "маски" при кодировании в c44
.
В общем-то сделал, с твоим примером получилось байт-в-байт. Но нужна какая-то настройка качества для c44 ещё, потому что жмёт слишком агрессивно, особенно chroma.
Hi @plzombie .
Меня беспокоит вопрос цветности. Ежели ImageDjvulThreshold
передавать изображения не RGB, а Grey, то будет segment fault
. А качество же задаётся параметрами c44
, либо slice
, либо decibel
. Какие параметры slice
можно посмотреть с помощью djview
в существующих DjVu-шках.
PS: Я наверное доделаю DjVuL с передачей ей channels <= 3
.
PS2: Я сделяль :) : https://github.com/ImageProcessing-ElectronicPublications/stb-image-djvul/commit/9e57b5d842e3db733eb41bdac307c98d0105e4b7
PS3: Забыл спросить: c44
пользует pbm
-маски для кодирования (важный/неважный пиксель). Стоит валять функцию для генерации масок Bg и Fg на основе основной маски, или сам смогёшь?
Hi @plzombie .
Михаил, пожайлуста, погляди simpledjvu. Я собственно хочу вырезать из него "кирпичный" алгоритм и вставить DjVuL
. Но из-за плюсов у меня отторжение мозга. Не всёк пока, сможет ли "оно" работать с PPM
?
@zvezdochiot Привет. Нет. https://github.com/ImageProcessing-ElectronicPublications/simpledjvu/blob/master/src/normalize.cpp#L52 https://github.com/barak/djvulibre/blob/1a47fd3a6396efcbcba892bb415185ddeb6d3535/libdjvu/GBitmap.h#L86 - здесь используется класс GBitmap из djvulibre, который только для чб и полутоновых. И у тебя там лицензия Unlicense, а в исходниках GNU GPL 3.
Кстати, на счёт djvul. Он под unlicense? Или под zlib? Или там что-то от monday2000 осталось ещё?
@plzombie say:
Кстати, на счёт djvul. Он под unlicense?
Да. Ежели что, все вопросы к автору, то есть мне. monday2000 не при делах, его алгоритм совсем другой. Под Zlib он попал только в пределах imthreshold, до кучи, так сказать. А насчёт simpledjvu, ежели Mikhail Dektyarev возразит, то сменю, а ежели нет, то всё пучком. PR я ему уже отправил.
@plzombie say:
здесь используется класс GBitmap
А какой класс использует PPM? c44
ковырять? Случайно не #include "GPixmap.h"
?
Всё. Нашёл.
https://github.com/barak/djvulibre/blob/1a47fd3a6396efcbcba892bb415185ddeb6d3535/tools/c44.cpp#L757-L758
Буду кумекать.
А какой класс использует PPM? c44 ковырять?
GPixmap
@plzombie say:
который только для чб и полутоновых.
Больше трёпу, чем делу. Вот вам ответ от дилетанта и любителя: mfbdjvu.
@plzombie say:
Можешь описать, как выхлоп от этой функции запихнуть в csepdjvu?
Присмотревшись, я понял, что для некоторых изображений более выгоден csepdjvu
. Уж не "сделать" ли мне "его" на базе DjVuL
? У меня есть маска (по маске я всегда могу отбелить фон), есть reconstruct
(я могу восстановить исходный размер FG, после чего отбелить фон). Единственное что не хватает - KMeans, но он есть у меня в noteshrink. Вот только DjVuL
для создания маски в данном случае слабо подходит, но у меня есть Sauvola
. "Смотрю я на всё это и вижу" достаточно геморойненько всё "звучит", но ежели надо, то я могу "постараться" и для "этого" варианта сегментации изображения.
Такие вот дела. Сам себя читаю и уже ничего делать не хочу.
Hi @plzombie .
Попробовал перевоять свое "детище" на твой "язык": ImageDjvulThreshold.c.gz
Не знаю взлетит ли у тебя с первого раза, но в моей реализации оно вот такие штуки делает:
PS: Маски FG и BG и ресайз FG делается отдельно. Смотри также imthreshold-demo.