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 obliczenia
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.
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ę.
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.
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ść.
źródło
Odpowiedzi:
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ć.
źródło
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.
źródło