Нахождение евклидова расстояния между двумя матрицами в MATLAB

Я делаю систему поиска изображений на основе контента для университетской базы данных. Я использую цветные функции для соответствия сходства между изображениями. Разрешение моих изображений составляет 648 * 424 пикселей. В основном то, что я делаю, это:

  1. Получение цветной гистограммы из 8 * 8 пикселей блоков изображения и объединение их в одну матрицу. Для этой цели я использую функцию MATLAB blockproc и код показан ниже:

    % Reading two images from Database
    A = imread('bonfire/1.jpg');
    B = imread('bonfire/2.jpg');
    
    % Using blockproc to get feature vector for both images
    C = blockproc(A ,[8, 8], @localHistogram);
    D = blockproc(B, [8, 8], @localHistogram);
    

    При этом функция localHistogram имеет вид:

    function y = localHistogram(block_struct)
    
        % Separating Red, Green and Blue planes
        redPlane    = block_struct.data(:, :, 1);
        greenPlane  = block_struct.data(:, :, 2);
        bluePlane   = block_struct.data(:, :, 3);
    
        % Obtaining histogram for all 3 planes with number of bins = 50
        [pixelCountR, grayLevelsR] = imhist(redPlane, 50);
        [pixelCountG, grayLevelsG] = imhist(greenPlane, 50);
        [pixelCountB, grayLevelsB] = imhist(bluePlane, 50);
    
        % Concatenating three histograms of respective planes
        y = cat(2,pixelCountB, pixelCountG, pixelCountR);
    
    end
    
  2. Теперь я хочу найти сходство между этими двумя изображениями, сравнив там векторы признаков C и D, используя евклидово расстояние. Размеры C и D составляют 2650 * 243.

Каков будет лучший способ сделать это с максимальной эффективностью?

0 ответов

Другие вопросы по тегам