2010-03-30 3 views
2

저는 AS3에서 상당히 간단한 이미지 비교 방법을 찾고 있습니다. 나는 웹 캠 (피사체가없는)에서 이미지를 비트 맵 데이터로 전달한 다음 두 번째 이미지 (이 경우 피사체와 함께)를 가져와이 데이터를 비교합니다.이 두 이미지에서 마스크를 만들고 싶습니다. 두 비트 맵에서 일치하는 픽셀로부터 나는 잠시 머리를 긁적이고 있었고, 나는 진전을 이루지 못하고있다. 어느 하나가 사용 compare픽셀 AS3 픽셀의 비트 맵 데이터 비교

답변

4

화소 비교법, getPixel32 같은()

건배

Jono 대해 오른쪽 방향으로 날 지점 수하는 부분을 추출 treshold를 사용해서 둘 사이의 차이를 만드는 관심있어.

편집 : 실제로는 매우 간단합니다. 트릭은 마스크 매개 변수를 사용하여 채널당 여러 번 임계 값을 적용하는 것입니다. 그렇지 않으면 0x010000 (거의 검은 색)이 0x0000FF (검은 색 이외의 것)보다 큰 것으로 간주되므로 비교가 거의 이해가되지 않습니다. 방법은 다음과 같습니다.

var dif:BitmapData;//your original bitmapdata 
var mask:BitmapData = new BitmapData(dif.width, dif.height, true, 0); 
const threshold:uint = 0x20; 
for (var i:int = 0; i < 3; i++) 
    mask.threshold(dif, dif.rect, new Point(), ">", threshold << (i * 8), 0xFF000000, 0xFF << (i * 8)); 

투명 마스크가 생성됩니다. 채널 값이 임계 값을 초과하는 경우 알파 채널을 완전히 불투명하게 설정하여 임계 값이 모든 세 채널에 적용됩니다 (감소시킬 수도 있음).

마스크에서 현재 비디오 이미지까지 전경 개체 ("웹캠 앞에있는 사람")를 copying the alpha channel으로 분리 할 수 ​​있습니다.

+0

compare() 메서드를 사용하면 몇 가지 매우 이상한 결과 (여러 색상이 많이 있음)가 반환됩니다. 그런 다음 임계 값은 비트 맵의 ​​일부를 제거하지만 상당히 엉뚱한 것으로 보입니다 ... 당신은 전설이 될 수 있으며 임계 값에 대해 약간 정교 할 수 있습니까? – Jono

+0

@Jono : 나는하고 싶지만, 네가하고 싶은 것을 충분히 이해하지 못한다. "마스크 만들기"란 무엇을 의미합니까? 당신이 뭘하는지 당신이 더 잘 설명할수록, 당신은 만족스러운 대답을 얻게 될 것입니다;) – back2dos

+0

죄송합니다. 나는 조금 애매 할 수 있습니다. :) 그래서 당신은 (웹캠과) 컴퓨터의 infront있어 웹캠 POV (스냅 샷을 찍을) 밖으로 이동 비트 맵 데이터로 다음 비트 맵으로 저장하십시오. 그런 다음 비트 맵 데이터로 저장 한 다음 비트 맵으로 저장하여 웹캠의 POV (다른 테이크)로 돌아가십시오. 비교/임계 값을 사용하여 비트 맵 데이터 간의 차이점을 해결하십시오. 이렇게하면 라이브 웹캠 피드를 숨길 수있는 마스크가 만들어지기 때문에 처리 수준을 낮추기 위해 모든 프레임을 업데이트합니다. 그래서 효과적으로 라이브 배경 교체 도구가 도움이됩니다. 내 코드 또는 세부 정보를보고 싶다면 알려주세요. – Jono

0

여기에서 문제 중 하나는 픽셀에 아무런 변화가 있는지 찾아 내고 싶은 경우 해당 픽셀을 다른 색상 (마스킹 용)으로 변환하는 것입니다. 아쉽게도 웹캠의 품질은 좋지 않으므로 장면이 전혀 변경되지 않아도 웹캠에서 오는 비트 맵 데이터가 약간 변경됩니다. 그러므로 피사체가 프레임으로 들어가면 피사체의 픽셀 변경이 생기고 조명 변화 또는 카메라 화질로 인해 다른 영역의 노이즈가 생깁니다. 당신이해야 할 일은 ___보다 큰 영역에서의 변경을 위해 bitmapdaya.compare()의 결과를 분석하여 거기에있는 실제 객체를 보증하기에 충분한 변화가 있는지 판단하는 함수를 작성하는 것입니다. 그러면 소음을 제거하고 마스크를보다 정확하게 만들 수 있습니다.

관련 문제