Цитата: на пробной картинке результат впечатляет
Вообще-то на данном скане как раз-таки видно, что результат не идеален. Ближе к центру выпрямленного скана линия текста осталась слегка изогнута вверх слева. Мне попадались такие сырые сканы, где выпрямление достигалось вообще идеальным!
Цитата: подобные сканы у меня редко
Да, вот в этом-то и главная загвоздка. Не так уж и часто бывают сканы с идеальными горизонтальными кромками. Краевой деворпинг следует рассматривать как первую попытку совладать с деворпингом в СТ. Или как отправную точку для дальнейшего усовершенствования деворпинга в СТ. В СТ так всё запутанно с деворпингом, что потребовалось сделать вот такую простейшую реализацию своего деворпинга, чтобы хоть как-то разобраться в механизме СТ-деворпинга.
Мне нужно было лишь выстроить модель искажения - а выпрямление по ней делается само - я понятия не имею, как именно. Модель искажения - это грубо говоря, набор красных точек сверху и снизу.
Любой деворпинг в СТ начинается с того, что за основу берётся область полезного контента, найденная на предыдущих этапах. Если бы не это, то, по словам Tulon'а, деворпинг был бы перенесён на стадию Deskew.
В автоматическом деворпинге Tulon'а внутри области полезного контента вверх-вниз делается сканирование строк текста (и кромок страницы - если они есть - как в моем краевом деворпинге). По самой верхней и самой нижней строке текста (кромке страницы) строятся 2 полилинии (просто набор точек) - по опорным точкам этих строк. Всё это можно увидеть в "режиме отладки" в СТ. В идеале, построенные 2 полилинии должны точно повторять изгибы самой верхней и самой нижней строки (кромки страницы). Однако, как уже было сказано ранее, малые концевые изгибы авто-деворпинг Tulon'а не замечает - не хватает точности (а краевой - замечает).
Получив 2 полилинии (т.е. это и есть модель искривления), можно считать задачу выполненной - выпрямление программа делает по этой модели уже как-то сама.
Отсюда вывод: можно самому каким угодно способом сформировать эти 2 полилинии, и подсунуть программе. Я для начала попробовал использовать кромки страниц, а теперь уже, я думаю, надо бы попробовать по строкам текста строить полилинии, можно перепробовать теперь разные способы построения кривизны строк текста. Вдруг получится точнее, чем у Tulon'а.
У авто-деворпинга Tulon'а есть серьёзная проблема: он часто плохо определяет вертикальные границы блока линий текста. Зачем вообще их определять - я пока не понял. Именно из-за этого получаются дикие результаты авто-деворпинга, которые его давно скомпроментировали ИМХО.
Добавлено: Новая сборка:
Scan Tailor Featured 2013.05.23. Залил сразу на оффсайт:
https://sourceforge.net/projects/scantailor/files/scantailor-devel/featured/ Вводит новую фичу:
Auto_Dewarping_Vert_Half_Correction Объясню суть по картинке:
Когда автоматический деворпинг неправильно определяет вертикальные границы контента, то они получаются не-вертикальными - а со значительным углом уклона от вертикали. Это видно по синей сетке всегда. Получается это всегда из-за того, что конец верхней полилинии лежит не над концом нижней (или наоборот). Рисунок иллюстрирует такую ситуацию: красные кривые - это полилинии модели искажения, синие линии - это вертикальные границы. Моё исправление очень простое: оно проверяет угол наклона вертикальных границ. Если он больше некоей эмпирической величины (2,75 градусов я поставил) - то к самой короткой полилинии добавляется ещё одна точка, координаты которой берутся от соседних точек - с таким расчётом, чтобы вертикальная граница стала строго вертикальной. На рисунке добавленная точка показана тёмно-зелёным, а пунктиром - исправленные линии после добавления этой точки.
Всё это пока работает только с той стороны синей линии, которая близка к прямой. Та сторона, которая изгибается кривой (около корешка) - её я не трогаю. Потому-то этот патч и носит половинный характер. Причина этого в том, что можно легко "дорастить" прямую до нужной длины - а вот как "дорастить" кривую?
Так что пока придётся довольствоваться половинным сокращением случаев ошибок автоматического деворпинга. Впрочем, вторую половину ошибок можно править вручную - надо лишь поставить красные точки кривого конца полилиний строго одну над другой.