1.算法运行效果图预览
(完整程序运行后无水印)
2.算法运行软件版本
matlab2022a
3.部分核心程序
(完整版代码包含详细中文注释和操作步骤视频)
axes(handles.axes1);
imshow(uint8(I0{kk}));
axes(handles.axes2);
quiver(x,y,hor,ver, 'b');
axis([0,R/blkSize,0,R/blkSize]);
set(gca,'ydir','reverse');
axes(handles.axes3);
if kk>=2
plot([0:kk-2],[dist(2:end)],'-r>',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.9,0.0]);
end
xlim([0,length(files)-1]);
xlabel('time (s)');
ylabel('晃动指数');
x_{kk} = x;
y_{kk} = y;
pause(0.001);
end
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
parameter;
global dist;%
times = [1:length(files)-2]';
data1 = [dist'];
%构建数据组
data = [times,data1];
[m, n] = size(data);
data_cell = mat2cell(data, ones(m,1), ones(n,1));
title = {'Frame','Sloshing Index'};
result = [title;data_cell];
NAME = NAME+1;
%保存到excel中
s = xlswrite(['Save',num2str(NAME),'.xls'], result);
msgbox('Save Success');
% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
clc;
clear;
close all;
009_055m
4.算法理论概述
4.1 光流的概念
光流是指在连续图像序列中像素的视差运动。假设场景中的物体是刚体且光照不变,那么相邻两帧之间对应点的灰度值相同。这种假设称为光流约束。
对于单个像素点,上述方程是欠定的。因此,Lucas 和 Kanade 提出了最小化误差的方法来估计光流矢量,即最小化所有像素点的误差平方和。
4.2 基于LK光流算法的图像序列晃动程度计算
对于图像序列中的每一对相邻帧,使用LK算法计算光流场。 #### 2.2 定义晃动程度指标 为了量化图像序列的晃动程度,我们需要定义一个合适的指标。一种常见的做法是计算光流矢量的均方根(RMS)作为晃动程度的度量。 将晃动程度随时间的变化情况可视化展示。
基于Lucas-Kanade光流算法的图像序列晃动程度计算是一种有效的方法,可用于多种应用场景。通过计算图像序列中像素点的光流矢量,并定义合理的晃动程度指标,可以有效地量化图像序列的晃动程度。此外,通过算法优化可以进一步提高计算效率和准确性。