如何减少我在MATLAB中的图像匹配代码中的运行时间?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何减少我在MATLAB中的图像匹配代码中的运行时间?相关的知识,希望对你有一定的参考价值。

我正在尝试使用简单的图像匹配算法在MATLAB中稳定视频文件。基本上,我正在获取视频第一帧的窗口,然后将其与第n帧相减。我想结束一个从第n帧的位置到第一个帧的x和y位移向量的数组。视频为1501x971灰度格式,具有391帧。

下面是我的代码。我让代码运行了15分钟以上,但仍在运行。我一直在寻找答案并实现了int8和预分配矩阵解决方案,这些解决方案我见过人们建议,但它运行的时间仍然太长。任何帮助,将不胜感激。

% Define image region (window)
xmin = 35;
xmax = 1465;
ymin = 35;
ymax = 940;

% Matching algorithm
error = uint16(10^8); % set error to a larger number than expecting in the loop
deltax = 0;
deltay = 0;
deltaxArray = zeros(1,N,'int8');    % prealloacting arrays
deltayArray = zeros(1,N,'int8');    % using int8 to optimize code
deltaxArray(1) = 0;
deltayArray(1) = 0;

for n = 2:N % N = number of frames
    for deltay = -34:31         % Iterating over all possible displacements
        for deltax = -34:36
            current_error = uint16(sum(abs(f(1, ymin+deltay:ymax+deltay , xmin+deltax:xmax+deltax ) - f(n, ymin:ymax, xmin:xmax)),'all'));        % f is the video array
            if current_error < error        % searching for the smallest error in the nth frame
                error = current_error;      % set error if current error is smaller
                deltaxArray(n) = deltax;    % save x displacement coordinate
                deltayArray(n) = deltay;    % save y displacement coordinate
            end
        end
    end
    error = uint16(10^8);   % reset error for next iteration
end
答案

使用分析器。

profile on;
your_script_name;
profile viewer;

这会告诉您代码的哪几行占用了大部分运行时间。

输出看起来像这样https://www.mathworks.com/help/matlab/matlab_prog/profiling-for-improving-performance.html

以上是关于如何减少我在MATLAB中的图像匹配代码中的运行时间?的主要内容,如果未能解决你的问题,请参考以下文章

matlab中的GUI,轴中的图像循环

为啥matlab中的ncread函数会减少浮点数? [复制]

基于SIFT特征提取的图像拼接算法matlab仿真

Matlab 中的类和 switch 语句

如何将集群标签与 Matlab 中的“基本事实”标签匹配

Matlab中如何只把figure中的图像区域保存为图片文件