Сравнение двух похожих изображений, содержащих текст - PullRequest
0 голосов
/ 09 мая 2020

У меня есть пары изображений, которые выглядят одинаково для человеческого глаза, но если вы увеличите масштаб и изучите детали, они различаются пикселями - в основном из-за разной визуализации.

Я ищу алгоритм, который мог бы определить, являются ли два изображения одинаковыми. Использование обычного сравнения пикселей по пикселям не работает, потому что есть различия, такие как различное сглаживание или различный межбуквенный интервал (что приводит к смещению в пикселях).

Другой возможный случай, когда на одном изображении текст может быть itali c / подчеркивать, а на втором изображении - нет.

Предположения:

  • Шрифт размер одинаков для двух изображений
  • Размер шрифта может быть большим и маленьким - от 8px до 30px
  • Изображения имеют одинаковый размер

Вот 2 примера изображений, содержащих один и тот же текст, которые отображаются немного по-разному:

enter image description here

enter image description here

Вот пример двух разных изображений:

enter image description here

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 09 мая 2020

Было бы хорошо знать, для чего вы запускаете этот процесс. Я имею в виду, что ниже я предлагаю возможное использование OCR; конечно, если вы пытаетесь создать собственное OCR, мое предложение не имело бы никакого смысла (у меня возникло подозрение, что вы, возможно, пытаетесь автоматизировать какой-то интерфейс пользовательского интерфейса, отображаемый в браузере).

Различное сглаживание, которое вы можете компенсировать с помощью предварительного порогового значения или вычисления PSNR . Это предполагает, что буквы расположены точно так же.

Если интервал другой (и даже больше, если у вас разные кернинги ) и сглаживание отличается, то я думаю, что вам лучше всего либо распознать оба изображения по отдельности, либо сравнить полученный текст; или вам придется сегментировать каждую текстовую строку, а затем перестраивать изображения для каждой буквы. Обычно вы берете один вертикальный срез, шириной от одного до трех пикселей, из изображения 1; затем получите значения PSNR для пяти разных срезов одинакового размера на изображении 2, выровненные со смещениями от -2 до +2 (скажем); минимальный PSNR даст вам как корректировку смещения для следующих букв, так и надежность совпадения.

Проблема в том, что если буквы действительно разные, вы больше не сможете чтобы надежно вычислить смещения изображения, чтобы вы могли сказать, что «HELLO» и «HILLS» разные, но не сможете количественно оценить разницу, потому что вы потеряли синхронизацию и не сможете сравнить два L. Если только вы не попытаетесь выполнить повторную синхронизацию с большим смещением (от -2 до + X, где X - ширина более широкой буквы, возможно, «W»), но это будет дорого и все еще подвержено ошибкам ( например, при сравнении «13» с буквой «B» или «LI» с «U», «I.» с «L» и т. д. c.).

...