Шаблон растянуло по одной оси: как проверить метки перед вырезкой букв

Если горизонтальный и вертикальный масштабы изображения не совпадают, одинаковые ячейки на бумаге превращаются в прямоугольники, а рассчитанные по одному краю координаты постепенно уходят от линий сетки. До извлечения букв сравните расстояния между маркерами по обеим осям, затем исправьте преобразование и проверьте несколько ячеек в разных частях листа. Так вы отделите растяжение всего кадра от перекоса, изгиба бумаги и ошибки измерения.
Как выглядит растяжение по одной оси
У шаблона есть заданная геометрия: ряды и колонки расположены с повторяющимся шагом, а клетки предназначены для похожих по размеру вырезок. При неравномерном изменении размера один шаг меняется сильнее другого. Например, при сканировании программа может привести лист к нужной ширине, но задать высоту отдельно; при вставке изображения в макет его стороны тоже иногда масштабируют независимо.
Первый признак — не сама «широкая» клетка на экране, а устойчивое несоответствие контрольных расстояний. Если два маркера, которые на распечатке стоят на одинаковом отступе слева и справа, после нормализации показывают разные величины по сравнению с расстоянием между маркерами сверху и снизу, стоит проверить соотношение масштабов. Учитывайте, что поля или формат файла могут отличаться: сравнивайте расстояния между известными точками шаблона, а не размер всей фотографии.
Не путайте растяжение с перспективой. При перспективном снимке прямоугольная сетка обычно сходится к более узкой стороне, а клетки меняются в зависимости от положения на листе. При равномерном растяжении разница масштаба действует по всей площади примерно одинаково: горизонтальный шаг стабильно отличается от вертикального. Если же отклонение нарастает только у края или меняется по кадру, вероятнее нужна коррекция перспективы, объектива или формы листа.
Что измерять по меткам
Метки полезны, когда дают однозначные соответствия между координатами исходного шаблона и снимка. Для проверки равномерности нужны расстояния по горизонтали и вертикали, желательно между несколькими парами точек. Подойдут центры угловых маркеров, если они нанесены симметрично, либо дополнительные контрольные точки с известным шагом. Не берите за единственный ориентир внешний край бумаги: он может быть срезан, загнут или плохо различим.
- Зафиксируйте координаты центров одинаковых меток слева и справа, затем вычислите ширину шаблонной области между ними.
- Повторите измерение по вертикали между верхней и нижней метками.
- Если сетка содержит много колонок или строк, проверьте расстояние между внутренними метками либо пересчитайте несколько последовательных шагов.
- Сравните пропорции с исходным PDF или распечатанным шаблоном, если он сохранился.
Измеряйте центры, а не края меток: толщина линии и размытие могут слегка менять визуальную границу. Если маркер расплылся, выберите одинаковое правило для всех точек, например геометрический центр видимой формы. Для диагностики важнее последовательность, чем псевдоточная дробь до пикселя: фиксируйте исходные измерения и способ их получения.
Рассчитайте коэффициенты отдельно по X и Y
Обозначьте известное горизонтальное расстояние в исходном шаблоне как Wx, а соответствующее измерение на изображении как wx. Вертикальные величины обозначьте Hy и hy. Тогда масштабы изображения по осям равны sx = wx / Wx и sy = hy / Hy. Если sx и sy заметно различаются относительно точности ваших измерений, изображение имеет неодинаковый масштаб по направлениям. Универсального допустимого процента нет: точность зависит от размера меток, качества файла и ширины ячеек.
Для практического решения переведите разницу масштаба в отклонение на краю. Если один шаг колонки составляет W пикселей после преобразования, а ошибка масштаба равна разнице sx и sy, оцените, насколько прогнозируемая граница уйдёт за несколько колонок. Когда сдвиг сопоставим с запасом внутри ячейки, разметку надо корректировать до вырезки; иначе соседние буквы могут получить разные поля или линии сетки попадут в изображение символа.
Пример: расстояние между парой горизонтальных меток после сканирования составляет 980 пикселей, а между вертикальными — 1010 при том, что исходные участки имели одинаковую длину. Отношение около 0,97 указывает на сжатие по горизонтали относительно вертикали. Эти цифры — пример расчёта, а не норматив качества сканера.
Проверьте, где возникла ошибка
Перед обработкой проверьте цепочку файлов: исходный PDF, распечатку, скан или фото, редактор, экспорт. Если исходный лист на бумаге уже имеет разные размеры сторон относительно эталона, исправление потребуется на этапе печати либо повторной распечатки. Если лист физически нормальный, но импортированная картинка растянута, исправляйте пиксельные координаты и сохраните исходный файл без изменений.
Сравните четыре контрольных отрезка — сверху и снизу, слева и справа. Одинаковое направление ошибки во всех парах поддерживает гипотезу о неравномерном масштабе. Различие между верхним и нижним отрезком говорит, что одной пары меток недостаточно: лист мог лежать неровно, камера смотрела под углом, или бумага деформирована. В таком случае сначала выпрямляют геометрию листа, а затем пересчитывают координаты клеток.
После поворота, кадрирования, коррекции перспективы или изменения размера координаты меток меняются. Нельзя оставить старые значения и надеяться, что глаз подправит каждую вырезку. Сохраните порядок трансформаций и выполняйте измерения уже на финальном рабочем изображении либо пересчитайте контрольные точки вместе с изображением. Документация OpenCV отдельно описывает масштабирование по осям и преобразования изображения, а перспективное преобразование строится по соответствующим точкам; это полезное различие, если процесс выполняется программно (геометрические преобразования OpenCV, getPerspectiveTransform).
Как исправить геометрию до вырезки
Если весь лист имеет постоянное растяжение, примените одинаковое преобразование ко всему изображению и заново пересчитайте координатную сетку. Практически это означает: выбрать нужный формат области, отдельно задать ширину и высоту в соответствии с исходным шаблоном, сохранить новую копию, найти маркеры на исправленной версии и проверить границы нескольких клеток. Исправление только отдельных клеток создаёт несогласованную геометрию и усложняет сравнение букв.
Если обнаружена перспектива, сначала выровняйте плоскость листа по четырём соответствующим угловым точкам. После этого вновь измерьте горизонтальный и вертикальный шаг. Перспективная коррекция может убрать сходящиеся линии, но сама по себе не гарантирует исходную пропорцию листа: проверьте известный размер или исходный файл. Если бумага выгнута, четыре угла не описывают локальную кривизну; лучше переснять или отсканировать плоский лист, чем растягивать отдельные участки на глаз.
Для ручного процесса используйте прозрачную направляющую поверх изображения. Совместите её угловые метки, проверьте крайние строки и колонки, а затем вставьте тестовые рамки в середину листа. Для программного процесса храните исходные координаты маркеров и единую матрицу преобразования, чтобы все границы сетки вычислялись одним способом. В OpenCV коэффициенты fx и fy у resize задают масштаб по горизонтали и вертикали; раздельные значения полезны для предсказуемого исправления, но ими нельзя компенсировать локальный изгиб бумаги.
Проверьте не только углы
После нормализации откройте контрольные вырезки из начала, середины и конца ряда, а также из верхней, центральной и нижней части шаблона. На каждой должны оставаться одинаковые поля, а штрих не должен касаться границы рамки без причины. Если углы выровнены, но внутренняя клетка уходит от сетки, значит, ошибка не сводится к единому растяжению: проверьте шаг сетки, кривизну листа или выбор центров маркеров.
Сверьте также порядок извлечения. Геометрически правильный прямоугольник всё равно может оказаться не той буквой, если координаты считают после горизонтального отражения, поворота или неверного кадрирования. Сделайте контактный лист с несколькими тестовыми ячейками и их ожидаемыми позициями, затем проверьте первую, соседнюю и последнюю клетку строки. Так обнаруживается ошибка индексации до того, как обработан весь алфавит.
Чеклист перед массовым извлечением
- Оставьте исходный файл и работайте с копией.
- Определите центры меток и сохраните их координаты.
- Сравните горизонтальные и вертикальные расстояния как минимум по двум независимым участкам.
- Проверьте, одинаков ли характер ошибки сверху и снизу, слева и справа.
- Исправьте растяжение всего кадра до построения границ ячеек.
- Пересчитайте сетку после каждого поворота, кадрирования или преобразования.
- Откройте контрольные вырезки из разных частей шаблона и проверьте поля и порядок.
Ошибки, которые портят вырезки
- Подгонять изображение «на глаз» до совпадения одной угловой метки. Это скрывает расхождение на противоположной стороне.
- Сравнивать полную ширину фото с высотой листа: в кадр могут попадать пустые поля и тени.
- Использовать старые координаты после поворота или нового кадрирования.
- Исправлять каждую клетку отдельно. Так вы теряете единую систему координат, и ошибки труднее отследить.
- Считать любую разницу доказательством растяжения. Сначала исключите перспективу, изгиб и неверно определённые центры.
- Проверять только крайние маркеры. Внутренние ячейки нужны, чтобы заметить локальную деформацию и ошибку шага сетки.
Частые вопросы
Можно ли просто изменить ширину изображения?
Можно, если измерения показывают постоянное горизонтальное или вертикальное масштабирование всего листа. После изменения размера обязательно найдите контрольные точки заново и пересчитайте координаты сетки. Если разница меняется по площади, простое масштабирование исправит один участок и ухудшит другой.
Как понять, что виновата перспектива, а не растяжение?
При перспективе линии сетки и повторяющиеся клетки меняют размер в зависимости от положения на листе; противоположные стороны могут сходиться. При равномерном растяжении шаг по одной оси систематически отличается от шага по другой по всей области. Для надёжной диагностики сравните несколько пар меток и внутренние клетки.
Достаточно ли четырёх угловых меток?
Их часто достаточно, чтобы оценить прямоугольную область и перспективу плоского листа. Но четыре точки не выявят мелкий изгиб бумаги в центре и локальную ошибку печати. Добавьте проверку одной или нескольких внутренних клеток, особенно если шаблон большой или фото сделано с листа, который лежал неровно.
Нужно ли растягивать сами буквы обратно?
Если искажение появилось на изображении до вырезки, исправляйте общий кадр и затем извлекайте символы заново. Отдельное обратное растяжение каждой буквы меняет форму штрихов и добавляет ручные различия. Если вырезки уже получены, вернитесь к исходному кадру и пересчитайте сетку, когда он доступен.
Что делать, если метка закрыта штрихом?
Не угадывайте её центр по одной видимой части. Используйте симметричную метку на другой стороне, внутренние направляющие и шаг сетки, чтобы проверить предполагаемую координату. Если неоднозначность остаётся, добавьте контрольную точку вручную на копии изображения и запишите это решение, прежде чем обрабатывать весь ряд.
Насколько точными должны быть измерения?
Ориентируйтесь на ширину ячейки и запас между штрихом буквы и рамкой: ошибка координаты должна быть существенно меньше этого запаса. Не существует одного процента, подходящего для любого шаблона. Проверьте вырезки в исходном масштабе и выберите точность, при которой линии сетки не попадают в символы и не съедаются его крайние штрихи.
Можно ли изменить масштаб после извлечения?
Лучше сначала нормализовать изображение. Если вы исправляете масштаб позже, старые координаты ячеек и размеры вырезок становятся несогласованными с новым кадром. В крайнем случае пересчитайте координаты по новой версии изображения, а затем заново проверьте весь контактный лист.
Итог
Неравномерный масштаб ищут по соотношению расстояний между известными метками, а не по впечатлению от формы страницы. Сначала отделите растяжение всего изображения от перспективы и изгиба, затем исправьте геометрию, пересчитайте сетку и проверьте вырезки в нескольких частях листа. Когда контрольные ячейки совпадают с направляющими, можно продолжать работу над собственным шрифтом в Fontgenerator.