<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NTREXGO - 디바이스마트, 엔티렉스 컨텐츠 통합 사이트 &#187; 자료</title>
	<atom:link href="http://www.ntrexgo.com/archives/tag/%ec%9e%90%eb%a3%8c/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ntrexgo.com</link>
	<description>엔티렉스, 디바이스마트 컨텐츠 통합 사이트</description>
	<lastBuildDate>Thu, 03 Mar 2022 06:47:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>[7호]CANTUS 개발 및 실습 무료 세미나 기술자료</title>
		<link>http://www.ntrexgo.com/archives/8616</link>
		<comments>http://www.ntrexgo.com/archives/8616#comments</comments>
		<pubDate>Wed, 25 May 2011 08:40:14 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[7호]]></category>
		<category><![CDATA[CANTUS]]></category>
		<category><![CDATA[기술]]></category>
		<category><![CDATA[세미나]]></category>
		<category><![CDATA[스페셜]]></category>
		<category><![CDATA[에이디칩스]]></category>
		<category><![CDATA[자료]]></category>
		<category><![CDATA[컬럼]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=8616</guid>
		<description><![CDATA[디바이스마트 매거진 7호 &#124; CANTUS는 고성능 32bit MCU로써 8bit MCU에 비해 최대 96MIPS의 빠른 속도와 고성능의 다양한 기능을 내장하면서 저렴한 가격으로 출시되어 개발자들에게는 8bit MCU의 한계를 넘어 다양하고 고성능화 되고 있는 시스템의 구현을 가능하게 하였다. ]]></description>
				<content:encoded><![CDATA[<h2><a href="http://www.ntrexgo.com/wp-content/uploads/2011/05/07SCADC020.jpg" rel="lightbox[8616]"><img class=" wp-image-8845 alignleft" alt="07SCADC020" src="http://www.ntrexgo.com/wp-content/uploads/2011/05/07SCADC020-300x225.jpg" width="240" height="180" /></a><strong><span style="color: #333399">CANTUS 개발 및 실습 </span></strong></h2>
<h2><span style="color: #333399"><strong>무료 세미나 기술자료</strong></span></h2>
<p>&nbsp;</p>
<p style="text-align: right">자료제공 | (주)에이디칩스 기술 연구소</p>
<p>■ 2011년 4월 30일에 진행된 무료 세미나의 기술자료를 참석하지 못한 디바이스마트 매거진 구독자들을 위해 간단히 소개하고자 합니다.</p>
<p>&nbsp;</p>
<p><span style="font-size: medium;color: #ff6600"><strong>1부 High Performance &amp; Low Cost 32bit Microcontroller &#8211; CANTUS</strong></span></p>
<p><span style="color: #ff9900"><strong>1. 소개</strong></span><br />
(주)에이디칩스에서 개발한 CANTUS는 시스템의 다양화와 고성능화에 맞춰 8bit를 대체할 저가의 고성능 32bit 마이크로컨트롤러이다.<br />
CANTUS는 고성능 32bit MCU로써 8bit MCU에 비해 최대 96MIPS의 빠른 속도와 고성능의 다양한 기능을 내장하면서 저렴한 가격으로 출시되어 개발자들에게는 8bit MCU의 한계를 넘어 다양하고 고성능화 되고 있는 시스템의 구현을 가능하게 하였다. 특징으로는 8채널의 넉넉한 UART와 Full-Speed USB2.0, SPI, TWI등의 다양한 통신 수단을 제공하므로 다른 주변 기기와의 통신에 강점을 지닌 동시에 음성이나 사운드(ADPCM 녹음/재생, MP3 재생) 지원이 가능한 제품이다.</p>
<p>또한, 내장 메모리를 128KBytes, 512KBytes 선택적으로 사용할 수 있어 사용자가 원하는 사양에 따라 시스템을 구성할 수 있으며 SRAM은 80Kbytes를 내장하여 큰 용량의 어플리케이션을 전혀 문제없이 동작시킬 수 있다. 또한 대용량의 메모리가 필요한 경우 외부에 노어플래시나 낸드플래시, SD카드등의 다양한 메모리를 지원하여 다양한 응용이 가능하다.</p>
<p>LCD가 필요로 하는 시스템에서는 2인치대(128&#215;160해상도)의 TFT-LCD에 하나의 이미지파일을 디스플레이하는 시간에 30ms 이하의 속도를 낼 수 있어 Character LCD 또는 7-sement를 사용하던 시스템도 소형 TFT-LCD 적용이 가능하여 고급화, 차별화가 가능하다.(최대 220&#215;176) 이 외에 CANTUS에는 8채널 32bit Timer / PWM / Capture가 내장되어 모터 구동, 배터리 체크, 적외선 리모콘 신호 입력 등의 용도로 사용할 수 있고 14bit Voice Codec은 음성 또는 사운드를 내보낼 수 있는 1채널 DAC와 센서 또는 아날로그 신호들의 입력을 위한 4채널 ADC로 구성되어 있으며 1채널 DMA는 빠른 메모리 액세스로 인해 데이터를 효율적으로 출력할 수 있다.</p>
<p>이러한 CANTUS는 하이패스단말기, GPS단말기, MP3 어학학습기, LED 컨트롤러, 경보시스템, 완구 로봇, 출입통제시스템, 디지털 가전, 로봇 청소기, 의료기기, 속도감지기, 산업용 컨트롤러 등 다양한 응용 제품에 적용할 수 있다.<br />
이미 다양한 시스템에 적용되어 필드에서 검증되어 사용되어 지고 있으며 ㈜에이디칩스에서는 제품의 성능 뿐만 아니라 적극적인 기술지원과 안정적인 제품 공급 또한 강점으로 내세우고 있다.</p>
<p><span style="color: #ff9900"><strong>2. 기능</strong></span><br />
· 32bit General Micro-Controller<br />
- 96MHz, Internal Flash Memory &amp; SRAM<br />
· USB, UART, SDCard, Voice Codec, MP3 decoder(s/w)<br />
· Operating Temp : -40oC to +85oC Industrial<br />
· Power : 3.0V ~ 3.6V<br />
· Package : 100pin TQFP</p>
<p>&nbsp;</p>
<p><span style="color: #ff6600"><strong><span style="font-size: medium">2부 CANTUS 개발 환경 소개</span></strong></span></p>
<p><span style="color: #ff9900"><strong>1. Development Flow Chart</strong></span><br />
CANTUS 개발환경은 다음과 같이 EISC Studio 3, E-CON, Target(EVM, Trip)으로 구성되어 있다. EISC Studio 3에서 Compile한 Binary는 E-CON을 통해 Target에 Download 되며, Target에 Download 된 Binary는 E-CON을 통해 EISC Studio 3에서 Debugging할 수 있다.</p>
<div id="attachment_8766" class="wp-caption alignnone" style="width: 568px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC020.jpg" rel="lightbox[8616]"><img class=" wp-image-8766" alt="07SCADC020" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC020-620x329.jpg" width="558" height="296" /></a><p class="wp-caption-text">그림1. Development Flow Chart</p></div>
<p><span style="color: #ff9900"><strong>2. Download Page</strong></span><br />
EISC Studio 3와 같은 SW 자료 및 회로도와 메뉴얼은 (주)에이디칩스 홈페이지(www.adc.co.kr)의 자료실에서 다운받을 수 있다.</p>
<div id="attachment_8735" class="wp-caption alignnone" style="width: 506px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC001.jpg" rel="lightbox[8616]"><img class=" wp-image-8735 " alt="그림2. Download Page" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC001-620x481.jpg" width="496" height="385" /></a><p class="wp-caption-text">그림2. Download Page</p></div>
<p><span style="color: #ff9900"><strong>3. IDE : EISC Studio 3</strong></span><br />
EISC Studio 3는 통합개발환경(IDE)으로, Compiler, Editor, Debugger의 기능을 갖고 있다. 부가적으로 JTAG인 E-CON을 통해 손쉽게 Target에 Download가 가능하다.<br />
현재 배포되는 Version은 3.2.2이다. Windows XP이상, 7 32bit, 7 64bit까지 사용 할 수 있다.</p>
<div id="attachment_8734" class="wp-caption alignnone" style="width: 506px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC002.jpg" rel="lightbox[8616]"><img class=" wp-image-8734 " alt="그림3. EISC Studio3" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC002-620x425.jpg" width="496" height="340" /></a><p class="wp-caption-text">그림3. EISC Studio3</p></div>
<p><span style="color: #ff9900"><strong>4. E-CON (JTAG I/F)</strong></span><br />
E-CON은 JTAG인터페이스로, Downloader와 Debugger의 기능을 갖고 있다. E-CON은 Console Program EConMan을 사용하여 제어된다. E-CON의 Driver와 Console Program인 EConMan은 EISC Studio 3를 설치 하면 기본 옵션을 통해 EISC Studio가 설치된 경로에 설치 된다.* (* 경로 : C:\Program Files\ADChips\EISC Studio 3\econ)</p>
<div id="attachment_8733" class="wp-caption alignnone" style="width: 407px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC003.jpg" rel="lightbox[8616]"><img class=" wp-image-8733  " alt="그림4. E-CON" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC003-620x485.jpg" width="397" height="310" /></a><p class="wp-caption-text">그림4. E-CON</p></div>
<p><span style="color: #ff9900"><strong>5. EVM</strong></span><br />
CANTUS EVM은 시스템 개발에 있어 검증을 위한 여러 Device로 구성 되어있다. Memory 관련하여 NAND Flash, SRAM, SPI Flash, TWI EEPROM, SD CARD로 구성되어 있으며, I2S Interface를 통해 외부 Audio Board로 재생, 녹음이 가능하다. 또한 Internal Voice Codec을 통한 재생, 녹음을 위한 회로가 구성되어 있다. 그리고 TFT LCD 및 USB, RS-232C와 확장 Pin이 있어 개발을 하려는 시스템에 근접하도록 구성 할 수 있다.</p>
<div id="attachment_8732" class="wp-caption alignnone" style="width: 506px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC004.jpg" rel="lightbox[8616]"><img class=" wp-image-8732 " alt="그림5.  CANTUS EVM" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC004-620x389.jpg" width="496" height="311" /></a><p class="wp-caption-text">그림5. CANTUS EVM</p></div>
<p><span style="color: #ff9900"><strong>6. SDK</strong></span><br />
CANTUS SDK는 CANTUS EVM의 여러 Device를 제어할 수 있는 예제 Project와 CANTUS의 주변장치를 사용할 수 있는 Library로 구성되어 있다. SDK의 예제를 사용하여 EVM의 Device를 원하는 대로 수정하여 개발 시간을 단축할 수 있다.</p>
<div id="attachment_8731" class="wp-caption alignnone" style="width: 506px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC005.jpg" rel="lightbox[8616]"><img class=" wp-image-8731 " alt="그림6. SDK 1.5Tree" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC005-620x337.jpg" width="496" height="270" /></a><p class="wp-caption-text">그림6. SDK 1.5Tree</p></div>
<p>&nbsp;</p>
<p><span style="font-size: medium"><strong><span style="color: #ff6600">3부 개발환경 구축</span></strong></span></p>
<p>CANTUS의 개발환경은 다음과 같이 구축할 수 있다.</p>
<p><span style="color: #ff9900"><strong>1. 관련 자료 다운로드</strong></span><br />
개발환경의 구축에 있어 첫 번째로 관련 자료를 다운 받는다. 관련 자료는 (주)에이디칩스 홈페이지 www.adc.co.kr의 Support → 자료실 → 글 번호 10에서 다운로드할 수 있다. 필수적인 IDE(EISC Studio 3)와 SDK를 다운로드한다.</p>
<div id="attachment_8730" class="wp-caption alignnone" style="width: 506px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC006.jpg" rel="lightbox[8616]"><img class=" wp-image-8730 " alt="그림6. CANTUS Download Page" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC006-620x238.jpg" width="496" height="190" /></a><p class="wp-caption-text">그림6. CANTUS Download Page</p></div>
<p><span style="color: #ff9900"><strong>2. IDE / JTAG 설치</strong></span><br />
다운 받은 EISC Studio 3 설치 파일을 실행하여 EISC Studio 3를 설치 한다.<br />
설치 과정에서 ‘구성 요소 선택’ 과정에서 사용할 Compiler를 선택 한다. CANTUS의 경우 AE32000 Compiler를 사용하며 기본적으로, E-CON Driver와 함께 선택되어 있다.</p>
<div id="attachment_8779" class="wp-caption alignnone" style="width: 488px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC007.jpg" rel="lightbox[8616]"><img class=" wp-image-8779 " alt="그림7. EISC Studio 3 구성 요소 선택" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC007.jpg" width="478" height="298" /></a><p class="wp-caption-text">그림7. EISC Studio 3 구성 요소 선택</p></div>
<p>Windows 7 64bit에서 설치할 경우에는 ‘설치 위치 선택’ 에서 ‘설치 폴더’ 를 ‘C:\Program Files’ 로 지정 하여야 한다.<br />
설치 진행 과정의 마무리쯤 E-CON의 Driver가 설치 된다. Driver 설치는 E-CON이 PC와 연결되지 않은 채 진행한다. EISC Studio 3의 설치가 완료 된 후에 E-CON과 PC를 연결하면 Driver 설치가 마무리 되며, 제어판의 장치 관리자에서 E-CON이 정상 적으로 인식된 것을 확인할 수 있다.</p>
<div id="attachment_8778" class="wp-caption alignnone" style="width: 410px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC008.jpg" rel="lightbox[8616]"><img class=" wp-image-8778 " alt="그림8. 장치 관리자의 E-CON" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC008.jpg" width="400" height="240" /></a><p class="wp-caption-text">그림8. 장치 관리자의 E-CON</p></div>
<p><span style="color: #ff9900"><strong>3. Build &amp; Download</strong></span><br />
CANTUS SDK는 CANTUS Library Project와 Example Project로 구성 되어 있다. Example Project는 Library Project의 Output File인 ‘libCantus.a’를 참조 한다. 따라서 Example Project를 Build하기 위해서는 Library Project가 먼저 Build 되어야 한다. 또한 Library Project의 Code를 변경하면, Library Project가 Build된 후에 Example Project를 Build 하여야 한다.</p>
<p><span style="color: #b653a8"><strong>3. 1. Library Project Build</strong></span><br />
<span style="background-color: #ffff99">1. /Cantuslib/Cantus.epx를 실행하여 EISC Studio 3로 Project를 Open한다.</span><br />
<span style="background-color: #ffff99"> 2. 메뉴에서 Build → Build Project를 눌러 Project를 Build한다.</span><br />
<span style="background-color: #ffff99"> 3. Build가 완료 되면 /lib/libCantus.a가 생성된다.  Library가 Build 되어 /lib/libCantus.a가 생성되면, Example을 Build 할 수 있다.</span></p>
<p><span style="color: #b653a8"><strong>3. 2. Boot Loader를 사용하는 시스템의 경우</strong></span></p>
<p>CANTUS는 Reset 후 Internal NOR Flash 0 Sector의 Program을 실행 한다. E-CON을 사용하면 Flash의 모든 Sector에 Write가 가능 하지만, E-CON이 없다면 BootLoader를 사용함으로써 USB를 통해 1 Sector(CANTUS 512)에 Download 할 수 있다. 단, 0 Sector에 BootLoader를 Download하는 것은 E-CON만 가능하다.<br />
BootLoader는 CANTUS 512의 경우 1 Sector의 Program을 실행하고, 0 Sector를 제외한 나머지 Sector에 USB Download가 가능하다. 추가적으로 USB Mass Storage기능이 있어 Flash Memory나 SD-CARD를 PC에서 이동식 디스크로 사용할 수 있다.** (**BootLoader_tiny는 USB Mass Storage기능이 없음.)</p>
<p><strong><span style="color: #ff0000">3.2.1 Example Project Build : BootLoader</span></strong></p>
<p><span style="background-color: #ffff99">1. /Example/BootLoader/BootLoader.epx를 실행하여 EISC Studio 3로 Project를 Open한다.</span><br />
<span style="background-color: #ffff99">2. Project Explorer에서 Linker Script에 cantus.ld를 Open한다. 16번 행에서 0×00000000으로 지정 된 부분은 Program이 실행되는 Sector의 Start Address로 0 Sector에 Download하여야 실행 되는 Program임을 뜻 한다.</span><br />
<span style="background-color: #ffff99">3. 메뉴에서 Build → Build Project를 눌러 Project를 Build한다.</span><br />
<span style="background-color: #ffff99">4. Build가 완료 되면 /Example/BootLoader/output/BootLoader.elf.bin이 생성된다. </span></p>
<p>/Example/BootLoader/output/BootLoader.elf.bin이 생성 되면, E-CON을 통해 Target에 Download할 수 있다.</p>
<div id="attachment_8777" class="wp-caption alignnone" style="width: 396px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC009.jpg" rel="lightbox[8616]"><img class=" wp-image-8777 " alt="그림9. BootLoader의 cantus.ld" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC009.jpg" width="386" height="350" /></a><p class="wp-caption-text">그림9. BootLoader의 cantus.ld</p></div>
<p><strong><span style="color: #ff0000">3.2.2 Example Project Build : BootLoader</span></strong><br />
EISC Studio 3가 처음 설치 되면 E-CON으로 Download하기 위한 Option이 설정되어 있지 않으므로, Download Option을 설정해 주어야 한다.</p>
<p><span style="background-color: #ffff99">1. 메뉴에서 Build → Download Option</span><br />
<span style="background-color: #ffff99">2. Download Manager 창이 나타나면, 다음과 같이 설정 한다.</span><br />
<span style="background-color: #ffff99"> Set Command : C:\Program Files\ADChips\EISC Studio</span><br />
<span style="background-color: #ffff99"> 3\econ\EConMan.exe</span><br />
<span style="background-color: #ffff99"> Set Argument : -target cantus -systeminit -jtagspeed 10 </span><br />
<span style="background-color: #ffff99"> -flash_filewrite 0×0 $(TargetPath).bin</span><br />
<span style="background-color: #ffff99"> Set Argument중 -flash_filewrite 0×0은 Download할</span><br />
<span style="background-color: #ffff99"> Sector의 Start Address를 뜻한다. 위 cantus.ld에서 </span><br />
<span style="background-color: #ffff99"> 0×00000000으로 설정하였기에 0 Sector에 Download한다.</span><br />
<span style="background-color: #ffff99">3.  E-CON과 Target을 연결하고, PC에서 E-CON이 인식된 것을 확인 한다. CANTUS를 JTAG Mode로 설정한다. EVM의 경우 SW1을 아래쪽을 향하게 한 상태에서 Reset 한다.</span><br />
<span style="background-color: #ffff99">4. 메뉴에서 Build → Download To Target EConMan의 실행창이 나타나고, Download가 진행 된다.***</span><br />
(*** Set Argument에서 Option의 끝에 ‘-exit’를 추가하면 정상 Download된 후 창이 닫힌다.‘-jtagspeed 10’은 JTAG Clock을 30MHz / (10)+1 = 2.727MHz 로 설정을 뜻하며,‘-jtagspeed 1’으로 최대 15MHz까지 동작한다. JTAG Clock은 사용 환경에 따라 달라질 수 있다.</p>
<div id="attachment_8776" class="wp-caption alignnone" style="width: 502px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC010.jpg" rel="lightbox[8616]"><img class="size-full wp-image-8776" alt="그림10. BootLoader의 Download Option" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC010.jpg" width="492" height="192" /></a><p class="wp-caption-text">그림10. BootLoader의 Download Option</p></div>
<p><strong><span style="color: #ff0000">3.2.3 Example Project Build : Uart</span></strong></p>
<p><span style="background-color: #ffff99">1. /Example/Uart/Uart.epx를 실행하여 EISC Studio 3로 Project를 Open한다.</span><br />
<span style="background-color: #ffff99">2. Project Explorer에서 Linker Script에 cantus.ld****를 Open한다. 11번 행에서 0×00010000으로 지정 된 부분은 Program이 실행되는 Sector의 Start Address로 1 Sector(CANTUS 512의 경우)에서 실행 되는 Program임을 뜻 한다.</span> (**** BootLoader와 BootLoader_tiny는 Project 폴더내에 cantus.ld를 갖고 있지만, 이를 제외한 Project는‘/startup/cantus.ld를 참조한다.)<br />
<span style="background-color: #ffff99">3. 메뉴에서 Build → Build Project를 눌러 Project를 Build한다.</span><br />
<span style="background-color: #ffff99">4. Build가 완료되면 /Example/Uart/output/Uart.elf.bin이 생성된다. /Example/Uart/output/Uart.elf.bin이 생성되면, E-CON을 통해 Target에 Download할 수 있다.</span></p>
<div id="attachment_8775" class="wp-caption alignnone" style="width: 396px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC011.jpg" rel="lightbox[8616]"><img class=" wp-image-8775 " alt="그림11. Uart의 cantus.ld" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC011.jpg" width="386" height="350" /></a><p class="wp-caption-text">그림11. Uart의 cantus.ld</p></div>
<p><span style="color: #ff0000"><strong>3.2.4 Example Project Download : Uart</strong></span><br />
Download Option을 2)Example Project Download : BootLodaer에서 0×0으로 설정하였기 때문에 3)Example Project Build : Uart.에서 설정한 0×00010000으로 Uart를 Download하기 위해 설정을 변경해 주어야 한다.<br />
<span style="background-color: #ffff99">1. 메뉴에서 Build → Download Option</span><br />
<span style="background-color: #ffff99">2. Download Manager 창이 나타나면, 다음과 같이 설정 한다. </span><br />
<span style="background-color: #ffff99">Set Command : C:\Program Files\ADChips</span><br />
<span style="background-color: #ffff99"> \EISC Studio 3\econ\EConMan.exe </span><br />
<span style="background-color: #ffff99">Set Argument : -target cantus -systeminit -jtagspeed 10</span><br />
<span style="background-color: #ffff99"> -flash_filewrite 0×10000 $(TargetPath).bin</span><br />
<span style="background-color: #ffff99"> Set Argument중 -flash_filewrite 0×10000은 Download할</span><br />
<span style="background-color: #ffff99"> Sector의 Start Address를 뜻 한다. 위cantus.ld에서</span><br />
<span style="background-color: #ffff99"> 0×00010000으로 설정하였기에 1 Sector에 Download한다.</span><br />
<span style="background-color: #ffff99">3. E-CON과 Target을 연결하고, PC에서 E-CON이 인식된 것을 확인 한다. CANTUS를 JTAG Mode로 설정한다. EVM의 경우 SW1을 아래쪽을 향하게 한 상태에서 Reset한다.</span><br />
<span style="background-color: #ffff99">4. 메뉴에서 Build → Download To Target</span></p>
<p>EConMan의 실행창이 나타나고, Download가 진행된다.</p>
<div id="attachment_8774" class="wp-caption alignnone" style="width: 502px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC012.jpg" rel="lightbox[8616]"><img class="size-full wp-image-8774" alt="그림12. Uart의 Download Option" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC012.jpg" width="492" height="192" /></a><p class="wp-caption-text">그림12. Uart의 Download Option</p></div>
<p><span style="color: #ff0000"><strong>3.2.5 Execution</strong></span><br />
CANTUS에 Download한 Program은 CANTUS가 NORMAL MODE일 때 실행된다. EVM의 경우 SW1을 위쪽으로 향하게 한 상태에서 Reset한다.<br />
EVM의 RS-232C를 PC와 연결하면, PC에서 Terminal을 통해 출력하는 Message를 확인할 수 있다. 이때 Terminal은 119200 bps, Data 8 bit, 1 Stop bit, Parity none으로 설정한다. 0 Sector에 Download한 BootLoader가 실행되고, 1 Sector에 Download한 Uart Example까지 실행한 Terminal의 화면이다.</p>
<div id="attachment_8773" class="wp-caption alignnone" style="width: 300px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC013.jpg" rel="lightbox[8616]"><img class="size-full wp-image-8773" alt="그림13. Execution BootLoader + Uart" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC013.jpg" width="290" height="201" /></a><p class="wp-caption-text">그림13. Execution BootLoader + Uart</p></div>
<p><span style="color: #ff9900"><strong>3. Boot Loader를 사용하지 않는 시스템의 경우</strong></span><br />
CANTUS는 Reset후 Internal NOR Flash 0 Sector의 Program을 실행 한다. E-CON을 사용하면 Flash의 모든 Sector에 Write가 가능 하므로 E-CON을 사용할 수 있거나, 개발 시스템에서 Program Update와 같은 기능이 필요치 않은 경우에는 0 Sector에 BootLodaer가 아닌 Program을 Write하여 사용할 수 있다.<br />
다음은 Example/Uart를 Download하여 실행하는 경우이다.</p>
<p><span style="color: #ff0000"><strong>3.3.1 Example Project Build : Uart</strong></span><br />
<span style="background-color: #ffff99">1. /Example/Uart/Uart.epx를 실행하여 EISC Studio 3로 Project를 Open한다.</span><br />
<span style="background-color: #ffff99"> 2. Project Explorer에서 Linker Script에 cantus.ld를 Open한다. 11번 행에서 0×00010000으로 지정된 부분을 0×00000000으로 수정하여 Program이 실행되는 Sector의 Start Address가 0 Sector가 되도록 변경한다.</span><br />
<span style="background-color: #ffff99"> 3. 메뉴에서 Build → Build Project를 눌러 Project를 Build한다.</span><br />
<span style="background-color: #ffff99"> 4. Build가 완료 되면 /Example/Uart/output/Uart.elf.bin이 생성된다.</span></p>
<p>/Example/Uart/output/Uart.elf.bin이 생성되면, E-CON을 통해 Target에 Download할 수 있다.</p>
<p><span style="color: #ff0000"><strong>3.3.2  Example Project Download : Uart</strong></span><br />
Download Option을 <span style="text-decoration: underline;background-color: #ffff99">4) Example Project Download : Uart (P.38)에서 0×10000</span>으로 설정하였기 때문에 <span style="text-decoration: underline"><span style="background-color: #ffff99">1) Example Project Build : Uart(P.39)에서 설정한 0×00000000</span></span>으로 Uart를 Download하기 위해 설정을 변경해 주어야 한다.</p>
<p><span style="background-color: #ffff99">1. 메뉴에서 Build → Download Option</span><br />
<span style="background-color: #ffff99"> 2. Download Manager 창이 나타나면, 다음과 같이 설정한다.</span><br />
<span style="background-color: #ffff99"> Set Command : C:\Program Files\ADChips \EISC Studio 3\econ\EConMan.exe</span><br />
<span style="background-color: #ffff99"> Set Argument : -target cantus -systeminit -jtagspeed 10 -flash_filewrite 0×0 $(TargetPath).bin</span><br />
<span style="background-color: #ffff99"> Set Argument중 -flash_filewrite 0×0은 Download할 Sector 의 Start Address를 뜻 한다. 위 cantus.ld에서 0×00000000</span><br />
<span style="background-color: #ffff99"> 으로 설정하였기에 0 Sector에 Download한다.</span><br />
<span style="background-color: #ffff99"> 3. E-CON과 Target을 연결하고, PC에서 E-CON이 인식된 것을 확인 한다. CANTUS를 JTAG Mode로 설정한다. EVM의 경우 SW1을 아래쪽을 향하게 한 상태에서 Reset한다.</span><br />
<span style="background-color: #ffff99"> 4. 메뉴에서 Build → Download To Target</span></p>
<p>EConMan의 실행창이 나타나고, Download가 진행 된다.</p>
<p>3) Execution<br />
CANTUS에 Download한 Program은 CANTUS가 NORMAL MODE일 때 실행한다. EVM의 경우 SW1을 위쪽으로 향하게 한 상태에서 Reset한다.<br />
EVM의 RS-232C를 PC와 연결하면, PC에서 Terminal을 통해 출력하는 Message를 확인할 수 있다. 이때 Terminal은 119200 bps, Data 8 bit, 1 Stop bit, Parity none으로 설정한다.<br />
0 Sector에 Download한 Uart Example을 실행 한 Terminal의 화면이다.</p>
<div id="attachment_8772" class="wp-caption alignnone" style="width: 299px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC014.jpg" rel="lightbox[8616]"><img class="size-full wp-image-8772" alt="그림14. Execution Uart" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC014.jpg" width="289" height="95" /></a><p class="wp-caption-text">그림14. Execution Uart</p></div>
<p><span style="color: #ff9900"><strong>4. Debugging</strong></span><br />
CANTUS는 EISC Studio 3에서 E-CON을 통해 Debugging 할 수 있다. GDB를 사용하며 V3.2.2의 경우 Insight 환경도 사용할 수 있다. 다운 받은 SDK에 관련 매뉴얼이 있다.</p>
<div id="attachment_8771" class="wp-caption alignnone" style="width: 506px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC015.jpg" rel="lightbox[8616]"><img class=" wp-image-8771 " alt="그림15. CANTUS Debugging Insight" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC015-620x610.jpg" width="496" height="488" /></a><p class="wp-caption-text">그림15. CANTUS Debugging Insight</p></div>
<p>&nbsp;</p>
<p><span style="font-size: medium;color: #ff6600"><strong>4부. SDK의 Example</strong></span></p>
<p>SDK의 Example은 크게 BootLoader와 Application 두 가지로 나누어 진다.</p>
<p><span style="color: #ff9900"><strong>1. BootLoader</strong></span><br />
BootLoader는 USB Download, USB Mass Storage, Application 호출의 기능을 갖고 있다. 0 Sector에서 CANTUS Reset후 실행되며, USB Download나 USB Mass Storage의 명령이 없으면 특정 Sector의 Application을 호출 하게 된다.<br />
USB Download는 PC로부터 CANTUS DevTool을 통해 0 Sector가 아닌 특정 Sector에 Program을 Write한다. BootLoader 영역은 지울 수 없기 때문에 제품에서 Program Update용도로 사용할 수 있다.</p>
<div id="attachment_8770" class="wp-caption alignnone" style="width: 347px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC016.jpg" rel="lightbox[8616]"><img class=" wp-image-8770 " alt="그림16. CANTUS devTool" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC016.jpg" width="337" height="490" /></a><p class="wp-caption-text">그림16. CANTUS devTool</p></div>
<p>USB Mass Storage를 사용하면 EVM의 NAND Flash Memory 또는 SD Card를 PC에서 이동식 디스크로 사용할 수 있으며, FAT를 사용하여 Application에서 Drive로 접근하여 Read/Write가 가능하다. USB Mass Storage기능이 불필요하다면, BootLoader_tiny를 사용할 수 있다.</p>
<div id="attachment_8769" class="wp-caption alignnone" style="width: 486px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC017.jpg" rel="lightbox[8616]"><img class=" wp-image-8769 " alt="그림17. USB Mass Storage와 Application에서 사용 예" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC017-595x620.jpg" width="476" height="496" /></a><p class="wp-caption-text">그림17. USB Mass Storage와 Application에서 사용 예</p></div>
<p>Application 호출은 CANTUS 128A/512에 따라 달라진다.</p>
<p>CANTUS 128A(4 Kbyte x 32 Sector)<br />
BootLoader : 8 Sector(0&#215;00008000)를 호출<br />
BootLoader_tiny : 4 Sector(0&#215;00004000)를 호출</p>
<p>CANTUS 512(64 Kbyte x 8 Sector)<br />
BootLoader : 1 Sector(0&#215;00010000)를 호출<br />
BootLoader_tiny : 1 Sector(0&#215;00010000)를 호출</p>
<p><span style="color: #ff9900"><strong>2. Application</strong></span><br />
Application은 다음과 같이 구성 되어 있다. BootLoader가 필요하지 않다면, 0 Sector에 Download함으로써 BootLoader없이 CANTUS Reset후 실행할 수 있다. 단, 이때 Application의 Build는 Linker Script ‘cantus.ld’ 의 11번 Line이 0×00000000으로 설정된 상태에서 수행되어야 한다.<br />
Build 및 Download는 앞서 살펴 보았던 Uart와 동일하다.</p>
<div id="attachment_8767" class="wp-caption alignleft" style="width: 285px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC019.jpg" rel="lightbox[8616]"><img class="size-full wp-image-8767 " alt="그림 19. SDK의 Application" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SCADC019.jpg" width="275" height="561" /></a><p class="wp-caption-text">그림 19. SDK의 Application</p></div>
<p>&nbsp;</p>
<p>홈페이지 : <a href="www.adc.co.kr" target="_blank">www.adc.co.kr</a><br />
개발자커뮤니티공간 : <a href="http://cafe.naver.com/adchips" target="_blank">http://cafe.naver.com/adchips</a><br />
E-mail : sales1@adc.co.kr<br />
Tel : 02-2107-5870</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/8616/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[7호]위드로봇 무료강좌 기술자료 &#8211; 3차</title>
		<link>http://www.ntrexgo.com/archives/7742</link>
		<comments>http://www.ntrexgo.com/archives/7742#comments</comments>
		<pubDate>Wed, 25 May 2011 07:11:38 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[7호]]></category>
		<category><![CDATA[강좌]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[스테레오]]></category>
		<category><![CDATA[영상]]></category>
		<category><![CDATA[자료]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=7742</guid>
		<description><![CDATA[디바이스마트 매거진 7호 &#124; 본고에서는 3차원 정보를 영상 정보를 통해 추출하기 위한 방법을 소개한다.]]></description>
				<content:encoded><![CDATA[<h3><span style="color: #333333"><a href="http://www.ntrexgo.com/wp-content/uploads/2011/05/07scwith3030.jpg" rel="lightbox[7742]"><img class=" wp-image-7778 alignleft" alt="07scwith3030" src="http://www.ntrexgo.com/wp-content/uploads/2011/05/07scwith3030-300x225.jpg" width="210" height="158" /></a>3차 릴레이 무료강좌 기술자료</span></h3>
<h2><span style="color: #006b00">스테레오 영상 및 3D Vision 기술</span></h2>
<p>&nbsp;</p>
<p>글 | 위드로봇(주) 김도윤대표</p>
<p>&nbsp;</p>
<p>위드로봇 연구실 확장 이전 기념 릴레이 무료 강좌 3차 교육이 2010년 12월 18일 토요일에 성수동 위드로봇 본사에서 진행 되었습니다. 영상 처리 시스템에 대한 주제로 진행된 이번 강좌의 강의 내용을 참석하지 못한 디바이스마트 매거진 구독자들을 위해 간단히 소개하고자 합니다.</p>
<p><span style="color: #008000"><strong>사람 눈이 2개인 이유</strong></span><br />
지난 달(2011년 3월호)에는 “영상 처리 시스템 소개”라는 제목으로 영상 처리 시스템에 대한 개요를 설명했다. 이 때 우리가 얻는 영상이란 “3차원 공간 상에 존재하는 물체들이 광원의 빛 입자를 반사하는 파장을 렌즈로 모아 2D 평면에 투영(projection)한 것” 이라 정의했다. 이 때 3차원 정보를 2차원 평면에 투영하기 때문에 거리(또는 깊이)에 대한 정보는 사라지게 된다. 즉, 2D 이미지 한 장 만으로는 어떤 물체가 원래 작아서 작게 보이는 것인지, 아니면 멀리 있는 물체를 찍어서 작게 보이는 것인지 알 수 없다는 것이다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3001.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7744" alt="07scwith3001" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3001-620x217.jpg" width="496" height="174" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림 1. 2D 평면으로 투영되면 같은 ray상에 있는 물체는 같은 크기로 보인다.</td>
</tr>
</tbody>
</table>
<p>따라서 생명체들은 최소 두 개의 영상을 이용해 한 개의 눈으로 얻을 때 사라지는 거리의 정보를 다시 복원해 낸다. 이 때 재미있는 점은 두 눈이 바라보는 영역이 서로 많이 겹칠수록 거리를 정밀하게 알 수 있는 반면 한 번에 볼 수 있는 영역은 줄어들고, 반대로 서로 겹치지 않도록 하면 한 번에 많은 영역을 볼 수 있지만 거리 계산은 정확하지가 않다는 점이다. 이와 같은 특징은 동물의 진화에도 적용되었다. 육식 동물들은 눈이 앞쪽으로 달려있어 가능한 먹잇감과 나와의 거리를 정확하게 계산할 수 있도록 진화되었고, 초식 동물은 머리의 양 옆으로 붙어 거리 계산보다는 사방 팔방 중에 어디에 포식자가 있는지 방향을 판단하여 반대 방향으로 도망가기 쉽도록 진화되었다는 점은 재미있는 부분이다. 이와 같은 차이도 3D 비전 기술을 이해하면 쉽게 설명된다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3002.jpg" rel="lightbox[7742]"><img class="wp-image-7745 aligncenter" alt="07scwith3002" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3002-173x300.jpg" width="138" height="240" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3003.jpg" rel="lightbox[7742]"><img class="wp-image-7746 aligncenter" alt="07scwith3003" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3003-208x300.jpg" width="166" height="240" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 2. 초식 동물과 육식동물의 눈의 방향 비교</td>
</tr>
</tbody>
</table>
<p>본고에서는 3차원 정보를 영상 정보를 통해 추출하기 위한 방법을 소개한다. 지난 달 원고에서도 밝혔듯이 이 부분은 꽤나 복잡한 수학과 개념의 이해를 필요로 한다. 특히 우리가 이 때까지 배워왔던 기하학은 유클리드 기하학인데, 카메라 이미지에서 발생하는 기하학 문제는 프로젝티브 스페이스(projective space) 상에서 발생하는 기하학 문제이다. 따라서 직관적으로 이해하기 어려우며 수학의 벡터 스페이스 개념을 빌어야 온전히 이해가 가능하다. 대학원에서는 통상적으로 두 학기간의 과목을 통해 해당 개념을 학습하는 분량이기에 잡지의 한정된 분량에서 3D 기술을 모두 소개한다는 것은 무리이다. 따라서 최대한 개념과 그림을 위주로 3D 영상 처리 분야를 소개해 보려고 한다.</p>
<p><strong><span style="color: #008000">3D 정보를 얻기 위한 방법</span></strong><br />
두 대의 카메라로부터 3D 정보를 얻기 위한 연구는 미국 CMU, MIT 및 영국 Cambridge University를 필두로 유수 대학 및 연구소에서 50년 넘게 연구가 진행되고 있다. 가장 일반적인 방법, 즉 교과서에 나오는 방법은 1987년도 MIT의 O.Fangers의 연구로 현재 전형적인 3D 스테레오 비전 기술에 해당한다. 이전에는 계산량의 문제로 실시간 처리가 어려워 실제 사용이 불가했으나 최근 프로세서 성능의 개선으로 2000년대 들어 실시간 동작이 가능해 지고 있다. 이로 인해 보안 시스템, 무인 자동차, 군사용 로봇 등에서 많은 연구가 진행되고 있다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3004.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7747" alt="07scwith3004" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3004-620x434.jpg" width="434" height="304" /></a></td>
</tr>
<tr>
<td>그림 3. 전형적인 3D 스테레오 비전의 3D 좌표값을 계산하기 위한 수식</td>
</tr>
</tbody>
</table>
<p>3D 스테레오 비전 기술은 두 개의 카메라를 이용하여 각 영상의 차이(disparity)를 이용하여 2D 영상에서 사라진 거리 정보를 복원해 내는 기술이다. 즉, 두 카메라로부터 멀리 떨어진 물체는 각각의 카메라에 입력된 위치의 차이가 그다지 나지 않게 된다. 반면 두 카메라로부터 가까운 물체는 각각의 카메라에 입력된 위치의 차이가 크다. 이러한 차이를 디스패리티(disparity)라고 하며 디스패리티를 구하면 거리 정보를 복원할 수 있게된다.<br />
그런데 여기서 문제점이 왼쪽 영상의 한 점이 오른쪽 영상의 어디에 대응되는가를 알아야 디스패리티를 구할 수 있다. 이렇게 왼쪽, 오른쪽 영상의 일치점을 찾는 과정을 매칭(matching)이라고 한다. 통상적으로 한 점만으로는 서로 비교가 어렵기 때문에 대응점 주변의 정보를 하나의 블록으로 이용하여 찾는 것이 일반적이며, 이를 블록 매칭이라 부른다.<br />
매칭을 위해 한 블록을 다른 쪽 영상에서 처음부터 끝까지 모두 뒤지는 것은 불합리해 보이니 카메라간의 기하학적인 구조 정보를 이용하여 최소한 어느 근방에 있을 것 같다라는 정보를 이용하여 탐색 위치를 줄여주는 과정을 영상 교정(image rectification)이라고 한다.<br />
영상 교정이라는 표현보다는 이미지 렉티피케이션이라는 표현이 더 일반적으로 많이 쓰인다. Rectification을 위해서는 두 대의 카메라 사이의 배치 형태를 정확하게 알고 있어야만 한다. 이를 카메라 외부 파라미터(camera extrinsic parameter)라고 한다.<br />
마지막으로 앞서 디스패리티를 구하면 거리 정보를 알 수 있다고 했는데 이는 상대적인 정보까지만 알아낸 것이다. 영상 처리 분야에서는 이를 up to scale까지 찾아냈다고 표현하는데, 우리가 사용하는 단위, 즉 metrical information을 알고 싶다면, 좀 더 쉽게 설명하면 몇 cm 떨어져 있는지 알고 싶다면 카메라 내부 파라미터(camera intrinsic parameter)를 찾아내야 한다.<br />
이처럼 카메라 내부, 외부 파라미터를 찾아내는 과정을 카메라 캘리브레이션(camera calibration)이라고 한다. 꽤나 복잡하게 많이 파고 내려갔는데, 다시 한 번 정리해보자.</p>
<p>한 장의 영상만으로는 3D 정보를 얻을 수가 없으며 서로 다른 위치에서 촬영한 최소 두 장의 영상이 필요하다. 이 두 장의 영상에서 disparity를 계산하면 위치를 파악할 수 있는데, disparity를 구하려면 image matching을 풀어야 한다. 그냥 image matching을 하면 너무나 많은 시간이 걸리기에 image rectification을 수행하는데, 이를 위해서는 camera calibration이 필요하다. 따라서 3D 영상 처리의 순서는 역순으로 (1) 카메라 캘리브레이션을 수행한 뒤, (2) image rectification을 수행하고, (3) image matching을 통해 disparity를 구한 뒤, (4) camera intrinsic parameter값을 이용하여 유클리디안 공간 상의 3차원 좌표를 계산하는 순서로 이뤄진다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3005.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7748" alt="07scwith3005" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3005-620x293.jpg" width="397" height="187" /></a></td>
</tr>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3006.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7749" alt="07scwith3006" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3006-620x554.jpg" width="397" height="354" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림 5. image rectification 과정</td>
</tr>
</tbody>
</table>
<p>그림 5에서 왼쪽과 오른쪽의 매칭이 되는 부분은 2D 공간에서 1D 직선으로 일치시키는 과정으로 매칭 시간을 줄여준다.<br />
이 위 한 문단이 영상 처리 대학원에서 약 반학기 동안 이뤄지는 내용이다. 3D 영상 처리를 하겠다면 필수적으로 알고 있어야 한다. 다행스러운 부분은 필자가 공부하던 1990년대까지만해도 위 모든 문제를 각자가 알아서 다 해결해야만 했다. 따라서 어느 한 부분에서 막혀서 진도가 나가지 않으면 고급 알고리즘의 구현은 고사하고, 3D 좌표값도 한 번 계산하지 못하고 시간만 버리는 경우도 많았다. 2000년대 접어들어 MATLAB에서 다양한 이미지 관련 Toolbox가 나오고, OpenCV라는 걸출한 오픈 소스 영상 처리 알고리즘이 공개되면서 위 내용을 모두 알지 못해도 3D 좌표값을 구할 수 있게 되었다. 하지만 그 근본 원리를 알고 라이브러리를 쓰는 개발자와 뭔지도 모르고, 그 결과값만을 받아 쓰기에 급급한 개발자 사이에는 새로운 문제를 접할 때 개발 속도에 차이가 나기 마련이다. 3D 영상 처리에 관심 있는 독자들은 별도의 책들을 통해 앞에서 소개한 각각의 기술들을 숙지하면 연구에 많은 도움을 받을 수 있을 것이다.</p>
<p>3D 스테레오 비전을 연구하는 사람들이 흔히 사용하는 시스템은 캐나다 Point Grey사의 Bumblebee 스테레오 카메라이다. CCD 센서 두 개를 내장하고 있으며, 320×240 크기의 영상을 동기화 맞춰 1394 Firewire 인터페이스로 출력하는 시스템으로 2000년대 초반에는 이 시스템이 3D 스테레오 영상을 얻는 방법으로 유일했었다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3007.jpg" rel="lightbox[7742]"><img class="wp-image-7750 aligncenter" alt="07scwith3007" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3007-300x98.jpg" width="240" height="78" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3008.jpg" rel="lightbox[7742]"><img class="wp-image-7751 aligncenter" alt="07scwith3008" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3008-300x225.jpg" width="240" height="180" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 6. Point Grey사의 Bumblebee(좌)와 이 카메라에서 출력되는 3D 이미지(우)</td>
</tr>
</tbody>
</table>
<p>그림6에서 2D이미지로 표시할 때 깊이 정보는 밝기값으로 표기가 된다. 위 이미지에서는 밝을수록 가까운 물체에 해당한다.<br />
Bumblebee 시스템의 경우 영상을 PC로 전달하며, 스테레오 비전 알고리즘은 PC에서 동작하기에 다양한 알고리즘을 시도해 볼 수 있어 국내의 많은 연구진들이 이를 구매하여 연구를 진행했었다. 최근에는 Tyzx사에서 Deepsea라는 고속 스테레오 카메라가 출시되었는데 이전의 복잡한 매칭 계산을 상대적으로 간단한 census transform을 사용하여 초당 200 프레임까지 계산이 가능하다. 실제로 census transform은 이전의 방식 보다는 결과가 더 좋지 않지만 빠른 연산으로 우선 매칭을 해결한 다음 post processing으로 계산 결과를 다시 한 번 정리하여 보다 짧은 시간에 이전의 복잡한 방식보다 더 나은 결과를 내고 있다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3009.jpg" rel="lightbox[7742]"><img class="size-full wp-image-7752 aligncenter" alt="07scwith3009" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3009.jpg" width="208" height="137" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3010.jpg" rel="lightbox[7742]"><img class=" wp-image-7753 aligncenter" alt="07scwith3010" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3010-300x248.jpg" width="210" height="174" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 7. Tyzx사의 Deepsea(좌)와 이 카메라에서 출력되는 3D 이미지(우)</td>
</tr>
</tbody>
</table>
<p>이와 비슷하게 위드로봇에서도 3D 좌표를 계산하는 카메라를 만들어 보유 중이다. CMOS 카메라 두 개를 이용하며 BumbleBee와 동일하게 싱크를 맞춘 영상을 USB 2.0 인터페이스를 통해 PC로 최대 640×480 크기로 전달하며, 3D 계산 알고리즘은 라이브러리로 제공되어 PC 상에서 30fps 속도로 320×240 크기에서 실시간 동작시킬 수 있다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3011.jpg" rel="lightbox[7742]"><img class="wp-image-7754 aligncenter" alt="07scwith3011" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3011-300x277.jpg" width="180" height="166" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3012.jpg" rel="lightbox[7742]"><img class="wp-image-7755 aligncenter" alt="07scwith3012" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3012-300x224.jpg" width="210" height="157" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 8. myVision-Stereo 프로토타입</td>
</tr>
</tbody>
</table>
<p>그림8은 최대 640×480 컬러 스테레오 이미지를 USB 2.0 HS 인터페이스를 통해 30프레임을 전달하는 장치이다.<br />
위 제품은 외형을 좀 더 손질하여 myVision-Stereo 라는 제품으로 9월 전에 출시할 예정이므로 3D 영상을 연구하는 분들이 외산 장비에 비해 보다 저렴하고 손쉽게 시작할 수 있는 계기를 마련할 것으로 보인다.</p>
<p><strong><span style="color: #008000">게임 분야에서 3D</span></strong><br />
앞서 소개한 스테레오 영상 장치들은 연구용이라 외산 제품의 경우 한 대의 가격이 최소 300만원에서 최대 1천만에 육박하는 고가 시스템이다. 따라서 이러한 제품에서 동작하는 알고리즘을 작성해 봤자 컨슈머 시장으로 진입하기에는 많은 어려움이 있어 시중에서는 3D 정보를 활용하는 장치를 보기가 어려웠었다.<br />
2000년 후반에 들어 3D 모션 인식 분야에서 패러다임 쉬프트가 발생하는데 바로 게임 분야의 적용 및 시장에서의 성공이다. 전통적인 스테레오 영상 처리 기술로는 가격도 비싸고, 성능도 원하는 만큼 나오지 않자 게임 분야에서는 또 다른 방법으로 3D 정보를 얻는 방법을 모색하기 시작했다. 그 첫 번째 신호탄이 닌텐도에서 Wii로 시장에 나타났다. TV 수상기 위에 적외선 LED 바를 올려 놓고, 손에 쥐고 게임을 조정하는 컨트롤로(WiiMote) 내에는 카메라 센서가 들어있어 TV 수상기 위에 위치한 적외선 LED 위치를 추적한다. 추가로 WiiMote 내에는 3축 가속도 센서가 내장되어 있어 WiiMote의 pose를 실시간으로 파악한다. 최근에는 Wii Motion Plus 팩이라고 해서 3축 자이로 센서를 WiiMote에 추가로 부착할 수 있는 장치가 출시되어 보다 정밀한 3차원 공간상에의 위치, 각도를 추정할 수 있다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3013.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7756" alt="07scwith3013" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3013-300x284.jpg" width="192" height="182" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3014.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7757" alt="07scwith3014" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3014-300x214.jpg" width="240" height="171" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 9. 닌텐도 사의 WiiMote와 Wii Motion Plus</td>
</tr>
</tbody>
</table>
<p>소니의 플레이스테이션의 화려한 그래픽에 수세에 몰려있던 닌텐도는 3D 모션 인식이라는 신기술로 이러한 열세 분위기를 단번에 만회한다. 실제로 2007, 2008년도에는 매장마다 입고가 되자마자 매진되는 분위기였으며, 게임에 있어 가장 중요한 부분은 화려한 그래픽이 아닌 사용자의 몰입감이라는 사실을 다시 한 번 확인하게 된다.<br />
3D 모션 인식이 게임 분야에서 화두로 떠오르면서 소니 사에서도 플레이스테이션 아이라는 장치를 도입하여 추격을 하는데, 이는 닌텐도와 다른 본격적인 영상 처리를 통한 모션 인식에 해당한다. 3차원 공간 상에서 컨트롤러 앞단에 장착되어 있는 구의 색상과 크기를 이용하여 플레이스테이션 아이와 상대적인 위치를 파악하고, 포즈는 MEMS 기반 센서들로 파악한다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3015.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7758" alt="07scwith3015" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3015-291x300.jpg" width="186" height="192" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3016.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7759" alt="07scwith3016" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3016-300x223.jpg" width="240" height="178" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 10. 소니 사의 플레이스테이션 아이(좌)와 무브 컨트롤러(우)</td>
</tr>
</tbody>
</table>
<p>이와 같은 방식은 앞서 소개한 닌텐도 방식에 비해 컨트롤러의 위치를 놓칠 확률이 줄어들고, 동작 범위가 넓어지는 효과가 있으며, 무엇보다 플레이스테이션에 카메라가 장착되는 셈이기에 각종 영상 처리 알고리즘을 응용한 게임이 가능해 진다는 장점이 있다. 이를 이용한 게임 타이틀도 출시 되었는데, eye toy 시리즈와 eye pet이 그것이다. 카메라로부터 입력된 영상을 이용하여 3D 캐릭터를 3차원 공간 상에 실제 존재하는 것처럼 출력하는 즉, 증강 현실 기술을 이용하여 게임을 구현하고 있다. 기존 게임기에 카메라가 붙으니 좀 더 지능적인 장치로 탈바꿈하는 경우이다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3017.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7760" alt="07scwith3017" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3017-300x170.jpg" width="192" height="109" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3018.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7761" alt="07scwith3018" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3018-300x141.jpg" width="216" height="102" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3019.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7762" alt="07scwith3019" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3019-300x168.jpg" width="216" height="121" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림 11. EyePet 데모 동영상</td>
<td style="text-align: center" colspan="2">그림 12. MS사의 Kinect 내부 구조와 모션 인식</td>
</tr>
</tbody>
</table>
<p>2000년대 3D 동작 인식 게임기 시장을 닌텐도와 소니가 이끌어왔다면 2010년부터는 MS사의 XBOX 반격이 시작된다. XBOX에서 추가로 부착할 수 있는 Kinect 라는 장비를 선보이는데, 이 제품은 내부에 IR 카메라와 IR 방식의 소형 프로젝터(엄밀히 말하면 IR LED와 렌즈 및 패턴 필름)을 내장한 3D 카메라이다. 흔히 외부에서 보기에 두 개의 카메라가 배치되어 있어 Kinect가 스테레오 기법으로 3D 좌표를 추출하는 것으로 잘못 알고 있는 분들이 많이 있다. Kinect는 기존 3D 영상 처리와 다르게 하나의 카메라로 3D 좌표를 계산해 내는데, 카메라를 하나 사용하는 대신 광원을 이용하여 미리 알고 있는 패턴을 공간에 투사하고, 이 패턴이 어떻게 일그러지는가를 파악하여 거리 정보를 파악하는 방식이다. 이는 이스라엘의 프라임센서사가 가지고 있는 특허로, MS사는 이 특허를 이용하여 Kinect를 제작하였다. 패턴 매칭 및 거리 계산은 ASIC으로 구현하였고, 속도는 놀랍게도 60fps으로 계산이 가능하다. 또한 3D 스테레오 기법에서 해결 못한 고질적인 문제인 “특징점들이 없는 밋밋한 평면”의 거리도 깔끔하게 해결이 된다. 그리고, 오히려 이러한 밋밋한 평면에서 거리 계산이 좀 더 정밀하게 나오기에 게임기가 놓이는 공간인 거실 바닥면을 생각하면 매우 훌륭한 어플리케이션에 접목했다는 것을 알 수 있다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3020.jpg" rel="lightbox[7742]"><img class="alignnone size-medium wp-image-7763" alt="07scwith3020" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3020-300x225.jpg" width="300" height="225" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림 13. Kinect에서 투사하는 random dot pattern</td>
</tr>
</tbody>
</table>
<p>그림 13 위 그림처럼 Kinect는 random dot stereogram의 패턴을 쏘고 이 패턴의 일그러짐을 찾아내어 거리를 계산한다.<br />
재미있는 점은 kinect가 시중에서 판매되는 가격이 20만원선인데, 열 배 가격인 연구용 3D 스테레오 시스템보다도 성능이 더 좋다는 사실이다. 이에 kinect를 XBOX가 아닌 일반 PC에서 사용하기 위한 해킹 시도가 있었으며, 실제로 해킹에 성공하여 PC와 리눅스에서 연결에 성공하였다. 이에 올해 4월 MS사는 정식으로 kinect를 지원하는 라이브러리를 공개하였으며, 이를 이용한 여러 PC 응용 프로그램이 출시될 가능성을 열어두었다. Kinect는 많은 가능성을 영상 처리 전공자들에게 열어 두었지만 그 방식의 한계상 실내에서만 사용이 가능하다. 이를 실외에서 응용할 수 있도록 개선한다면 그 활용 범위는 무궁무진하게 넓어질 것으로 예상된다.<br />
이와 같은 게임 분야에서 3D 영상 처리의 성공에 고무된 영상 처리 업체들은 앞다퉈 3D 좌표를 추출할 수 있는 카메라들을 선보이고 있으며, 재미있게도 그림-14의 Zcam은 MS사가 인수 합병하였다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3021.jpg" rel="lightbox[7742]"><img class="alignnone size-thumbnail wp-image-7764" alt="07scwith3021" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3021-150x150.jpg" width="150" height="150" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3022.jpg" rel="lightbox[7742]"><img class="alignnone size-thumbnail wp-image-7765" alt="07scwith3022" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3022-150x150.jpg" width="150" height="150" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3023.jpg" rel="lightbox[7742]"><img class="alignnone size-thumbnail wp-image-7766" alt="07scwith3023" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3023-150x150.jpg" width="150" height="150" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="3">그림 14. 여려 종류의 3D 카메라들 (좌에서부터 MESA사의 SR4000, PMDTec, ZCam)</td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #008000">3D 정보를 얻는 또 다른 방법</span></strong></p>
<p>본고의 주제가 3D 영상 처리이기에 카메라 영상을 통해 3D 정보를 얻는 방법을 소개했지만 현재까지 3D 정보를 추출하는 방식으로는 카메라의 영상을 이용하는 것보다는 레이저를 이용하는 방식이 훨씬 신뢰도가 높다. 대표적인 회사로 SICK 시스템이 있는데, 실내-실외 모두 mm 이하의 정밀도로 거리를 빠르게 계산해 주기에 무인 차량에는 영상 처리용 카메라 이외에 레이저 스캐너 센서를 차량 천장에 주렁주렁 달고 실험을 하고 있다. 이러한 현실은 이런저런 영상 처리 기법으로 3D 정보를 찾아내는 방법이 레이저를 쏘고 물체에 맞아 돌아오는 시간을 측정하는 TOF(Time of Flight) 방식에 비해 아직 정밀도가 떨어진다는 것을 간접적으로 설명해 준다. 이와 같은 상황을 비관적으로 해석하여 ‘영상 처리로는 3D 정보를 얻는데 한계가 있다’라고 단정적으로 결론을 짓고 레이저 센서의 응용으로 분야를 바꾸는 연구자들도 있는 것이 사실이다. 하지만 실제 생태계에서 수많은 동물들이 영상 처리를 통해 3D 정보를 얻고 있으며, TOF 방식으로 공간에 대한 정보를 얻는 동물은 박쥐와 돌고래 정도 뿐이니 아직 우리에게 충분히 빠른 프로세서와 뛰어난 알고리즘이 없음을 탓해야 할 것 같다. 또한 달리 표현하면 아직 영상 처리 쪽에서는 할 일이 많이 남아있다고 해도 과언이 아닐 것이다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3024.jpg" rel="lightbox[7742]"><img class="alignnone size-full wp-image-7767" alt="07scwith3024" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3024.jpg" width="200" height="150" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3025.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7768" alt="07scwith3025" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3025-300x280.jpg" width="168" height="157" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 15. SICK사의 레이저 스캐너와 무인 차량 모습</td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #008000">카메라 캘리브레이션</span></strong><br />
이제서야 카메라 캘리브레이션을 설명하려고 한다. 통상적인 3D 스테레오 영상 처리 설명이라면 카메라 캘리브레이션부터 설명하지만 저자는 “왜 캘리브레이션이 필요한지, 어떤 분야에서 쓰게 되는 것인지”를 먼저 설명하고 싶었다. 전형적인 캘리브레이션의 수학적인 표현은 아래와 같다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3026.jpg" rel="lightbox[7742]"><img class="alignnone  wp-image-7769" alt="07scwith3026" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3026-620x349.jpg" width="434" height="244" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림 16. 카메라 좌표계와 유클리디안 좌표계</td>
</tr>
</tbody>
</table>
<p>(x,y,z)는 일반적으로 우리가 알고 있는 3차원 공간 상의 좌표계이며, (u,v)는 이미지 상에서 좌표계이다. 이 때 카메라 내부 파라미터를 최대한 간략하게 표기하면 초점 거리 f와 scale factor w로 두 좌표계간의 변환을 쓸 수 있다.</p>
<p>카메라 캘리브레이션이란, 이 미지수들을 찾아내는 과정이며, 이를 찾기 위해 미리 3차원 공간상의 좌표를 알고 있는 특정 패턴을 카메라로 받아들여 계산해 낸다. 위에서 [u,v, w] 좌표와 [x,y,z] 사이의 좌표를 변환하는 행렬을 프로젝션 매트릭스 P라고 부르며, P를 계산하기 위해 3차원 공간의 여러 점 또는 한 점을 공간 상에서 움직여가며 촬영하여 수식을 쌓아(stacking) 최적화 문제로 해결한다. 이 때 P 매트릭스에 여러 가지 기하학적인 특징이 있기에 값을 계산할 때 이러한 기하학적 특징까지 고려하여 계산하면 보다 정밀한 값을 찾을 수 있다. 가장 일반적으로 많이 사용하는 방식은 SVD(Singular Value Decomposition)을 사용하며 좀 더 복잡하게 계산할 때는 전형적인 최적화 방식으로 계산하기도 한다.</p>
<p>캘리브레이션을 수행하기 위해 사용되는 패턴은 크게 2D 체커 보드와 3D 캘리브레이션 박스로 나눌 수 있다. 2D 체커 보드는 상대적으로 제작이 쉽지만 캘리브레이션을 위해 체커 보드를 이리저리 바꿔가며 여러 장의 이미지를 얻어야 한다는 단점이 있다. 반면 캘리브레이션 박스는 한 장의 이미지만으로 카메라 캘리브레이션을 수행할 수 있다는 장점이 있지만 제작이 복잡하다는 단점이 있다.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3027.jpg" rel="lightbox[7742]"><img class="alignnone size-full wp-image-7770" alt="07scwith3027" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3027.jpg" width="263" height="199" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3028.jpg" rel="lightbox[7742]"><img class="alignnone size-medium wp-image-7771" alt="07scwith3028" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07scwith3028-300x224.jpg" width="300" height="224" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 17. 카메라 캘리브레이션에 사용되는2D 체커 보드(좌)와 위드로봇에서 제작한 캘리브레이션 박스(우)</td>
</tr>
</tbody>
</table>
<p>위드로봇에서는 영상 처리 전공자들이 손쉽게 사용할 수 있는 캘리브레이션 박스를 제작하여 시판을 앞두고 있으며, PC와 무선으로 데이터를 주고 받을 수 있어 매칭 문제도 손쉽게 해결할 수 있도록 하였다.<br />
3D 좌표값의 정밀도는 카메라 캘리브레이션의 정확도와 연결된다. 위드로봇에서는 1280×1024 해상도의 카메라를 이용하여 전방 3m 앞의 물체가 움직일 때 mm 이하의 해상도로 0.01도의 움직임까지 측정할 수 있는 기술을 확보하고 있다. 이는 전적으로 캘리브레이션 기술에 의존적이기에 영상 처리를 통해 정밀한 계측이 필요하다면 캘리브레이션 기술 확보가 먼저 수행되어야 한다.</p>
<p><strong><span style="color: #008000">마감하며</span></strong><br />
원고를 정리하다 보니 해당 내용을 공개 강좌로 진행한지도 벌써 3개월이 지났다. 공개 강좌 때 여러 내용을 추가 보강하여 유료 강좌로 시작하겠다고 독자들에게 약속을 했었는데, 아직 그 약속이 실행되고 있지 못하고 있다. 다행스러운 점은 위드로봇 연구소에서 다양한 신기술들이 개발되어 올해 하반기에는 여러 종류의 영상 처리 시스템이 선 보일 것으로 예상된다. 하루 빨리 제품 개발을 마무리하고, 새로운 내용을 보강하여 강의 프로그램을 만들 것을 다시 한 번 약속 드린다. 다음 번 원고는 마지막 원고로 임베디드 비전 시스템에 대한 설명이 이어지며, 위드로봇의 여러 기술이 소개될 것이다.</p>
<div class="symple-box yellow none" style="text-align:left; width:100%;"> 
<span style="font-size: 13px;line-height: 19px">※이미지 출처</span><br />
그림6 PointGrey Inc. 홈페이지<br />
그림7 PointGrey Inc. 홈페이지<br />
그림9 Nintendo Inc.<br />
그림10 Sony Inc.<br />
그림11 YouTube<br />
그림12 www.ros.org, PrimeSense사<br />
그림13 www.ros.org<br />
그림14 산기평 비전 SoC 기획 보고서<br />
그림15 SICK Inc, DARPA<br />
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/7742/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[6호] 위드로봇 무료강좌 기술자료 &#8211; 2차</title>
		<link>http://www.ntrexgo.com/archives/7697</link>
		<comments>http://www.ntrexgo.com/archives/7697#comments</comments>
		<pubDate>Fri, 25 Mar 2011 06:38:51 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[6호]]></category>
		<category><![CDATA[강좌]]></category>
		<category><![CDATA[기술]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[스페셜]]></category>
		<category><![CDATA[위드로봇]]></category>
		<category><![CDATA[자료]]></category>
		<category><![CDATA[컬럼]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=7697</guid>
		<description><![CDATA[디바이스마트매거진 6호 &#124; 전형적인 영상처리 시스템은 영상을 취득하는 카메라, 취득된 영상 신호를 원거리로 전송할 수 있게 변경하는 인코더, 그리고 이를 다시 복원하는 디코더, 마지막으로 영상을 출력 또는 처리하는 PC 또는 임베디드 시스템으로 구성할 수 있다. ]]></description>
				<content:encoded><![CDATA[<h3><span style="color: #333333"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH011.jpg" rel="lightbox[7697]"><img class=" wp-image-7711 alignleft" alt="06SCWITH011" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH011-300x204.jpg" width="210" height="143" /></a>2차 릴레이 무료강좌 기술자료</span></h3>
<h2><strong><span style="color: #008000">영상 처리 시스템 소개</span></strong></h2>
<p>&nbsp;</p>
<p style="text-align: left">글 | 위드로봇(주) 김도윤대표</p>
<p>&nbsp;</p>
<p><span style="font-size: 13px;line-height: 19px">위드로봇 연구실 확장 이전 기념 릴레이 무료 강좌 2차 교육이 2010년 12월 11일 토요일에 성수동 위드로봇 본사에서 진행 되었습니다. 영상 처리 시스템에 대한 주제로 진행된 이번 강좌의 강의 내용을 참석하지 못한 디바이스마트 매거진 구독자들을 위해 간단히 소개하고자 합니다. </span></p>
<p><strong><span style="color: #008000">센서 관점에서 영상 처리</span></strong></p>
<p>자동화 시스템을 구성할 때 대상 시스템의 상태를 정확하게 파악하기 위해 다양한 센서들이 사용된다. 예를 들어 모터의 속도를 정확하게 유지하는데 관심이 있다면 타코메타(Tachometer) 또는 엔코더(Encoder)를 센서로 사용하게 될 것이고, 어떤 물체가 특정 위치를 지나갔는지 아닌지를 판단하기 위해서는 접촉식 스위치 또는 적외선 LED 방식의 비접촉 검출 센서를 사용하게 될 것이다. 자동화 시스템에서 사용되는 센서는 무수히 예를 들 수 있겠지만 이러한 많은 센서들 중에서 가장 많은 정보를 포함하고 있는 센서로는 영상(Image)을 취득할 수 있는 이미지 센서를 꼽는데 전문가들은 주저하지 않는다.</p>
<p>영상은 3차원 공간 상에 존재하는 물체들이 광원의 빛 입자를 반사하는 파장대(색깔)를 2차원 공간에 투영한 것으로 데이터 안에 공간에 대한 기하학적인 정보(크기, 모양, 두께, 각도, 형태, 존재 유무)뿐만 아니라 색상 정보에 의한 추가 정보(대상 물체간의 그룹핑, 표면의 결함, 각 물체의 인식, 사람일 경우 얼굴 인식, 성별 인식, 나이 추정 등)까지 알 수 있어 그 활용도는 무궁무진하다. 정보가 많다는 것은 그 데이터의 크기가 크다라는 말과 직결되고, 영상 데이터의 크기 문제 때문에 이전 기술로는 실시간 처리가 어려워 산업체에서는 활발히 사용하기가 어려웠다. 하지만 빠르게 발전하는 전자공학과 IT 기술에 힘입어 이제 주변에서 손쉽게 영상 데이터를 취득할 수 있으며, 데이터의 가공, 조작이 쉬워졌다. 따라서 조만간 우리 주변에 많은 부분에서 이러한 영상 센서를 사용한 제품군들을 접하게 될 것으로 예상되며, 이런 기술을 가진 기술자, 전문가들 또한 많이 필요할 것으로 예상되어, 디바이스마트 매거진 독자들에게 해당 기술을 소개할 목적으로 본 원고는 작성되었다.</p>
<p><strong style="font-size: 13px;line-height: 19px"><span style="color: #008000">영상처리 시스템의 구성</span></strong></p>
<p>전형적인 영상처리 시스템은 영상을 취득하는 카메라, 취득된 영상 신호를 원거리로 전송할 수 있게 변경하는 인코더, 그리고 이를 다시 복원하는 디코더, 마지막으로 영상을 출력 또는 처리하는 PC 또는 임베디드 시스템으로 구성할 수 있다. 이 중 영상처리 분야에서는 디코더 대신 해당 기능을 강조한 이미지 그래버(Image Grabber) 또는 프레임 그래버(Frame Grabber)라는 표현을 더 많이 사용한다. 현재 시장에 나와있는 대부분의 카메라는 인코더를 카메라에 내장한 형태로 나오기에 다시 정리해 보면 카메라-이미지 그래버-PC 형태로 정리할 수 있고 아래 그림과 같다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH012.jpg" rel="lightbox[7697]"><img class="wp-image-7715 aligncenter" alt="06SCWITH012" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH012-620x255.jpg" width="558" height="230" /></a></td>
</tr>
<tr>
<td style="text-align: center">그림 1. 영상 처리 시스템의 구성</td>
</tr>
</tbody>
</table>
<p>위드로봇에 많이 문의하는 내용 중에 하나가 “2~3만원하는 USB 웹캠으로 영상을 받아 PC에서 처리하는 형태로 시스템을 구성하면 안되나요?”이다. 결론부터 말하면 “문제없다”이다. 예전에는 웹캠의 영상을 사용자가 작성할 프로그램 영역으로 가져오기 위해 MS Windows OS를 사용하는 경우에는 Direct Show 기술을 미리 알고 있어야 했지만, <span style="font-size: 13px;line-height: 19px">최근에는 OpenCV(http://sourceforge.net/projects/opencvlibrary/)와 같은 공개 비전 라이브러리를 이용하면 매우 손쉽게 웹캠 영상을 바로 취득할 수 있으며, 여러 영상 처리 알고리즘을 라이브러리 레벨에서 바로 이용할 수 있다. 하지만 복수 개의 영상을 얻어야 한다든지, 렌즈 화각을 변경해야 한다든지, 노출 시간을 조절해야 하는 부분은 USB 웹캠으로는 해결하기 어려운 부분이다. 따라서 영상 처리 분야에 입문하는 분들이라면 USB 웹캠과 OpenCV로 학습을 하다가 일정 단계 지식이 쌓이면 카메라와 이미지 그래버를 구매하여 본격적인 연구를 진행할 수 있는 시스템을 구축하는 것도 좋은 방법이다.</span></p>
<p><strong><span style="color: #008000">영상 처리에서 가장 중요한 광원</span></strong></p>
<p>위에서 전형적인 영상 처리 시스템은 카메라-그래버-PC 세 가지 조합으로 구성된다고 설명했다. 하지만, 이 세 가지 전체를 합친 것보다 중요한 것은 광원이다. 영상을 얻으려면 물체 자체가 발광하지 않는 한 외부에 어떠한 광원이 있어야 하는데, 영상은 광원의 종류, 개수, 위치에 따라 큰 차이가 발생하게 된다.</p>
<p>예를 들어, 참치캔을 제조하는 회사에서 참치캔 윗면에 주름이 제대로 있는지 없는지 확인하는 검사 장비를 의뢰했다고 가정해 보자. 전형적인 환경에서 카메라로 참치캔 윗면을 촬영한다면 아래 그림 2처럼 나올 것이다. 이 영상에서 참치캔 주름을 잘 찾아내는 일은 영상 처리 분야에 지식을 많이 가진 고수들도 꽤나 난감한 일이다. 주름 부분이 도드라진 부분도 있지만, 그림자로 인해 반대로 어두운 부분이 섞여 있으며, 참치캔 표면에 인쇄되어 있는 글씨들도 영상 처리에 많은 영향을 미친다. 이 사진 하나로 참치캔 주름의 유무를 찾아야 한다면 꽤나 복잡한 영상 처리 알고리즘을 동원해야 하고, 그런다손 치더라도 다양한 참치캔에 일일이 적용해 보기 전에는 그 결과를 장담할 수 없는 시스템이 만들어진다. 하지만 광원을 바꿔 촬영할 수 있다면 이는 매우 손쉬운 문제로 바꿀 수 있다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH001.jpg" rel="lightbox[7697]"><img class="wp-image-7706 aligncenter" alt="06SCWITH001" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH001-300x234.jpg" width="168" height="131" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH004.jpg" rel="lightbox[7697]"><img class="alignnone  wp-image-7709" alt="06SCWITH004" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH004-150x150.jpg" width="135" height="135" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH002.jpg" rel="lightbox[7697]"><img class="alignnone size-thumbnail wp-image-7707" alt="06SCWITH002" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH002-150x150.jpg" width="150" height="150" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH003.jpg" rel="lightbox[7697]"><img class="alignnone size-thumbnail wp-image-7708" alt="06SCWITH003" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH003-150x150.jpg" width="150" height="150" /></a></td>
</tr>
<tr>
<td>그림 2. 전형적인 참치캔의 윗면을 일반 광원에서 촬영한 영상</td>
<td colspan="3">그림 3. 좌측 그림처럼 돔형 광원을 배치하고 거리를 달리하여 영상을 촬영하면 중앙과 우측의 영상을 얻을 수 있다.</td>
</tr>
</tbody>
</table>
<p>위 그림3과 같이 돔형으로 생긴 광원을 이용하여 참치캔 적정 거리에서 영상을 하나 얻고, 광원을 참치캔에 좀 더 접근하여 또 다른 영상을 얻으면 중앙과 우측과 같은 영상을 얻을 수 있다.<br />
두 영상을 비교해 보면 하나의 영상은 참치캔 주름이 그림자로 짙은 색으로 표현되어 있고, 다른 한쪽은 주름의 그림자가 사라진 것을 볼 수 있다. 두 영상의 차이를 추출하면 간단히 참치캔의 주름 부분을 파악할 수 있어 매우 손쉬운 문제로 바뀐다.</p>
<p>위 예에서 볼 수 있듯이 지능적이고, 고도로 복잡한 영상 처리 알고리즘보다 잘 선택한 광원으로 얻은 영상과 간단한 영상 처리 알고리즘의 조합이 훨씬 더 좋은 결과를 내는 경우가 많다. 가장 좋은 디자인은, 더 이상 뺄 것이 없는 디자인이라는 말이 있듯이 가장 좋은 시스템은 복잡한 것이 아니라, 간단하고 명료하면서 정확하게 동작하는 시스템이다. 아쉬운 점은 이러한 광원에 대한 연구는 학계에서 보다는 산업체 현장에서 더 강조되고 있기에 체계적인 매뉴얼에 의해 광원 선정 및 배치가 이뤄지기 보다는 현장에서 경험한 시행착오에 의해 결정되고 있다. 보다 많은 영상 처리 전공자들이 이러한 광원에 대한 여러 경험치를 공유하고 정리된다면 영상 처리 분야의 발전을 보다 당길 수 있을 것으로 기대된다.</p>
<p><strong><span style="color: #008000">너무나 넓은 영상 처리 분야</span></strong></p>
<p>이러한 영상 처리 분야를 본격적으로 학습하려면 어디서부터 무엇을 하는 것이 좋을까? 앞에서 언급했듯이 영상 데이터 자체에 워낙 많은 정보가 들어있어 영상 처리의 목적에 따라 각각의 관심 분야가 달라지기에, 내가 최종적으로 무엇을 원하는가를 명확하게 알고 있어야 한다. 영상 처리에 관하여 권위 있는 AIA(Automated Imaging Association)에서는 다음과 같이 영상 처리 분야를 Machine Vision, Image Processing, Computer Vision으로 세 분류로 나눠났다. 각각의 특징은 여러 가지로 설명할 수 있겠지만 Image Processing과 Computer Vision 분야는 아무래도 그 차이점을 구분하기가 모호한 것이 사실이다. 따라서 위드로봇에서는 Computer Vision 분야 대신 Computer Graphics로 표현을 변경하고 그림 4의 좌측 표로 세 분류간의 차이를 설명하곤 한다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH006.jpg" rel="lightbox[7697]"><img class="wp-image-7701 aligncenter" alt="06SCWITH006" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH006.jpg" width="216" height="216" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH005.jpg" rel="lightbox[7697]"><img class="wp-image-7710 aligncenter" alt="06SCWITH005" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH005-300x192.jpg" width="270" height="173" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 4. 좌측-AIA 에서 제안한 영상 처리 분야, 우측-위드로봇 관점의 영상 처리 분야 grouping</td>
</tr>
</tbody>
</table>
<p>위 표를 보면서, 각 분야의 차이점을 따져보자. 입력으로 영상을 넣고 출력을 영상으로 얻는 것에 관심이 있는 경우는 Image Processing 분야가 된다. 만일 여러분이 포토샵과 같은 툴을 이용해 작업하는 분야에 관심이 있다면 이는 Image Processing 분야가 된다. 입력은 영상이 아닌데 출력이 영상으로 나오는 경우는 Computer Graphics 분야가 된다. 각종 3차원 기하학적인 정보와 광원의 속성들을 입력하여, 가상의 이미지를 얻어내는 분야가 Computer Graphics 분야이다. 세 번째로 영상을 입력하여 영상이 아닌 다른 데이터를 얻어내는 것에 관심을 가지는 분야가 Machine Vision 분야이다. 예를 들면 각종 영상 기반 검사 장치에서 제품에 하자는 없는지, 인쇄는 제대로 되었는지 등을 영상을 통해 파악하는 경우는 Machine Vision 분야에 속하게 되는 것이다. 마지막으로 영상이 아닌 것을 넣어 영상이 아닌 정보를 얻는 것은 당연히 영상 처리 분야에 속하지 않으므로 이 자리에서 언급할 필요는 없어 보인다.</p>
<p>위에서 소개한 세 분류는 각각의 목적에 따라 알아야 할 지식, 관심을 가지는 방법론들이 서로 다르다. Image Processing을 전공하는 사람들은 주로 2D Signal Processing에 관심이 많다. 2D Matrix로 표현되는 선형 필터를 설계하거나, 압축을 위해 Mpeg을 연구하는 분들이 이 부류에 속한다. 반면에 Machine Vision의 경우는 카메라 내부, 외부의 기하학적인 정보(Intrinsic, Extrinsic Parameter)를 정확하게 얻어내기 위한 카메라 캘리브레이션(Camera Calibration)이 가장 기초가 되며 한 장의 영상으로 원하는 정보를 얻지 못하는 경우 여러 장의 이미지에서 원하는 데이터를 추출하는 Multi-view Geometry에 관심을 가진다. 자신이 현재 해결하고자 하는 영상 처리 문제가 어디에 속하는 문제인지 파악하는데 어려움을 겪고 있는 독자가 있었다면, 위 표로 조금이나마 도움이 되길 바란다.</p>
<p><strong><span style="color: #008000">색의 수학적 표현</span></strong></p>
<p>우리는 초등학교 시절부터 색은 3원색으로 구성되며 Red, Green, Blue (RGB)라고 배워왔다. 정말 색은 R + G + B의 조합으로 구성될까? 특정 색이 RGB로 표현된다는 뜻은 수학적으로 보면 3가지 색상이 각각의 좌표축을 이뤄 공간을 형성하며, 이 공간이 벡터 스페이스가 되어야 한다. 하지만 RGB 는 단지 인간의 편의에 의해 만들어진 공간이기에 RGB 공간 상에서는 일반 대수 연산이 아무런 의미를 가지지 못한다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH008.jpg" rel="lightbox[7697]"><img class="alignnone  wp-image-7703" alt="06SCWITH008" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH008-300x281.jpg" width="240" height="225" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH007.jpg" rel="lightbox[7697]"><img class="alignnone size-medium wp-image-7702" alt="06SCWITH007" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH007-300x148.jpg" width="300" height="148" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 5. RGB 공간에서 색의 표현</td>
</tr>
</tbody>
</table>
<p>설명이 복잡하니 좀 더 쉽게 설명해 보자. 어떤 물체의 색상이 잘 칠해졌는지 잘못 칠해 졌는지 판단하는 영상 처리 시스템을 만든다고 가정해 보자. 카메라로 물체를 촬영하여 색상 정보를 추출한 뒤 내가 원래 가지고 있는 색상과 얼마나 차이가 나는지를 어떻게 프로그램 할 것인가?</p>
<p>RGB 공간에서 프로그램 한다면 원래 알고 있는 색상의 각각 R, G, B 값과 측정한 물체의 R, G, B 값을 빼서 그 차이가 크면 원본과 차이가 많이 난다고 할 수 있을 것이다. 그런데 R 값의 차이와 G 값의 차이는 1:1 같은 의미를 가지는가? 어떤 샘플은 G와 B는 일치하는데 R 값은 차이가 Alpha 만큼 났고 또 다른 샘플은 R과 G는 일치하는데 B 값은 Alpha 만큼 났다. 그러면 이 두 샘플은 원본과 비슷한 정도로 차이가 나는 걸까? 아쉽게도 RGB 공간은 벡터 스페이스가 아니기에 이러한 뺄셈은 서로 비교가 불가하다(정확한 표현은 벡터 스페이스가 아니면 뺄셈이라는 연산이 정의가 되지 않는다). 원리가 이러한데 아무런 사전 지식 없이 색상의 차이를 RGB 공간에서 비교하겠다고 프로그래밍을 작성한다면 아무리 복잡한 알고리즘을 들이민들 해결책을 찾기란 꽤나 어려울 것이다.</p>
<p>다행히 벡터 스페이스 정의를 만족하는 CIE 색공간이 정의되어 있으며, RGB 공간을 조금은 복잡하지만 CIE 색공간으로 바꿀 수 있다. CIE 공간에서는 위에서 설명한 색상 차이를 정확하게 계산해 낼 수 있다. CIE 공간으로 바꾸는 수식이 꽤나 복잡하여 연산량이 많기에 산업체 현장에서는 CIE 공간 효과를 볼 수 있는 YUV나 YIQ 색공간에서 위와 같은 작업을 대신하기도 하지만 엄밀한 의미에서 이 공간들도 벡터 스페이스 정의를 만족시키지는 못한다.</p>
<p><strong><span style="color: #008000">영상 전송 방식</span></strong></p>
<p>앞의 글에서 영상 신호를 원거리로 전송하기 위해 특정 신호 규약으로 인코딩을 한다고 밝혔다. 일반적인 CCTV 카메라들은 국내에서는 NTSC 신호 규약으로 아날로그 방식으로 전송하고 있으며, 웹캡에 사용되는 CMOS 센서들은 ITU BT.601 또는 BT.656으로 전송한다. 영상 처리를 하려면 이러한 신호를 다시 풀어 접근이 가능한 메모리 영역에 영상을 집어 넣어야 하기 때문에 이러한 전송 방식에 따른 특장, 장단점을 잘 알고 있어야 한다.</p>
<p>아날로그 전송 방식은 국내의 경우는 거의 예외 없이 NTSC 방식을 따르므로 NTSC 신호를 디코딩 할 수 있는 장치, 즉 이미지 그래버가 필요하다. 이러한 이미지 그래버는 PC에 연결하는 방식에 따라 다시 PCI(또는 PCI Express) 방식과 USB 방식으로 나뉜다. CPU 점유율, 전송 지연 시간, 영상의 품질 등에서는 아무래도 PCI 방식이 USB 방식에 비해 낫다. 하지만 PCI 방식일 경우 부피가 큰 데스크톱 PC에만 설치가 가능하므로, 이동이 잦고 노트북이나 PCI 슬롯이 없는 환경에서는 USB 타입의 이미지 그래버가 필요하게 된다. 이러한 이미지 그래버를 사용하면 NTSC 신호로 전달되는 영상 신호를 사용자가 접근할 수 있는 영역까지 전달하는 라이브러리를 제공하므로 손쉽게 프로그래밍 할 수 있다.</p>
<p>CMOS 센서의 경우 BT.601/656 데이터 신호를 PC에서 직접 받을 수 있는 장치는 없다. 따라서 이 신호를 기존 PC가 가지고 있는 USB나 기타 인터페이스에 맞게 변형하여 전달해야 하는데, 아직 시장이 형성되지 않은 관계로 상용품은 찾기 어려우며, 주로 개발 용역 과제 형태로 진행된다. 특정 CMOS 센서를 이용해서 시스템을 구축해야 하는 경우라면 외주 용역 형태로 개발 또는 자체 개발을 해야 할 것이며, 센서 모델이 딱히 정해지지 않은 경우라면 일반 웹캠을 이용하는 것도 한 가지 방법이다.</p>
<p><span style="color: #008000"><strong>임베디드 비전 시스템</strong></span></p>
<p>1990년대까지만 해도 영상 처리는 고가의 PC에서도 실시간으로 처리하기 어려울 만큼 연산량이 많은 분야였다. 하지만 눈부시게 발전하는 반도체 기술로 인해 이제는 손바닥에 올라갈 만큼의 조그마한 임베디드 마이크로프로세서 보드들이 2000년대 중반에 나온 PC의 성능만큼을 가지게 되어 매우 복잡한 알고리즘이 아니면 이러한 임베디드 보드에서도 실시간 처리가 가능하게 되었다.</p>
<table style="border-collapse: collapse" width="600" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH009.jpg" rel="lightbox[7697]"><img class="alignnone size-medium wp-image-7704" alt="06SCWITH009" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH009-300x225.jpg" width="300" height="225" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH010.jpg" rel="lightbox[7697]"><img class="alignnone size-medium wp-image-7705" alt="06SCWITH010" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/06SCWITH010-300x225.jpg" width="300" height="225" /></a></td>
</tr>
<tr>
<td style="text-align: center" colspan="2">그림 6. 2011년 하반기 출시 예정인 Smart-I 플랫폼</td>
</tr>
</tbody>
</table>
<p>위드로봇에서는 이러한 시대의 흐름에 맞춰 Smart-I 라는 임베디드 비전 플랫폼을 만들어 출시할 계획이다. 실수 연산이 가능한 ARM11 프로세서와 CMOS 1.3M 화소의 카메라를 내장하고, PC와는 USB로 연결이 된다. 이 보드에는 OpenCV가 이식되어 있으며, PC쪽으로 영상을 USB를 통해 전송하여 PC에서 처리 결과를 바로 확인할 수 있다. 또한 PC쪽에서 작성한 알고리즘이 별다른 변경 없이 바로 Smart-I 플랫폼에서 동작할 수 있도록 환경을 구축하여 보다 편리하게 영상 처리 개발자들이 임베디드 비전 시스템을 사용할 수 있을 것이라 기대하고 있다. Smart-I 플랫폼은 2008년도에 그 원형이 개발 완료되었지만, 이러한 편리한 기능을 갖추기 위해 시간이 많이 소요되었으며, 2011년 올해 드디어 공개할 수 있을 것으로 보인다.</p>
<p><span style="color: #008000"><strong>인간의 시각 시스템과 비교</strong></span></p>
<p>마지막으로 영상 시스템은 인간의 시각 시스템과 그 구조, 구성이 매우 유사하기에 인간의 시각 시스템과 자주 비교되곤 한다. 카메라의 해상도, 즉 화소는 인간의 망막에 있는 시세포와 동일한 기능을 한다. 디지털 카메라의 성능을 비교할 때 몇 만 화소인가를 이야기하는데, 최근 시장에서 많이 판매되는 디지털 카메라의 경우는 약 천 만화소급이 많이 보인다. 그렇다면 인간의 시세포는 몇 만 화소쯤 될까? 재미있게도 1:1 비교가 조금은 힘들다. 디지털 카메라의 화소는 영상을 얻는 전체 영역에 같은 분포로 배치가 되어 있지만 인간의 경우는 그렇지 않기 때문이다. <span style="font-size: 13px;line-height: 19px">그 이유는,</span></p>
<p style="padding-left: 60px">1. 인간의 망막에는 흑백 명암만을 구별하는 간상체(Rod)와 색상을 인식하는 추상체(Cone)로 나눠져 있다.<br />
2. 추상체와 간상체의 배치가 디지털 카메라의 화소처럼 바둑판 모양으로 균일하게 배치되어 있지 않고, 망막 중심에 집중적으로 배치되어 있다.<br />
3. 일반 카메라는 렌즈와 센서가 하나지만, 인간은 두 개다.</p>
<p><span style="font-size: 13px;line-height: 19px">1번을 상세히 설명해 보면 인간의 눈에는 흑백 센서와 컬러 센서가 따로 존재한다는 뜻이 된다. 하나의 눈에 300만개 이상의 추상체가 있는 것으로 알려져 있다. 생각보다 적은 수치인데 반면 흑백 명암을 구별하는 간상체는 약 1억개 이상으로 추정된다.</span></p>
<p><span style="font-size: 13px;line-height: 19px">2번의 내용은 컬러를 인식하는 추상체의 경우 눈을 움직여 어느 한 곳을 응시할 때, 상이 맺히는 망막에 집중적으로 분포하고 그 외 지역에는 듬성듬성 배치되어 있다. 이러한 이유로 우리는 무엇인가 집중적으로 보려고 할 때, 고개와 눈동자를 돌려 관심있는 물체를 응시하는 습관이 나오게 되는 것이다.</span></p>
<p>3번 내용은 매우 복잡하다. 아직까지도 인간이 3차원 공간을 어떻게 인지하는지 전문가들 사이에서도 의견이 분분하다. 확실한 것은 하나의 2차원 이미지로는 3차원 공간에 대한 정보를 얻을 수 없기에 눈 두 개를 이용하여 사라진 3차원 공간에 대한 정보를 복원하는 것인데, 단순히 이러한 스테레오 매칭만으로는 인간의 뛰어난 인지 능력을 설명하기에는 부족하다. 최근 뇌공학자들의 집중적인 연구에 의해 밝혀진 부분은 단순히 영상이 뇌로 전달되는 경로(feed-forward path)만 있는 것이 아니라, 뇌에서 다시 되먹임 경로(feedback path)를 통해 상위 레벨의 정보가 하위단으로 내려오는 부분이 있다는 점이다. 이는 단순히 두 개의 눈으로 들어온 정보만으로 3차원 공간을 인지하는 것이 아니라, 기존 학습에 의해 인지하고 있는 정보를 추가로 이용하여 공간을 인지한다는 가설을 뒷받침하는 강력한 증거이기도 하다. 스테레오 비전 시스템은 이 주제만으로 한참 설명을 해야 하므로 다음 번 디바이스마트 매거진을 통해 소개하기로 한다.</p>
<p><strong><span style="color: #008000">마감하며</span></strong></p>
<p>영상 처리 기술을 소개한다며 정작 영상 처리 알고리즘에 대한 이야기는 한 마디도 언급이 안되었다. 이는 디바이스마트 매거진 독자층을 고려한 것인데, 현재 영상 처리 분야에서 활동하시는 분이라면 최근 이슈가 되고 있는 알고리즘의 동향(예를 들면 SIFT, SURF 등등의 특징점 추출 알고리즘)의 소개를 기대했을지 모르겠다. 하지만 위드로봇에서 공개강좌를 했을 때 접한 대다수 분들은 영상 처리에 대해 관심을 가지고 막 시작하려는 분들이 대부분이었기에, 우선 본격적인 알고리즘이나 이론을 소개하기에 앞서 영상 처리 분야가 이런 것이고 이런 부분이 중요하다는 점을 강조하고 싶었다. 다음 번 원고(스테레오 영상 및 3D Vision 기술)도 현재 작성 중인데 이 때 알고리즘과 이론들을 설명하는 것으로 이번 호를 마친다.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/7697/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
