Эффективный способ использования функции ssim() в Matlab для сравнения структур изображений (или любой другой альтернативы)

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

Моя проблема, однако, когда дело доходит до производительности, особенно при подсчете очков. К сожалению, это очень неэффективно, и время работы только для 72 кадров (320x240) составляет около 80 секунд только при подсчете очков. Я не слишком хорошо знаком с Matlab (или любым подобным языком), но сейчас я делаю это для подсчета очков:

for i =1: n_images,
current_image = Images{1,i};

%obtain score pairs image similarity
for j = 1:n_images,
    if i ~= j,
        scores(1,j) = ssim(Images{1,j}, current_image);                
    end
end      
[svalues, index] = sort(scores,'descend');
Closest(1,i) = index(1,1);
Closest(2,i) = index(1,2);
%Closest consists of a 2 x n_images matrix, where for each frame index, there are two 
%column values, which are the indexes of the closest frames. 
end

Может ли кто-нибудь дать мне несколько советов по оптимизации или предложить лучший способ подсчета очков?

Изменить: изображения нормализуются и преобразуются в оттенки серого.

Изменить № 2: я пытался использовать потоки, добавляя parfor в цикл подсчета очков, что повысило производительность примерно на 50%, однако проблема в том, что мне нужно создать исполняемый файл, и я не уверен, что достигну того же представление..


person patbuh    schedule 23.11.2014    source источник


Ответы (1)


Неважно, здесь я просматриваю все пары изображений дважды (параметры переключаются), что не нужно. Так что можно уменьшить скорость на n-1/2.

Если вам нужна эффективность, а не точность (что в моем случае так и есть), одним из возможных способов является нахождение оценки по корреляции гистограмм.

Мне потребовалось 55 секунд, чтобы обработать 72 кадра с помощью ssim(), а всего 1,2 секунды с разницей гистограмм.

person patbuh    schedule 23.11.2014