xyz писал(а) 26.09.2017 :: 23:08:23:33. БАГ: На этапе 4 «Полезная область», в поле "Пейдж бокс" стоит Дизейбл. При этом происходит перерисовка центрального изображения при каждом изменении значений внутри ячеек Borders in mm. (Которые по идее в этом случае вообще ни при чем.)
(Перерисовка зоны при сдвигании границ , вроде, прекратилась.)
34. Непонятно (этап 4 «Полезная область»), работает ли галка «файн тюне пэж корнерз». Я не вижу ее действия и не знаю, как проверить. Может, внутри желтой области, отрезаемой ПЭЖ БОКС для неё какую-то штриховку сделать, или углы, за которые она зацепилась, выделять ? (Если она что-то дала.)
35. Не 100% понятно, к чему в ПЕЙЖ БОКС (этап 4) относятся кнопки дизейбл / автоматически. Может, имеет смысл галку "файн" разместить ниже них ?
Судя по коду, работает «Полезная область» так:
В оригинале, просто бралось изображение на входе, и в нем либо искался контент, либо его зона выбиралась вручную.
При этом, если у вас обложка, то, скорее всего, контент не обернет ее целиком, а останется на названии книги, и вам придется руками растягивать зону до размеров обложки. Чтобы этого не делать добавили кнопку Disable (в group box'е Полезная область, т.е. нижние 3 кнопки). Эта кнопка автоматически растягивает зону контента на всю страницу. Что несколько смущает, т.к. пользователь может ожидать, что зона контента просто исчезнет и на выходе будет чистый лист. Либо что на выходе будет вся страница, но зона на экране просмотра отображаться не будет. Возможно, кнопку стоит переименовать в Maximize, например.
Потом добавили группу Page Box. Page Box пытается определить страницу на скане, до того, как на ней будет искаться контент. Видимо, это для сканов страниц, захватывающих область вокруг страниц. Т.е. - положили книгу на сканер, и отшлепали сканов на всю площадь сканера, не указывая область сканирования.
Если Page Box включен, то делается попытка образец со скана лишнее, оставив только страницу, а уже потом - искать в ней контент.
Если врубить Debug mode (видимо зря я его в группу настроек Output положил, раз он и на этом этапе работает) - то при работающем Page Box (режим Auto или Fine Tune Corners включены, а режим выбора области контента стоит в Auto (или он сбросится в Auto сам)), в самом начале появятся несколько новых закладок. Они показывают этапы попытки определения страницы.
Определяется она следующим хитрым образом:
1. Скан уменьшается до 150dpi и переводится в grayscale
2. При помощи методов автоматического определения threshhold'а "OtsuThreshold" из него делают ч/б маску.
3. По ней, хитрым способом выделают прямоугольник, соответствующей размеру страницы. Подозреваю, что похожим на автодетект картинок с rectangle принципом. Только сильно попроще.
4. Уже в этом прямоугольнике, а не на всем скане, ищут контент (но используют threshhold по методу WolfThreshold).
5. Все это, естественно, возвращается в родные dpi.
Это в самом простом случае. Теперь, извращения:
Если заданы Borders in MM, то на эту величину уменьшается размер страницы. Это отступы от его границы по направлению внутрь. Ну, borders. На экране эта область отображается желтым. Но видно её, естественно, только тогда, когда Page Box работает. Borders задаются в MM, чтобы не зависеть от dpi изображения. Возможно при неработающем Page detection эти контролы нужно скрывать или блокировать.
Далее.
Через параметр командной строки можно передать аргумент "page-detection-box", задающий реальный размер страницы. Например 100x200 - ширина 100, высота 200 пикселей для изображения в 150dpi (вроде). Если он задан, то на этапе 2 помимо бинаризации с "OtsuThreshold" будут сделаны бинаризации с peakThreshold, MokjiThreshold, SauvolaThreshold, WolfThreshold. Для каждой из этих масок будет определена прямоугольная область страницы (стандартным образом). Затем ширина и высота этих областей для каждой из масок будут сверены с переданными вами эталонными размерами. И та, что ближе, будет выбрана в качестве лучшей. Т.е. если вы знаете реальный размер страницы (A4, к примеру), то вы его сообщаете - и страницу пытаются найти не одним, а 5 разными способами. И из всех границ сторон страниц во всех способах будут выбирать пары границ (левая/правая, верхняя/нижняя) дающих максимально близкий к сообщенной вами ширине и высоте результат.
Замечу, что если вы выберете Debug mode, вы увидите все 5 масок в закладках debug, даже если параметр "page-detection-box" не передавали. Это - недочет автора. Даже если параметра нет, и по факту используется один "OtsuThreshold", создаются все 5 масок, что жрет процессорное время зазря.
Далее, если нажат Fine Tune Corners, то для любой ч.б. маски после определения ее прямоугольной области-страницы, но перед ее сравнением с эталоном (если требуется) или вычитанием границ, проводится процесс оптимизации расположения вершин. Делается это так:
Если пиксель под углом зоны области в ч/б маске не белый, то вершину переставляют на соседний пиксель - по-диагонали по направлению к центру прямоугольника. Т.е. - уменьшают высоту и ширину на 1 со стороны вершины. Все углы обегаются по кругу, и делают (если могут) сдвиг на 1 пиксель. До тех пор, пока не могут двигаться.
При этом, если указан эталонный размер ("page-detection-box"), то к нему может быть дополнительно указан параметр командной строки - "page-detection-tolerance". По умолчанию равный 0.1. Это процент. Т.е. 0.1 - это 10%. Процессу Fine Tune Page Corners запрещено уменьшать высоту или ширину эталонного размера более чем на этот процент. Если он его достиг по одному из этих измерений, то движение углов прекращается.
Надеюсь, объяснил понятно, и сам все правильно понял.