Project

General

Profile

<h1>Switcheable Detection</h1>

<p>Koncept:</p>

<ol>
<li>Při vytv&aacute;řen&iacute; Enginu je možn&eacute; zvolit jednu nebo v&iacute;ce detekčn&iacute;ch metod.
<ol>
<li>&nbsp;Způsob zad&aacute;n&iacute; jedn&eacute; detekčn&iacute; metody
<div style="margin-left:1.75em;">
<pre>
Creator::DesktopArEngineDirector* engineCreator = new Creator::DesktopArEngineDirector(Creator::ConfigFileType_PlainText);

engineCreator-&gt;setDetectionMethod(&quot;/etc/settings.golay&quot;);
engineCreator-&gt;setDetectionMethodMarkerDefinition(&quot;/etc/markers&quot;)

Creator::ArEngineInterface* arEngine
= engineCreator-&gt;createArEngine();
delete engineCreator; // Uvolněn&iacute; engineCreatoru z paměti.

arEngine-&gt;start();

</pre>
</div>
</li>
<li>Pokud je konfigurace složitěj&scaron;&iacute;, např&iacute;klad v př&iacute;padě aplikace v&iacute;ce detekčn&iacute;ch metod, je nutn&eacute; nejprve definovat definovat metody detekčn&iacute; strategie a pot&eacute; každou detekčn&iacute; metodu zvl&aacute;&scaron;ť. Za t&iacute;mto &uacute;čelem vrac&iacute; metoda&nbsp;<tt>setDetectionMethod</tt>&nbsp;objekt<tt>DetectionMethodBuilder</tt>, v př&iacute;padě přep&iacute;n&aacute;n&iacute; detekč&iacute; metod, se jedn&aacute; o potomka&nbsp;<tt>SwitcheableDetectionMethodBuilder</tt>.
<div style="margin-left:1.75em;">
<pre>
Creator::DesktopArEngineDirector* engineCreator = new Creator::DesktopArEngineDirector(Creator::ConfigFileType_PlainText);

// Nejprve nastav&iacute;m kořenov&yacute; detection builder.
SwitcheableDetectionMethodBuilder* detectionMethodBuilder = (SwitcheableDetectionMethodBuilder) engineCreator-&gt;setDetectionMethod(&quot;/etc/switchMethodSettings&quot;);

// Pot&eacute; přid&aacute;m metody, kter&eacute; obsahuje.
detectionMethodBuilder-&gt;addDetectionMethod(&quot;/etc/settings.golay&quot;);
detectionMethodBuilder-&gt;addDetectionMethod(&quot;/etc/settings.surf&quot;);

engineCreator-&gt;setDetectionMethodMarkerDefinition(&quot;/etc/markers&quot;)

Creator::ArEngineInterface* arEngine
= engineCreator-&gt;createArEngine();
delete engineCreator; // Uvolněn&iacute; engineCreatoru z paměti.

arEngine-&gt;start();

</pre>
</div>
</li>
</ol>
</li>
</ol>

<blockquote>
<blockquote>
<p>Metody&nbsp;<tt>addDetectionMethod</tt>&nbsp;opět vracej&iacute; př&iacute;slu&scaron;n&yacute; builder. Je tedy teoreticky možn&eacute; takto vytvořit stromovou detekčn&iacute; struktu, kter&aacute; je schopn&aacute; pružně reagovat na změny v obraze.</p>
</blockquote>
</blockquote>

<ol>
<li>Detekčn&iacute; strategie budou implementov&aacute;ny jako potomci abstraktn&iacute;ho objektu&nbsp;<tt>AbstractSwitchableMarkerDetection</tt>.<br />
Li&scaron;&iacute; se metodou jako vyb&iacute;raj&iacute; a použ&iacute;vaj&iacute; zvolen&eacute; detekčn&iacute; metody.
<ol>
<li><tt>PrioritySwitchMarkerDetection</tt>&nbsp;tato tř&iacute;da použ&iacute;v&aacute; detekčn&iacute; metody podle pořad&iacute;, v jak&eacute;m byli nadefinov&aacute;ny. Nejprve použije vždy prvn&iacute; metodu, pokud ta selže (nenajde marker) použije metodu dal&scaron;&iacute;.</li>
<li><tt>FastSwitchMarkerDetection</tt>&nbsp;tato tř&iacute;da zrychluje detekci. Nejprve se pokus&iacute; v naj&iacute;t markery v okol&iacute; dř&iacute;ve nalezen&yacute;ch, pokud neuspěje (nebo při zpracov&aacute;n&iacute; každ&eacute;ho X-t&eacute;ho sn&iacute;mku) použije druhou metodu na prohled&aacute;n&iacute; cel&eacute;ho obrazu.</li>
<li><tt>PrecisionMarkerDetection</tt>&nbsp;Metoda použ&iacute;v&aacute; v&scaron;echny detekčn&iacute; metody. Prvn&iacute; metoda prohled&aacute;v&aacute; cel&yacute; obraz, každ&aacute; dal&scaron;&iacute; prohled&aacute;v&aacute; pouze okol&iacute; marketu, kter&aacute; na&scaron;la předchoz&iacute; metoda. C&iacute;lem je maximalizovat přesnost nalezen&eacute; pozice a přitom minimalizovat čas.</li>
</ol>
</li>
</ol>