2015-02-02 1 views
2

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

Я уже сделал почти все, и теперь я улучшаю его. Чтобы проверить наличие сходства, у меня есть 2 зазубренных-многомерные массивы (byte[][,]) где доступ к каждому элементу каждого массива с помощью тройного цикла и хранить их остаток, например:

for (int dimension = 0; dimension < 8; dimension++) 
{ 
    Parallel.For(0, 16, mycolumn => 
    { 
     Parallel.For(0, 16, myrow => 
     { 
      Diffs[dimension][mycolumn, myrow] = 
       (byte)Math.Abs(Image1Bytes[dimension][mycolumn, myrow] 
       - Image2Bytes[dimension][mycolumn, myrow]); 
     }); 
    }); 
} 

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

Как я могу сравнить все массивы в каждом массиве (например, array1[i][,] == array2[j][,])?

Я думаю, что есть лучшие способы выполнения этих операций, но мне удалось сделать их довольно быстро.

+0

Как вы определяете "равенство" для 2-D массивов? Для массивов просто нужно одно и то же содержимое в любом порядке или они должны быть одинаковыми по ячейкам? –

+0

Клеточная ячейка, как и в тройном, например, я дал –

ответ

0

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

Compare Bitmaps

0

Поскольку Array поддерживает интерфейс IStructuralEquatable, вы можете использовать структурные сравнения:

using System.Collections; 

. . . 

var areEqual = StructuralComparisons.StructuralEqualityComparer.Equals(array1[i], array2[j]);