ImageProcessing-ElectronicPublications / scantailor-experimental

Scan Tailor Experimental is an interactive post-processing tool for scanned pages.
https://github.com/Tulon/scantailor/tree/experimental
GNU General Public License v3.0
30 stars 0 forks source link

dispute: simple dewarping #37

Open zvezdochiot opened 1 month ago

zvezdochiot commented 1 month ago

Hi, @noobie-iv .

Меня всё беспокоит, что, несмотря на конкретную путанность цилиндрической 2D модели исправления искажений,не всегда получается добиться достойного результата.

Оно то всё понятно, но беспокоит не сам этот факт, а то, что используя простейшую 1D линейную модель постолбчатого исправления искажений (photoquick: example: dewarping) удаётся получить результат немногим уступающий этой сложной и навороченной 2D модели.

Как так? И это при использовании всего лишь линейного (2 линии - 2 значения для каждого столбца) интерполянта?

Ведь никто же не мешает чуть "усложнить" эту модеь, внести в неё дополнительный параметр M - количество линий и использовать внутри каждого столбца уже не линейную, а (M-1)-степени интерполяцию. Не сильное ведь усложение, верно?

:question: Да это строго ручной способ исправления искажений, но не стоит ли вам поэкспериментировать с ним в ваших изысканиях?

noobie-iv commented 1 month ago

Слабо вот это развернуть?

IMG_20240623_135052

В оригинале же программа под качественные исходники была. Поворот - от слегка криво лежащих в сканере листов. Перспектива - от фото ровного плоского листа чуть наискосок. А деварп - фото неприжатого разворота книги. Под другие виды деформаций нужны другие фильтры. Понятно, что после использования листа в качестве туалетной бумаги будут некоторые проблемы с обработкой.

Хотя у нас в строительстве именно такие документы норма. Мы до сих пор на согласования носим рулоны, свернутые в A4, для росписи гусиным пером. А потом с них надо снимать скан, и зашивать в PDF. А сканер у нас - A3, и у него старая несмазанная лампа, которая в неудачные дни вместо скана реальную гуглокапчу выдает. Вот мои сканы точно как эти фотки из примера выше и выглядят. Их потом приходится из огрызков в гимпе собирать. В особо тяжелых случаях их еще печатают повторно, носят на доподписи, и сканируют повторно обратно в PDF. Встречались даже патологии, когда очередной согласующий циркулем-измерителем мерил расстояния по координатной сетке, чтобы допуск 0.2мм не нарушен был. Вот где деварп нужен так нужен.

Мой дальний идеал ST - чтобы у него, как у PhotoQuick, была папка plugins, а в нее любой желающий мог относительно легко дописать что-то свое, например, внешний деварп прикрутить. Пока что в ST стадии прибиты гвоздями, и дергают друг друга через прямые ссылки. По-хорошему, это надо чистить, где-то одновременно с добавлением макетирования, потому что они оба основную логику ломают. Но это еще только через год обсуждать надо, я пока то ли в середине разборок с кодом, толи еще у начала. А уж править алгоритмы обработки, или писать свои я точно не буду, только вызов внешних, если получится это сделать.

zvezdochiot commented 1 month ago

@noobie-iv say:

Слабо вот это развернуть?

Ну да, слабо: 342020110-89942ed6-b865-4613-b46e-64732abbbdde dw1d По двум линиям (линейная интерполяция) достаточно лажёво получается.

noobie-iv commented 1 month ago

Тут поверх цилиндра надо еще перспективу учитывать. И, возможно, линзовые искажения. А еще тут перелом наискосок слева вниз от последнего абзаца, где страницу пальцем придерживали, так что линейчатых поверхностей тут две - вдоль страницы и под 45°. Никакие простые деформации этого не починят. Тут нужна трассировка строк, чтобы все их выровнять по вертикали, и трассировка букв, чтобы выровнять по горизонтали. Причем трассировка строк в виде размытых изображений, как сейчас, не сработает, потому что будет глючить на заглавных буквах и на хвостиках Р,У,Д, и т.п. Плюс в интерфейсе нужна возможность ткнуть пальцем в несколько линий, и сказать, что они должны быть ровными - на случай, когда автоматика не справится, или на картинках. Или исключить картинки из анализа. Подозреваю, что, даже если забить на все остальные идеи, и чинить только деварп, это тоже на несколько лет развлечение.

zvezdochiot commented 1 month ago

@noobie-iv say:

Никакие простые деформации этого не починят.

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

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

noobie-iv commented 1 month ago

Я имел ввиду "перспективу в направлении оси камеры". От нее буквы в центре шире букв с краю. Та перспектива, что в ST, распрямляет кривой четырехугольник в квадрат. А тут недостаточно выровнять строки по вертикали, их еще по горизонтали рихтовать надо. То есть еще вдоль направляющей нужны дополнительные параметры деформации, которые к краям буквы растягивают, а к середине сжимают. И, если это в автомате делать, программа должна подобрать положение камеры близко к странице, и форму искривления страницы хотя бы по двум направляющим, чтобы пересчитать результат в плоскость.

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

01

И кстати, такие фото документов-срук тоже попадаются. Если прям припрет, и надо будет одну-две страницы починить, я это в Блендере сделаю. Нанесу текстуру на плоскость, порежу линиями на кривоугольники "10букв X 10строк", распрямлю их вручную и отрендерю на плоскую камеру. Как такое, например, в GIMP сделать - хз. Но книгу так чинить слишком долго.

zvezdochiot commented 1 month ago

@noobie-iv say:

Если прям припрет, и надо будет одну-две страницы починить, я это в Блендере сделаю.

Почему в Блендере, а не в QGIS? В QGIS есть локальное афинное преобрадование (по заданным точкам изображение делится на четырёхугольники, и к каждому четырёхугольнику применяется своё аффинное преобразование).

noobie-iv commented 1 month ago

Блендер интерактивный. В нем я вижу результат, прямо двигая точки. Не нужно полчаса тыкать исходные данные, а потом переделывать их из-за того, что результат не очень. В идеале так и в ST должно быть. А сейчас он как раз на QGIS похож - я вижу сетку деварпа на исходном изображении, а не окончательный результат, из-за этого туда-сюда ерзать надо. По исходным данным не понятно, будет результат правильный или нет. Для карт это еще норм, там же привязка к строго нанесенным точкам предполагается. А в книге откуда мне координаты букв знать?