2016-03-24 28 views
0

'da iki dizinin karşılaştırılması İlkel bir OCR projesi yapıyorum. Bir görüntü matrisini sayı matrisleriyle karşılaştıran ve en yüksek sayı matrisi en iyi eşleşmeyle "puanla" yazan bir yöntem yazdım. Bir OCR

public double compareMatrices(int[][] num, int[][] img) { 
    int nNumRows = num.length; 
    int nNumCols = num[0].length; 
    int nImgRows = img.length; 
    int nImgCols = img[0].length; 

    double highest = 0; 

    for (int row = 0; row < nImgRows - nNumRows + 1; row++) { 
     for (int col = 0; col < nImgCols - nNumCols + 1; col++) { 
      double score = 0; 
      for 
      (int row_offset = 0; row_offset < nNumRows; row_offset++) { 
       for (int col_offset = 0; 
         col_offset < nNumCols; col_offset++) { 
        int imgRowIndex = row + row_offset; 
        int imgColIndex = col + col_offset; 
        int numV = num[row_offset][col_offset]; 
        int imgV = img[imgRowIndex][imgColIndex]; 

        if ((imgV == 1) && (numV == 1)) { 
         score +=1; 
        } else if ((numV == 1) & (imgV == 0)) { 
         score -= 0.25; 
        } else if ((numV == 0) && (imgV == 0)) { 
         score += 0.25; 
        } 
       } 
      } 

      if (score > highest) { 
       highest = score; 
      } 
     } 
    } 
    return highest; 
} 

Şimdi compareMatrices yönteminden puanları karşılaştırarak en uygun olanıdır sayı matrisleri belirleyen bir yöntem yazmak çalışıyorum: İşte benim yöntemidir. Ben ne

imgd0 bir test görüntüsü olduğu bu, (ya ben bile sadece karşılaştırıldığında edilecek bir görüntü matrisi olacak diyebilir resmini belirtmek gerekir??):

public String FindBestMatch() { 
    numFiles.getMatrix("zero"); 
    compareMatrices(int[][] zero, imgd0); 
    numFiles.getMatrix("one"); 
    compareMatrices(int[][] one, imgd0); 
    numFiles.getMatrix("two"); 
    compareMatrices(int[][] two, imgd0); 
    numFiles.getMatrix("three"); 
    compareMatrices(int[][] three, imgd0); 
    numFiles.getMatrix("four"); 
    compareMatrices(int[][] four, imgd0); 
    numFiles.getMatrix("five"); 
    compareMatrices(int[][] five, imgd0); 
    numFiles.getMatrix("six"); 
    compareMatrices(int[][] six, imgd0); 
    numFiles.getMatrix("seven"); 
    compareMatrices(int[][] seven, imgd0); 
    numFiles.getMatrix("eight"); 
    compareMatrices(int[][] eight, imgd0); 
    numFiles.getMatrix("nine"); 
    compareMatrices(int[][] nine, imgd0); 
her sayı matrisine geçmesi daha bunu yazmak için daha iyi bir yolu yoktur koşma, Peki soruyorum benim FindBestMatch yöntemi için ise

public class NumFiles { 

    private int[][] one = makeMatrix("one.txt"); 
    private int[][] two= makeMatrix("two.txt"); 
    private int[][] three= makeMatrix("three.txt"); 
    private int[][] four= makeMatrix("four.txt"); 
    private int[][] five= makeMatrix("five.txt"); 
    private int[][] six= makeMatrix("six.txt"); 
    private int[][] seven= makeMatrix("seven.txt"); 
    private int[][] eight= makeMatrix("eight.txt"); 
    private int[][] nine= makeMatrix("nine.txt"); 
    private int[][] zero= makeMatrix("zero.txt"); 

    public NumFiles() { 
    } 

    public int[][] getMatrix(String num){ 
     if (num == "one") { 
      return one; 
     } 
     else if (num == "two"){ 
      return two; 
     } 
     else if (num == "three"){ 
      return three; 
     } 
     else if (num == "four") { 
      return four; 
     } 
     else if (num == "five") { 
      return five; 
     } 
     else if (num == "six") { 
      return six; 
     } 
     else if (num == "seven"){ 
      return seven; 
     } 
     else if (num == "eight"){ 
      return eight; 
     } 
     else if (num == "nine") { 
      return nine; 
     } 
     else if (num == "zero") { 
      return zero; 
     } 
     else { 
      int [][] k = {{-1},{-1}}; 
      return k; 
     } 
    } 

:

numFiles.getMatrix gelen bir yöntemdir nerede Bir si karşısında her defasında compareMatrices ngle test resmi? Teşekkürler!

+0

== öğesini değil Dizeleri karşılaştırmak için eşittir yöntemini kullanırsınız. –

+0

@GilbertLeBlanc ==, yapmaya çalıştığım şey için iyi çalışıyor. Gerçekten sadece 'FindBestMatch' yöntemiyle sorun yaşıyorum – amizz

+0

Sorununuz tam olarak nerede? Soruyu iyileştirmek için [Minimal, Tam ve Doğrulanabilir bir örnek nasıl oluşturulur?] (Http://stackoverflow.com/help/mcve) adresine de bakabilirsiniz. Teşekkürler! –

cevap

0

Sorunu anlamıyorum; hepsini yazmanız gerekip gerekmediğini sorarsanız, cevap hayır demektir; Eğer bir dosyaya veya dizine (kod atlanmıştır) onları yükleyebilirsiniz Sonra

class Image {String name; int[][] pixels;} 

size görüntüler

List<Image> images = new ArrayList<>(); 

bir listesini tutmak görüntünüzü tanımlayan bir sınıf oluşturmak ve adımlayabilirsiniz akışları ile çok zarif bir şekilde listeleyip küçült(), ama aslında yazmayı çok uykuluyorum.