Matlab 从流线中提取特征点并对其进行聚类?
我正在尝试使用matlab制作一个可靠的乘客计数系统,摄像头将固定在门上方。我可以用Lucas Kanade光流得到流线,这些线代表人的运动。我想:Matlab 从流线中提取特征点并对其进行聚类?,matlab,tracking,matlab-cvst,opticalflow,vision,Matlab,Tracking,Matlab Cvst,Opticalflow,Vision,我正在尝试使用matlab制作一个可靠的乘客计数系统,摄像头将固定在门上方。我可以用Lucas Kanade光流得到流线,这些线代表人的运动。我想: 如果直线足够长,则仅从这些直线中提取端点(直线矩阵包含所有点,甚至是地板上某个随机部分上不会发生变化的点) 将这些“优点”进行聚类,得到代表人的聚类者的质心 在这些簇中心上创建固定大小的边界框,并将其发送到多对象KLT跟踪程序 有谁能告诉我一个从直线矩阵中提取点的好方法吗?我的matlab语法太糟糕了,我已经没有时间完成了,这是一个uni项目。提前
%example
videoReader = vision.VideoFileReader('5Converted.avi','ImageColorSpace','Intensity','VideoOutputDataType','uint8');
converter = vision.ImageDataTypeConverter;
opticalFlow = vision.OpticalFlow('ReferenceFrameDelay', 1);
opticalFlow.OutputValue = 'Horizontal and vertical components in complex form';
shapeInserter = vision.ShapeInserter('Shape','Lines','BorderColor','Custom', 'CustomBorderColor', 255);
videoPlayer = vision.VideoPlayer('Name','Motion Vector');
while ~isDone(videoReader)
frame = step(videoReader);
im = step(converter, frame);
of = step(opticalFlow, im);
[lines, trackedPoints] = getFlowLines(of, 20);
if ~isempty(lines)
out = step(shapeInserter, im, lines);
end
end
release(videoPlayer);
release(videoReader);
这是GetFLowLines函数(示例的稍微修改版本):
这不是我的专长,所以无论如何我都不会回答你的问题。。。但是,如果你想增加有人尝试的机会,你最好包括一个完整的可运行示例(例如,提供一个指向电影数据的链接)。我建议你阅读如何创建一个红外传感器,然后相应地修改你的问题。如果你想计算穿过门的人数,为什么你不使用红外传感器或比照相机更可靠的东西?使用红外传感器对多人来说也是一个问题,我不知道只是我没有更多的时间,我一直在使用过去6个月的计算机视觉,所以现在不想完全重新设计我的方法。
> function [vel_Lines, allTrackedPoints] = getFlowLines(vel_Values,
> scaleFactor) %Modified function based on Matlab's
> 'videooptflowlines.m' helper function
>
> persistent first_time; persistent X; persistent Y; persistent RV;
> persistent CV; if isempty(first_time)
> first_time = 1;
> %% user may change the following three parameters
> borderOffset = 5;
> decimFactorRow = 5;
> decimFactorCol = 5;
> %%
> [R C] = size(vel_Values);
> RV = borderOffset:decimFactorRow:(R-borderOffset);
> CV = borderOffset:decimFactorCol:(C-borderOffset);
> [Y X] = meshgrid(CV,RV); end
>
> tmp = vel_Values(RV,CV); tmp = tmp.*scaleFactor; vel_Lines = [Y(:)
> X(:) Y(:)+real(tmp(:)) X(:)+imag(tmp(:))]; allTrackedPoints =
> [Y(:)+real(tmp(:)) X(:)+imag(tmp(:))];