2015-11-09 3 views
1

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

Однако на двух изображениях накладывается совпадение, и я пытаюсь создать программу, которая найдет, где верхняя строка image2 встречается в зависимости от того, какая строка пикселей в изображении 1. Я создал цикл for, чтобы собрать каждую строку пикселей на изображение в массиве.

это мой код:

int row = 0; 
    for (int i = 0; i < imageArray1.length; i++) { 

     for (int j = 0; j < imageArray1[i].length; j++) { 
      if (imageArray1[i][j] == (imageArray2[0][0])) { 
       row = imageArray1[i][j]; 
      } 
     } 

    } 

проблема, я уверен, я только собрав с отдельного пикселя, который является верхней левой части второго изображения, а не вся строка. Любые идеи, как обойти это? новый для java

+0

- первая строка изображения2 полностью внутри image1, или это будет частичное перекрытие? и каков тип imageArray1 и 2? каждый элемент воспроизводит один пиксель? (coz, что странно, что вы пишете 'row = imageArray1 [i] [j]', который кажется, что вы назначаете «пиксель» в «индекс строки» –

+0

Эй, Сиу, у вас есть хороший ответ? – Bon

+0

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

ответ

0

Вам необходимо исправить imageArray2[0][0], поэтому он всегда сравнивается с первым индексом только imageArray2. Вам необходимо повторить ваш imageArray2 вместе с imageArray1 для полного сравнения. Для этого я предлагаю вам использовать вложенный цикл для imageArray2.

+0

hmmm Я могу думать о выполнении другой инструкции if, которая сравнивается с изображением2 [0] [1], но это все еще совместимо только с первым пикселем изображения1, а теперь и всей строкой ... –

+0

добавьте еще один для утверждения и используйте переменную этого цикла для итерации для второго массива изображений –

0

Вам нужно перекрестно проверять каждую строку в изображении1 на каждую строку в изображении2. Поэтому 3 уровней цикла: 1) цикл по строкам в image1 2) цикла по строкам в image2 3) петли через колонку в текущей строке в image1 и image2, чтобы решить, если они перекрытие

int overlappingRowInImage1 = 0; 
    int overlappingRowInImage2 = 0; 
    int[][] imageArray1 = null; 
    int[][] imageArray2 = null; 
    // loop through the rows in the first image 
    for (int row1 = 0; row1 < imageArray1.length; row1++) { 
     boolean foundIdenticalRow = false; 
     // loop through the rows in the second image 
     for (int row2 = 0; row2 < imageArray2.length; row2++) { 
      foundIdenticalRow = true; 
      // two rows are identical if each column in both rows are the same 
      for (int col = 0; col < imageArray1[row1].length; col++) { 
       if (imageArray1[row1][col] != (imageArray2[row2][col])) { 
        foundIdenticalRow = false; 
        break; 
       } 
      } 
      if (foundIdenticalRow) { 
       overlappingRowInImage1 = row1; 
       overlappingRowInImage2 = row2; 
       break; 
      } 
     } 
     if (foundIdenticalRow) { 
      System.out.println("Row " + overlappingRowInImage1 + " in image 1 is overlapping with Row " + 
        overlappingRowInImage2 + " in image 2"); 
      break; 
     } 
    } 
+0

Он дает мне строку 0 в качестве ответа каждый раз, hmmmm –

+0

@SIUE_KYLE вы можете поделиться своими тестовыми данными – Bon

Смежные вопросы