Śledź Isoline z drogiej funkcji 2D


10

Mam problem podobny do sformułowania do tego postu, z kilkoma znaczącymi różnicami:

Jakie są proste metody adaptacyjnego próbkowania funkcji 2D?

Jak w tym poście:

  • Mam a ocena tej funkcji jest dość droga do obliczeniafa(x,y)

W przeciwieństwie do tego postu:

  • Nie interesuje mnie wartość funkcji dokładnie wszędzie, ale tylko znalezienie jednego izokonturu funkcji.

  • Potrafię poczynić istotne twierdzenia na temat autokorelacji funkcji, a co za tym idzie skali gładkości.

Czy istnieje inteligentny sposób, aby przejść / wypróbować tę funkcję i znaleźć ten kontur?

Więcej informacji

Funkcja polega na obliczeniu Cech Haralicka na pikseli otaczających punkt i miękkiej klasyfikacji według pewnego rodzaju klasyfikatora / regresora. Wynikiem tego jest liczba zmiennoprzecinkowa wskazująca, do której tekstury / materiału należy dany punkt. Skalowanie tej liczby można oszacować prawdopodobieństwami klasowymi (SoftSVM lub metody statystyczne itp.) Lub czymś naprawdę prostym, jak wynik regresji liniowej / logistycznej. Klasyfikacja / regresja jest dokładna i tania w porównaniu do czasu potrzebnego na wyodrębnienie funkcji z obrazu.N.

Statystyka otaczająca oznacza, że ​​okno zazwyczaj pobiera próbki pokrywających się regionów i jako taka istnieje znacząca korelacja między pobliskimi próbkami. (Coś, do czego mogę podejść nawet numerycznie / symbolicznie) W konsekwencji można to uznać za bardziej złożoną funkcję f ( x , y , N ), gdzie większe N da oszacowanie bardziej związane z otoczeniem (silnie skorelowane), a mniejsze N da bardziej zmienną, ale bardziej lokalną ocenę. N.fa(x,y,N.)N.N.

Rzeczy, które próbowałem:

  • Brute Computation - Działa dobrze. 95% poprawne segmentacji przy stałym . Rezultaty wyglądają fantastycznie po obrysowaniu dowolną standardową metodą. To trwa wiecznie . Mogę uprościć funkcje obliczone na podstawie próbki, ale idealnie chcę tego uniknąć, aby utrzymać ogólny kod dla obrazów z teksturami, których różnice pojawiają się w różnych częściach przestrzeni funkcji. N.

  • Dumb Stepping - Wykonaj „piksel” krokowy w jednym pikselu w każdym kierunku i wybierz kierunek ruchu w oparciu o bliskość wartości izo-linii. Wciąż dość powolny i zignoruje rozwidlenie izoliny. Ponadto w obszarach o płaskim gradiencie „błądzi” lub podwoi się.

Myślę, że chcę zrobić coś podobnego do podsekcji zaproponowanej w pierwszym łączu, ale przyciętej dla pudełek, które ograniczają interesującą izolinę. Wydaje mi się, że powinienem być w stanie również wykorzystać , ale nie jestem pewien, jak do tego podejść. N.


Mam dokładnie ten sam problem, z tym wyjątkiem, że jest to funkcja prawdopodobieństwa, którą chcę obrysować, i jest droga, ponieważ w każdym punkcie muszę wykonać minimalizację. Czy poczyniłeś jakieś postępy i / lub czy możesz wskazać, w jaki sposób ostatecznie to zrobiłeś?
adavid

Właśnie sprawdziłem rozwiązanie, na którym się skupiłem. (patrz poniżej)
meawoppl,

Odpowiedzi:


4

W grafice komputerowej jest artykuł o nazwie Proviable Good Sampling and Meshing of Surfaces , który polega na dostarczeniu wyroczni, która określa wszystkie przecięcia izoliny z danym segmentem linii. Dzięki temu pobiera próbki wszystkich konturów, zakładając, że możesz podać lokalną skalę cech (coś w rodzaju maksymalnej lokalnej krzywizny) i początkowy zestaw segmentów linii, który przecina wszystkie kontury. Nie jest to najprostsza rzecz do wdrożenia, ponieważ polega ona na obliczeniu triangulacji Delaunaya, ale jest zaimplementowana w 3D w CGAL . Jest znacznie prostszy w 2D, ponieważ istnieje dobre oprogramowanie do triangulacji, takie jak Triangle . W pewnym sensie jest to prawie najlepsze, co możesz zrobić.


Bardzo podoba mi się ten preparat, ponieważ logicznie rozciąga się również na 3d dość czysto. Muszę to sformułować w Pythonie, więc mam już dostęp do owijania Delauny qhull, więc nie jest to ogromny problem. Zobaczę, czy poprawnie podsumuję: - Zrób próbkę do nasion. - Próbki triangulacyjne. - Dla wszystkich krawędzi obejmujących izolinę powyżej pewnej długości: obliczyć przecięcia izolacji z krawędzią - wszystkie obliczone do próbek i powtórzyć od etapu triangulacji?
meawoppl,

@meawoppl: Nie wdrożyłem ani nie użyłem tego algorytmu (jeszcze!), ale brzmi to dobrze.
Victor Liu

Zamierzam to dziś wyczyścić i opublikować kilka wyników!
meawoppl

Przepraszam za opóźnienie. Ta metoda działa naprawdę dobrze w przypadku mojego zestawu danych. Zasadniczo, zaszczepiam ją zwykłą siatką, aby rozpocząć próbkę, a następnie trianguluję, dzielę krawędzie przecinające izo-kontur, powtórz. Trudno jest wyrazić wymóg „najlepszej cechy”, a zaletą jest losowe wstępne próbkowanie w porównaniu z normalnym, ponieważ diagonalna izolatka zajmuje nieco więcej niż ta, która podąża za próbami najmu. Skończyło się na tym, że pozwoliłem mu zająć najwyżej 5 podań, a to zadziałało jako bardzo proste zatrzymanie krytyki. Wooo> 1K
meawoppl 10.10.12

1

Możesz spróbować zastosować podstawowe funkcje metody Efficient Global Reliability Analysis (EGRA). Ta metoda została opracowana w celu wydajnego obliczenia prawdopodobieństwa awarii, ale jej wnętrzności koncentrują się na robieniu tego, co opisujesz - stworzeniu modelu, który jest dokładny tylko w pobliżu określonego konturu.

To może być ciekawy punkt wyjścia, ale nie jestem pewien, czy to rozwiąże twój problem. Zależy to bardzo od kształtu twojej funkcji. Jeśli jest to coś, co można dobrze aproksymować za pomocą modelu kriging , to powinno działać dobrze. Te modele są dość elastyczne, ale generalnie wymagają płynnej funkcji bazowej. W przeszłości próbowałem zastosować EGRA do aplikacji do segmentacji obrazów, ale odniosłem mały sukces, ponieważ po prostu nie ma sensu dopasowywać modelu zastępczego do czegoś, co tak naprawdę nie jest zdefiniowane przez związek funkcjonalny. Nadal wspominam o tym, jako coś, co możesz chcieć sprawdzić, na wypadek gdyby Twoja aplikacja była inna niż sobie wyobrażam.

Jeśli nie rozmawiałem z tobą, możesz przeczytać więcej o EGRA tutaj (link PDF) i tutaj , a istnieje projekt w Sandak's DAKOTA - o ile mi wiadomo, jedyna dostępna implementacja EGRA typu open source.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.