[Talk-cz] Tracer - nastavení

Jan Bilak jan.bilak.osm na gmail.com
Pondělí Březen 1 18:12:25 UTC 2010


Ahoj.

SmallHoleRemover je spíše ukázkový filtr, než filtr, který by to
opravdu dobře řešil. V rámci úpravy traceserveru tak, aby byl
konfigovatelný, jsem se rozhodl vytvořit dva typy filtrů. Jeden typ
umí pozměnit černobílou bitmapu (a tedy např. lze pomocí takového typu
filtru zacelovat díry). Druhý typ filtru pak slouží k redukci
(případně i přidání) bodů na obrysu trasovaného domu.

Filtrů druhého typu existuje v programu několik a tvoří to podstatnou
část traceserveru. Na vstupu je množina bodů tvořící vnější obrys
oblasti vyplnění floodfillem.   Pak tato množina projde sadou filtrů a
výsledek posledního filtru je už vlastně konečný výsledek (jen se
přepočtou souřadnice apod.). Přitom typy filtrů, jejich pořadí a
nastavení je výsledek nějakých pokusů zejména na jednom typy mapového
podkladu. Věřím, že lze zde dosáhnout i lepších výsledků - zejména v
jiných oblastech mapy, než kde jsem to zkoušel.

Filtr prvního typu ale žádný neexistoval a SmallHoleRemover je vlastně
takový ukázkový filtr (zacelí opravdu jen malé díry a tak jeho
praktický použití je dosti omezené, ale zase to názorná ukázka, jak
takový filtr vytvořit).

Konfigurací pak lze ovlivnit, které filtry se použijí, v jakém pořadí
a s jakým nastavením filtru (pokud filtr nějaké nastavení podporuje).

Nyní si tedy každý (.NET programátor) může vytvářet vlastní filtry a
konfiguraci podle oblasti, kterou trasuje nebo osobních preferencí.

Shrnuto: Tato verze si nekladla za cíl lepší rozpoznávání nebo opravu
nějakých chyb. Cílem bylo zavedení konfigurovatelnosti, kterou ocení
třeba někteří vývojáři nebo pokročilejší uživatelé.

Honza


2010/3/1 Petr Dlouhý <petr.dlouhy na email.cz>:
> Ahoj,
>
> tím funguje lépe jsem myslel v jiných směrech - například často správně
> ignoruje nesouvisející čáry zasahující do trasovaného objektu.
>
> Myslel jsem, že SmallHoleRemover má problém tenkých čar řešit.
>
> Mimochodem: v Traceru jsou stále některé otravné chyby z dřívějška - občas
> trasovaná oblast vůbec neobsahuje bod, na který jsem kliknul; někdy
> "vystřelují" body z objektu daleko za jeho hranici; občas hlásí
> "IndexOutOfRangeException".
>
> On Mon, 01 Mar 2010 18:13:33 +0100, Jan Bilak <jan.bilak.osm na gmail.com>
> wrote:
>
>> Ahoj,
>>
>> to se divím, že funguje o dost lépe, protože tam prakticky žádné změny
>> v tomto směru nejsou. Změny se týkají možnosti nastavení a pluginů
>> (filtrů). Pravda je, že jeden ukázkový primitivní filtr
>> SmallHoleRemover, jehož zdroják jsem zde posílal, zaceluje malé díry a
>> tak může někde přinést lepší výsledky (někde zase horší, pokud jsou
>> čáry už tak dost tlusté).
>>
>> Ten plugin nemá žádné nastavení. Když se koukneš do toho zdrojáku (je
>> velmi krátký a zřejmý), tak zjistíš, že natvrdo obarvuje bílé body,
>> které na jedné ze 4 základních stran sousedí s černým pixelem. Stačí
>> tuto podmínku upravit nebo filtr udělat konfigurovatelný... a může se
>> to chovat jinak. Nebo prostě udělat jiný filtr ... tvorba filtru je
>> jednoduchá věc, stačí referencovat jednu Class Library a implementovat
>> jednoduché rozlišení. Výsledné DLL dát do adresáře plugins a přidat
>> filtr v konfiguráku na vhodné místo
>>
>> Případně "hrubou silou" lze v konfiguráku aplikovat stejný filtr třeba
>> 2x za sebou. Tím se také zacelí trochu větší díry (ale není to moc
>> pěkné řešení).
>>
>>   <bitmapFilters>
>>     <filter name="SmallHoleRemover" />
>>     <filter name="SmallHoleRemover" />
>>   </bitmapFilters>
>>
>> Honza
>>
>>
>> 2010/3/1 Petr Dlouhý <petr.dlouhy na email.cz>:
>>> Ahoj,
>>>
>>> zkoušel jsem tu novou verzi, která opravdu funguje zase o dost lépe.
>>> Zdá se ale, že to na tenkých čarách stále moc nefunguje - většinou to
>>> stejně projde nějakou mezerou.
>>> Dá se někde nastavit, jak velkou mezeru to zacelí?
>>>
>>> On Mon, 01 Mar 2010 13:32:21 +0100, Jan Bilak <jan.bilak.osm na gmail.com>
>>> wrote:
>>>
>>>> Zdroják SmallHoleRemover filtru vypadá takto:
>>>>
>>>> using System;
>>>> using System.Collections.Generic;
>>>> using System.Linq;
>>>> using System.Text;
>>>> using Osm.Kn.Trace.Server.Trace.Interfaces;
>>>>
>>>> namespace SmallHoleRemover
>>>> {
>>>>     [BitmapFilter("SmallHoleRemover")]
>>>>     public class SmallHoleRemover : IBitmapFilter
>>>>     {
>>>>         const byte BACKGROUND = 0;
>>>>         const byte PEN = 1;
>>>>         const byte TEMP = 2;
>>>>
>>>>         #region IBitmapFilter Members
>>>>
>>>>         public byte[][] Filter(byte[][] bitmap)
>>>>         {
>>>>             int h = bitmap.Length;
>>>>             int w = bitmap[0].Length;
>>>>
>>>>             for (int y = 1; y < h - 1; y++)
>>>>             {
>>>>                 for (int x = 1; x < w - 1; x++)
>>>>                 {
>>>>                     if ((bitmap[y][x] == PEN) &&
>>>>                         (bitmap[y][x - 1] != BACKGROUND || bitmap[y][x
>>>> + 1] != BACKGROUND ||
>>>>                         bitmap[y - 1][x] != BACKGROUND || bitmap[y +
>>>> 1][x] != BACKGROUND))
>>>>                         bitmap[y][x] = TEMP;
>>>>                 }
>>>>             }
>>>>             for (int y = 1; y < h - 1; y++)
>>>>             {
>>>>                 for (int x = 1; x < w - 1; x++)
>>>>                 {
>>>>                     if (bitmap[y][x] == TEMP)
>>>>                         bitmap[y][x] = PEN;
>>>>                 }
>>>>             }
>>>>
>>>>             return bitmap;
>>>>         }
>>>>
>>>>         #endregion
>>>>
>>>>         #region IConfigurable Members
>>>>
>>>>         public void Init(IDictionary<string, string> confValues)
>>>>         {
>>>>         }
>>>>
>>>>         #endregion
>>>>     }
>>>> }
>>>>
>>>> _______________________________________________
>>>> Talk-cz mailing list
>>>> Talk-cz na openstreetmap.org
>>>> http://lists.openstreetmap.org/listinfo/talk-cz
>>>
>>>
>>> --
>>> Petr Dlouhý
>>>
>>> _______________________________________________
>>> Talk-cz mailing list
>>> Talk-cz na openstreetmap.org
>>> http://lists.openstreetmap.org/listinfo/talk-cz
>>>
>>
>> _______________________________________________
>> Talk-cz mailing list
>> Talk-cz na openstreetmap.org
>> http://lists.openstreetmap.org/listinfo/talk-cz
>
>
> --
> Petr Dlouhý
>
> _______________________________________________
> Talk-cz mailing list
> Talk-cz na openstreetmap.org
> http://lists.openstreetmap.org/listinfo/talk-cz
>




Další informace o konferenci talk-cz