Я довольно новичок ie в java и программирую в целом, и у меня есть проект для распознавания текста по изображениям для Android. Я работаю в Android Studio и в настоящее время у меня есть две матрицы - одна со значениями для исходного изображения, взятого из галереи устройства, и одна со значениями для изображения шаблона. Значения в матрицах - это в основном цвета пикселей, работающих в оттенках серого, разделенных на 6 интервалов: значение цвета 255-214 равно 0, значение цвета 172-213 равно 0,2, значение цвета 129-171 равно 0,4 и т. Д. c .
Мне нужно go построчно в обеих матрицах и провести с ними некоторые подсчеты - взять первое значение в первой строке исходной матрицы и первое значение в первой строке матрицы шаблона и использовать его в формула:
nIntensity = 1 - abs(template_value - source_value)
и сделать это для всех значений в одной строке, затем суммировать эти значения и go для второй строки и сделать то же самое (в результате получается массив значений x nIntensity для x матричные линии). Сначала я попытался использовать вложенные циклы, но я как-то переборщил с ними:
for(int sRow = 0; sRow < sourceMatrix.length; sRow++) {
for(int sColumn = 0; sColumn < 1; sColumn++) {
for(int pRow = 0; pRow < patternMatrix.length; pRow++) {
for(int pColumn = 0; pColumn < 1; pColumn++) {
nIntensity += (1 - abs(patternMatrix[pRow][pColumn] - sourceMatrix[sRow][sColumn]));}}}}
, что привело к слишком высоким значениям для переменной nIntensity - с 56 значениями, равными 1,0 в строке как для sourceMatrix, так и для patternMatrix Я должен получить результат числа 56, вместо этого я получил 3192, подразумевая, что он проходит слишком много раз через все циклы. С sColumn < 1
и pColumn < 1
я пытался добиться простоты с самого начала и взять только первую строку обеих матриц, прежде чем углубиться в это и работать с несколькими строками.
После выполнения некоторых В ходе исследования я попытался сделать это довольно просто с помощью кода:
for(int sRow = 0; sRow < sourceMatrix.length; sRow++) {
for (int sColumn = 0; sColumn < 1; sColumn++) {
nIntensity += (1 - abs(patternMatrix[sRow][sColumn] - sourceMatrix[sRow][sColumn]));
System.out.println("Result: " + nIntensity);}}
, который, когда я печатаю результаты после каждого l oop, фактически приводит к результату 56, однако вылетает с исключением
Причина: java .lang.ArrayIndexOutOfBoundsException: length = 56; индекс = 56