2011-08-16 15 views
6

Wiem, że ten problem został rozwiązany wcześniej, ale miałem duże trudności ze znalezieniem literatury opisującej algorytmy używane do przetwarzania tego rodzaju danych. Zasadniczo robię kilka odkryć krawędzi na zbiorze danych 2D. Chcę być w stanie znaleźć kilka punktów na diagramie oka (zwykle używanym do zakwalifikowania szybkich systemów komunikacyjnych), a ponieważ nie miałem doświadczenia w przetwarzaniu obrazu, staram się pisać skuteczne metody.Efektywne wykrywanie krawędzi 2D w Pythonie

Jak widać, diagramy te są tak nazywane, ponieważ przypominają ludzkie oko. Mogą one znacznie różnić się grubością, nachyleniem i szumem, w zależności od sygnału i testowanego systemu. Pomiary, które zwykle są wykonywane, to jitter (pozioma grubość obszaru przejścia) i wysokość oka (mierzone albo w określonej określonej procentowej szerokości, albo w maksymalnym możliwym punkcie). Wiem, że najlepiej można to zrobić przy przetwarzaniu obrazu, a nie w bardziej linearnym podejściu, ponieważ moje dotychczasowe próby trwają kilka sekund, aby znaleźć lewą stronę pierwszego skrzyżowania. Jakieś pomysły na to, jak powinienem to zrobić w Pythonie? Używam NumPy do wykonania niektórych operacji.

Oto niektóre example data, sformatowane jako tablica 1D z powiązanymi danymi osi X. W tym konkretnym przypadku powinien być podzielony co 666 punktów (2 * int ((1,0/2,5e9)/1,2e-12)), ponieważ szybkość sygnału wynosiła 2,5 GB/s, a czas między punktami był 1,2 ps.

Dzięki!

Example 1 Example 2

+0

Twoja pasta danych nie działa poprawnie ... – so12311

+0

Powinien być już naprawiony – bheklilr

+0

Zakładając, że masz oryginalne dane użyte do wygenerowania wykresu, być może powinieneś odnieść większy sukces, używając tych danych bezpośrednio, niż analizując renderowany wykres. –

Odpowiedz

3

Czy próbowałeś OpenCV (Otwórz Computer Vision)? Jest szeroko stosowany i ma powiązanie w Pythonie.

Nie być PITA, ale czy jesteś pewnie nie byłbyś lepszy z podejściem numerycznym? Wszystkie narzędzia, które widziałem do analizy diagramów oka, idą drogą numeryczną; Nie widziałem ani jednego, który analizowałby sam obraz.

Mówisz, że twój algorytm jest boleśnie wolny w tym zestawie danych - moim następnym pytaniem byłaby przyczyna. Czy patrzysz na oversampled zestaw danych? (Zgaduję, że tak.) A jeśli tak, czy próbowałeś najpierw zdziesiątkować sygnał? To by przynajmniej dało ci mniej próbek do przebrnięcia przez twój algorytm.

+0

Muszę mieć jak najbardziej dokładny pomiar. Jitter musi być w granicach 1 ps (aktualnie interpoluję, aby uzyskać dokładniejszy, nie tylko najbliższy dyskretny punkt), a ponieważ są to faktycznie symulowane diagramy oka, ilość danych, które muszę wprowadzić, jest dość duża, aby aby uzyskać dokładny pomiar. – bheklilr

+0

Należy zauważyć, że jeśli patrzysz na zestaw próbek z sygnału analogowego, który był już konwertowany A/D, interpolacja między próbkami nie spowoduje, że pomiary będą dokładniejsze. Dlatego w pierwszej kolejności przeskalujemy sygnały. Ponadto 300 000 punktów danych nie jest tak wiele w świecie DSP. Jest to odpowiednik około siedmiu sekund dźwięku próbkowanego z częstotliwością 44,1 kHz. –

+0

To dla mnie mniej niż nanosekunda. Chociaż nie jest to dużo w świecie DSP, to wiele danych musi być przetwarzanych. Wierzę, że jeśli uda mi się szybko przekonwertować te dane na obraz w pamięci (zostały one wygenerowane za pomocą matplotlib, czyli znacznie wolniej), to powinno być stosunkowo łatwo sobie z tym poradzić. – bheklilr

1

po prostu idąc swoją trasą przez chwilę, jeśli czytasz te obrazy w pamięci, jak to jest, czy nie byłoby całkiem łatwo zrobić dwa wypełnienia powodziowe (od środka i środka lewej krawędzi), które obejmują wszystkie " białe "dane. jeśli procedura wypełniania zapisuje maksymalną i minimalną wysokość w każdej kolumnie i maksymalny zakres poziomy, wtedy masz wszystko, czego potrzebujesz.

innymi słowy, myślę, że nad tym się zastanawiasz. Wykrywanie krawędzi jest używane w złożonych scenach "naturalnych", gdy krawędzie są niejasne. tutaj krawędzie są tak całkowicie oczywiste, że nie trzeba ich ulepszać.

Powiązane problemy