Расчет расстояния между двумя изображениями - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь создать программу распознавания изображений, в которой она может распознавать базовые числа от 0 до 9. Что я делаю, так это кормлю программу черно-белым изображением, подобным следующему: enter image description here

, и он уменьшит каждую из букв до 9px на 9px, затем проанализирует 9 областей 3x3 и сгенерирует соотношение черно-белых пикселей для каждой из этих областей, а затем эти 9 соотношений для9 регионов будут сохранены в массив.В конце будут сгенерированы 10 из этих массивов с 9-ю соотношениями, которые будут сохранены в файл.

Затем я добавляю другой файл и уменьшаю его буквы до 9x9, обратите внимание, что он будет того же вида.изображения с номерами от 0 до 9 в черно-белом.На этом этапе я сделаю вложенный цикл for, для каждой буквы в этом новом изображении я вычислю евклидово расстояние от всех символов из сохраненного файла, вычтя коэффициент конкретной области 3x3 и возведя его в квадрат.После того, как я добавил все 9, я в конце корня квадратного числа.После всех циклов он вернет самое низкое евклидово расстояние, которое он нашел из 10, и вернет индекс, где это было найдено.он будет делать это для всех 10 чисел, от 0 до 9.

Но здесь я столкнулся с проблемой, я не уверен, что делаю что-то неправильно, но когда я проверяю это на том же изображенииКонечно же, я получаю минимальное евклидово расстояние 0 для каждого из чисел при сопоставлении с ними.Вот результат, когда его сравнивают с самим собой:

0: min:0.0,closest to symbol 0.0
1: min:0.0,closest to symbol 1.0
2: min:0.0,closest to symbol 2.0
3: min:0.0,closest to symbol 3.0
4: min:0.0,closest to symbol 4.0
5: min:0.0,closest to symbol 5.0
6: min:0.0,closest to symbol 6.0
7: min:0.0,closest to symbol 7.0
8: min:0.0,closest to symbol 8.0
9: min:0.0,closest to symbol 9.0

Но когда я сравниваю это с другой картиной, такой как: enter image description here или enter image description here

Программа будет работать ужасно и правильно совпадать только с 1 или 2 буквами.

Вывод для проверки второго изображения (жирные буквы):

0: min:1.8506293555082927,closest to symbol 2.0
1: min:1.564875407093958,closest to symbol 1.0
2: min:0.3639905193866784,closest to symbol 2.0
3: min:1.1955040828800994,closest to symbol 2.0
4: min:1.3529365858707012,closest to symbol 3.0
5: min:2.898762101870034,closest to symbol 3.0
6: min:1.5830312225733887,closest to symbol 3.0
7: min:0.8423801045588752,closest to symbol 2.0
8: min:0.5368578842642693,closest to symbol 2.0
9: min:0.7954891148284288,closest to symbol 2.0

Вывод для проверки третьего изображения (рукописные буквы):

0: min:0.9028763024523015,closest to symbol 0.0
1: min:1.4312693941385868,closest to symbol 2.0
2: min:0.9545516809617107,closest to symbol 3.0
3: min:1.254754527423458,closest to symbol 5.0
4: min:0.9153443316713837,closest to symbol 6.0
5: min:1.7914458590530422,closest to symbol 0.0
6: min:1.3450158998859059,closest to symbol 0.0
7: min:1.077083815334289,closest to symbol 6.0
8: min:0.725648713927017,closest to symbol 6.0
9: min:0.6018180093870922,closest to symbol 3.0

Я получаю, что буквы выглядят по-разному с разными шрифтами, и, вероятно, для точного распознавания других шрифтов требуется более одного изображения, но точностьтак ужасно, что заставляет меня думать, что я должен делать что-то не так.Рукописный выглядит совсем по-другому, но жирная буква выглядит почти так же, как моя, за исключением того, что она толще.Это только распознавание одного или двух из 10 чисел для обоих изображений, и я чувствую, что это случайно, например, как сломанные часы работают два раза в день.Когда я распечатал евклидовы расстояния для жира 9, 9 буквально дал наибольшее евклидово расстояние, это говорит мне о том, что что-то должно быть не так.

Вот формула, которую я использую для своего расстояния enter image description here

...