UPDATE : 지금 데이터를 저장하는 원형 버퍼를 필요로 이해하기 때문에
, 여기 당신이 사용할 수있는 솔루션입니다. 이미지의 객체 중심 데이터를 이미지에 저장한다고 했으므로 임의의 수의 측정 값 (각 중심에 대해 1 픽셀 인덱스 값 또는 x 및 y 좌표에 대해 2 값)을 저장하는 일반적인 경우를 제공합니다. ...
첫째, 버퍼 초기화 :
nBuffer = 10; % You can set this to whatever number of time points
% you want to store data for
nSamples = 2; % You can set this to the number of data values you
% need for each point in time
centroidBuffer = zeros(nSamples,nBuffer); % Initialize the buffer to zeroes
다음, 당신은 당신의 연속 루프를해야합니다. (루프를 중지하고 당신은 FALSE에 설정할 수있는) 당신은 초기 값 TRUE이있는 while loop 및 플래그 변수를 사용할 수 있습니다 : 이것은 다음과 같은 방식으로 작동
keepLooping = true;
while keepLooping,
% Capture your image
% Compute the centroid data and place it in the vector "centroidData"
centroidBuffer = [centroidBuffer(:,2:end) centroidData(:)];
% Do whatever processing you want to do on centroidBuffer
% Choose to set keepLooping to false, if you want
end
를 각 시점에서, 첫 번째 centroidBuffer의 열 (예 : 가장 오래된 데이터)이 제거되고 새 열 (예 : 새 데이터)이 끝에 추가됩니다. 이런 식으로, 버퍼 행렬은 항상 같은 크기입니다.
각 시간 단계에서 처리를 수행하지 않으려는 경우가 아니라 매번 nBuffer 시간 간격마다 처리를 수행하여 매번 새로운 데이터 집합에서 작업하는 경우 위 코드를 다음
이
keepLooping = true;
processTime = 0;
while keepLooping,
% Capture your image
% Compute the centroid data and place it in the vector "centroidData"
centroidBuffer = [centroidBuffer(:,2:end) centroidData(:)];
processTime = processTime+1;
if (processTime == nBuffer),
% Do whatever processing you want to do on centroidBuffer
processTime = 0;
end
% Choose to set keepLooping to false, if you want
end
편집 :
위의 코드를 만들 수 있습니다 변화에는 여러 가지가 있습니다. 예를 들어 두 개의 데이터 세트를 각각 10 개의 시간 지점으로 저장하려면 nBuffer을 20으로 변경하여 처음 10 개 열에 이전 세트를 저장하고 마지막 10 개 열에 새 세트를 저장합니다. 그런 다음에 if 문 변경 :
...
if (processTime == nBuffer/2),
...
을 그리고 지금은 (centroidBuffer (에 : 1:10)) 10 데이터 포인트의 이전 설정을 모두 사용하여 처리를 수행 할 수있는 10의 새로운 세트 데이터 포인트 (centroidBuffer (:, 11:20)).
나는 당신이 나에게 준 추가 정보로 질문을 명확히하려고 노력했다. 업데이트가 마음에 들지 않으면 자유롭게 업데이트를 취소하십시오. 방금 이것이 더 명확해질 수 있다고 생각했습니다. =) – gnovice