0

我的任务是将一些随机放置的视频帧重新排序为正确的顺序。我已经设法通过使用每个帧作为参考来做到这一点,并在该参考帧的结构方面找到两个最接近的帧..大概这两个最接近的帧将是该帧后面和之后的帧视频。在为每个视频帧找到两个最接近的帧之后,我会计算一个可能的路径。

然而,我的问题是在表现方面,尤其是在得分方面。不幸的是,它的效率非常低,仅计算 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%,但是问题是我需要创建一个可执行文件,我不确定我是否会实现相同的效果表现..

4

1 回答 1

0

没关系,这里我将遍历所有图像对,两次(切换参数),这不是必需的。因此可以将速度降低 n-1/2。

如果您想要效率而不是准确性(在我的情况下是这样),从直方图的相关性中找到分数是一种可能的方法。

我用 ssim() 处理 72 帧花了 55 秒,而直方图的差异只用了 1.2 秒。

于 2014-11-23T13:00:07.910 回答