2009-03-02 4 views
4

장난감 프로젝트로서 웹캠에서 사진을 찍은 다음 변경 사항을 감지하는 응용 프로그램을 작성하려고합니다. 누군가가 웹캠 앞에서 걸 으면 탐지하고 싶습니다.두 개의 연속 된 그림에서 변경 감지

두 번의 연속 촬영에서 중요한 변화를 감지 할 수있는 방법에 대해 알려주십시오.

답변

1

Code Project에 가능한 해결책을 설명하는 멋진 기사입니다.

11

한 이미지에서 다른 이미지로 픽셀 당 명도 값을 뺍니다.

이렇게하면 무언가가 움직이는 곳에서는 픽셀 당 높은 값을 얻을 수 있고, 같은 것이있는 곳에서는 낮은 값을 얻을 수 있습니다. 이 값을 합계하고 주요 변경 사항이 발생했는지 확인하기 위해 특정 임계 값 이상인지 확인하십시오.

나는이 보여 내 노트북에서 내 손의 사진을 찍은 :

alt text

+1

자연광에서이 방법은 태양이 하늘을 통과하면서 빛의 양을 변화시키고 그림자를 이동함에 따라 오 탐지 (false positives)를 생성합니다. –

+0

@ Paul, 나는 태양이 갑자기 움직이지 않고 중요한 광 레벨 변화가 추적되어야하기 때문에별로 문제가되지 않을 것이라고 생각한다. – idursun

+0

태양이 갑자기 움직이면 더 중요한 일을 할 것입니다. O_O –

2

내가 30K 60K 픽셀 같은 것으로 이미지를 축소하는 것으로 시작한다. 이렇게하면 계산 속도가 빨라질뿐만 아니라 관련성이없는 작은 변경 사항도 제거됩니다. 예를 들어, 바람에 의해 움직이는 열린 창 근처에서 커튼을 감지하고 싶지는 않습니다.

다음으로 픽셀 값의 제곱 차이를 합산합니다. 이것은 단지 의사 코드와 코드가 아니라 천천히 처리하는 것처럼 당신이 원하는 경우, "주사선"에 대한 구글 (

Delta := 0; 
for y := 0 to Im1.Height do begin 
    for x := 0 to Im1.Width do begin 
    DeltaR := (Im1[x,y].Red - Im2[x,y].Red)^2; 
    DeltaG := (Im1[x,y].Green - Im2[x,y].Green)^2; 
    DeltaB := (Im1[x,y].Blue - Im2[x,y].Blue)^2; 
    Delta := Delta + DeltaR + DeltaG + DeltaB; 
    end; 
end; 

if (Delta > Treshold) then 
    Say('Hi Bob!'); 

: 당신이 그것을 철저하게하고 싶은 경우에, 당신은 별도로 R, G 및 B를 위해 그것을 할 수 있습니다

한계점을 경험적으로 정의 할 수 있습니다. 카메라로 천천히 걷고, 배경색과 일치하는 옷을 착용하고 델타를 확인하십시오.
프레임을 건너 뛰면 민감도가 높아집니다.