안녕하세요. 김대욱입니다. 새롭게 선보인 VisualStudio 2010과 WPF 4.0에 대한 내용을 다룬 WebCast가 새로 등록되었습니다 ^^
위 그림을 클릭하시거나, 아래 주소를 통해 확인하실 수 있습니다.
세션보러가기 : http://www.techdays.co.kr/visualstudio2010/
WPF 4.0에서 새로 추가된 기능들에 대해 소개하고, WPF4.0을 이용한 Windows7용 Application개발과 관련된 데모가 포함되어있습니다 ^^ 많은관심 부탁드려요!
이번시간에는 멤버십(삼성소프트웨어멤버십, 저는 수원멤버십소속입니다.)에서 창의과제로 진행중인 FTIR방식의 Virtual Surface System에서 사용하고있는 Point Calibration방법에 대해서 소개하려고합니다. Point Calibration은 Multi Touch뿐만아니라 일반적인 Touh Screen에서 발생할수 있는 좌표 오류를 해결하기 위해서 꼭 필요한 기능이라 할 수 있습니다.
대부분의 Touch Screen은 LCD 부분과 Touch를 감지하는 Touch Panel부분으로 나누어 져 있기 때문에, 물리적 또는 시스템적(해상도 등)의 영향으로 좌표가 정확하게 매칭되지 않습니다. 이와 같은 상황에서 발생하는 물리적 오류는 아래 그림과 LCD 와 Touch Panel간의 움직임으로 인한 Moving Error와 회전에 의한 Rotation Error가 발생 할 수 있습니다.
[ Mechanical misalignments (Calibration in touch-screen Systems : Wendy Fang,Tony Chang) ]
Moving Error와 Rotation Error는 위 그림에서 그려져 있듯이 간단한 수식만으로 해결이 가능하지만, 문제는 여기서 끝나는게 아닙니다. Touch Panel은 LCD와 별개로 동작하기 때문에 특정 해상도에 구애받지않고 Touch Panel자체의 상대적 좌표를 제공합니다. 이또한 간단한 비례식을 사용하여 해결 할 수 있습니다.
그렇다면 문제는 무엇일까요, 우리가 사용하는 FTIR방식에 집중해야합니다. FTIR방식은 별도의 Touch Panel부를 두지 않고 카메라로 부터 입력받는 영상을 처리하여 Touch를 감지하기 때문에 아래와 같은 영상을 얻게됩니다.
카메라와 스크린까지의 거리가 있기 때문에 카메라로 부터 입력되는 영역이 정확하게 스크린에 매칭되지 않을 뿐만아니라 카메라 렌즈에 의한 외곡현상까지 발생하게 됩니다. 이러한 외곡현상은 단순히 Moving Error와 Rotation Error로는 해결할 수 없기 때문에 별도의 Calibration Algorithm이 필요합니다.
방법이야 여러가지가 있겠지만 이번 포스팅에서는 Distance Weight를 기반으로한 Calibration Alogiritm에 대해 소개하도록 하겠습니다. Distance Weight Calibration Algorithm은 구현이 쉬우면서도 결과도 어느정도 신뢰 할 수 있기때문에 FTIR방식의 Open Source Touch Screen Engine에서도 자주 사용하는 방법이기도합니다.
다음시간에는 Distance Weight Calibration Algorithm의 실제 구현 방법과 활용에 대해 소개하도록 하겠습니다.
궁금하신 점이나 문의는 메일또는 리플로 남겨주세요.
얼마전에 올렸던 ART Project Design Prototype이다... 흰색 시안이 처음 만들었던 시안이고, 검정색은 악덕 PL의 초특급 갈굼(병들어 보인다 햇던가...)때문에 바꾼 시안이다. 나는 나 나름대로 흰색에 만족하고 있었는데, 바꾸고 보니까 검정색이 괜찮은거 같기도 하다.
지금 삼성소프트웨어멤버십에서 진행중인 ART프로젝트 디자인 시안이다. 지금까지 보통 프로젝트 시작하면 엔진부분을 담당햇는데 이번 프로젝트에서는 UI부분을 대부분 담당하게된다. Photoshop CS3를 사용하여 작업하였으며, 조만간 팀원들이 OK한다면 WPF로 작업 시작할 예정이다.
프로젝트에 대해 간단히 소개하자면, 많은사람들이 X-Ray는 알고있을것이다. 뭐 물론 CT또한 이름은 모두 들어봤을테고.. 3D Max도 알고잇을테다.
간단히 설명하면 위에서 언급한것들을 Mix 하는것과 같다.
X-Ray를 통해 촬영한 여러장의 투영영상을 조합하여 CT영상을 만들고 CT영상 여러장을 조합하여, 3차원 영상으로 변환하고, 이를 활용하는 Application이다.
프로젝트에 대한 진행상황이나 프로젝트를 진행하면서 얻어낸 Tip 등은 블로그를 통해 올릴 생각이다.
ImagineCUP2008을 준비하며선 StereoVision 기술이 사용되기때문에 제작해본 StereoVision Sample이미지 기존의 StereoVision 라이브러리나 영상처리 알고리즘을 사용하지 않고 머리속에서 떠오르는데로 구현해본거라 속도면이나 정화도 면에서 많이 보정해야할것들이 많다.
먼저 3*3 블럭 단위로 영역의 Energy 를 측정하고 수평상에 위치한 동일한 에너지를 갖는 영역을 찾는다. 속도는 한개의 스레드를 사용해서 640 * 480영상에서 8초정도 나왔는데, 모든픽셀에 을 3*3에 대한 계산을 할뿐더러 이것저것 다 계산을 해야함으로 속도는 GG 너무느리다.
두번째
아직 테스트는 안해봣지만 속도가 이전것과 달리 매우빠르다. 하나의 x좌표를 수평으로 스캔하여 얻어지는 histogram을 이용하여 매칭에 사용한다. 위 그림에서 빨간색 영역이 Left Image고, 회색 부분이 Right이미지다. 그리고 파란색 부분은 빨간색 부분과 회색 부분을 처리하여 얻어 보정한 결과로 만족할 만한 수준의 결과를 보여줫다. 속도또한 만족스러운데 한번의 스캔시간이 2밀리 세컨드 정도이다. 멀티스레드로 연산을 한다고 할때 계산해보면 2밀리세컨드 * 512 = 1초 라는 계산이 나오는데. 멀티스레드를 사용하면 대략 초당 2~3프레임정도는 충분히 나올 수 있는 속도다.
여기다 컬러 영상을 사용하지 않고 Gray영상을 사용한다면 속도는 3배더 빨라질것으로 예상된다.
바로 위에서 말한 히스토그램을 사용한 스테레오 매칭 방법을 사용하여 구현해보았다. 처음 영역단위로 구현했을때보다 개선이 된것을 볼수 있다. 속도 또한 예상했었던 1초 보다 더빠른 500ms의 속도가 나왔다. 후보정 작업을 거쳐 좀더 수정해 보아야겟당~
앞서 말햇듯이 기존의 알고리즘이나 라이브러리 등을 사용하지 않고 생각나는대로 해보고 있는거라 정확도나 속도면에서 얼마나 좋고 얼마나 안좋은지는 감이 잘 오질 않지만, 지금 되고 있는 수준이라면 우리 프로젝트에 적용을 시켜도 무방할것 같다는 생각을 해본다.
여자친구의 도움으로 구현해본것 음 똑똑한녀석... 근데 속도가 넘느리다. 잡음은 상당히 개선되엇지만 대략 3~4초정도가 걸린다. 스레드를 여러개 사용하게 되더라도 대략 초당 1frame 정도.. 코드 최적화 작업이랑 이래저래 좀더하면 쓸모가 있을 수도잇겟다.
더 괴롭혀서 더 좋은식을 알아내야지... ㅋㅋㅋ
코드를 최적화 하고 영상을 후보정했다.
집에서 사용하는 모니터가 LCD라서 위에 그림들의 밝기가 구별이 됬었는데.. 멤버십에 CRT로 보니까 전혀 구별이 안된다.. -_-ㅋㅋ 그래서 좀더 알아보기 쉽게 색에 강조를 넣엇다.
속도가 800ms 로 많이 개선되었다. 아직 이래도 보정할게 많이 남아 있으므로.. 더 파봐야겟다.. 이번엔 멀티스레드를 적용하여 실제 속도가 어느정도 나오는지를 알아보겟음
추가로 개발에는 Visual Studio 2008을 사용했고, .Net Framework 3.5에서 개발되었다. 사용 OS는 Windows Vista Enterprise..