2010-02-11 10 views

Odpowiedz

6

Proszę bardzo. Zakładam, że masz przybornik obrazu, ponieważ jeśli nie, to prawdopodobnie nie powinieneś próbować robić tego rodzaju rzeczy. Jednak wszystkie te funkcje mogą być realizowane za pomocą nawojów, które uważam. Zrobiłem ten proces na obrazie, który przedstawiłeś powyżej i uzyskałem punkt (139,286), gdzie 138 to rząd, a 268 to kolumna.

1.Convert obrazu do obrazu binarnego:

bw = bw2im(img, .25); 

gdzie img jest oryginalny obraz. W zależności od obrazu konieczne może być dostosowanie drugich parametrów (które wahają się od 0 do 1), aby uzyskać tylko krzyż. Nie przejmuj się, że krzyż nie jest w pełni połączony, ponieważ naprawimy to w następnym kroku.

2. Rozwiń obraz, aby dołączyć do części. Musiałem to zrobić dwa razy, ponieważ musiałem ustawić próg tak niski na konwersję obrazu binarnego (niektóre części obrazu były dość ciemne). Dilation w zasadzie tylko dodaje piksele wokół istniejących białych pikseli (będę również odwracał obraz binarny, kiedy wysyłam go do bwmorpha, ponieważ operacje są wykonywane na białych pikselach, które mają wartość 1).

bw2 = bwmorph(~bw, 'dilate', 2); 

Ostatni parametr określa ile razy wykonać operację dylatacji.

3. Zmniejsz obraz do punktu.

bw3 = bwmorph(bw2, 'shrink',Inf); 

Ponownie, ostatni parametr określa ile razy wykonać operację. W tym przypadku umieszczam Inf, który kurczy się, dopóki nie jest tylko jeden piksel, który jest biały (innymi słowy, a 1).

4.Find piksela, który jest jeszcze 1.

[i,j] = find(bw3); 

tutaj, jest hałas i j to kolumna piksela BW3 BW3 taki sposób, że (i, j) jest równe 1 Wszystkie pozostałe piksele powinny mieć wartość 0 w bw3.

Może być na to inny sposób z bwmorph, ale myślę, że ten sposób działa całkiem dobrze. Być może będziesz musiał dostosować to również w zależności od obrazu. W razie potrzeby mogę dołączyć obrazy każdego kroku.

+0

Jeśli interesuje Cię dokładność podpikselowa do określenia środka, będzie to tylko pierwszy krok. Korzystając ze zdefiniowanego środka, możesz zbierać xiy dla dwóch linii. Teraz możesz użyć polyfitu do obliczenia nachylenia i przecięcia każdej linii. Z tego możesz obliczyć skrzyżowanie. – sjchoi

+0

Czasami dostaję więcej niż piksel. Czy istnieje sposób na zmniejszenie liczby, dopóki nie otrzymam 1 wyniku? Dzięki. – Veronica

+0

@Veronica czy pozostały jeszcze dwa piksele lub więcej niż dwa piksele? –

0

Zacznę od użycia mapy odwzorowania skali szarości. Najciemniejsze punkty znajdują się na krzyżu, więc rozróżnianie najwyższych wartości jest punktem wyjścia. Po dyskryminacji ustaw wszystkie dolne punkty na białe i pozostaw resztę w stanie, w jakim się znajdują. Pozwoli to zmaksymalizować kontrast między punktami na krzyżu i punktami na obrazie. Następnie należy wymyślić filtr do określenia pozycji z najwyższymi wartościami średnimi. Przejdę przez cały obraz z tablicą NxM i weźmie średnią wartość w punkcie środkowym. Utwórz nowy zestaw tych środków i powinieneś mieć najwyższy środek na skrzyżowaniu. Jestem ciekaw, jak ktoś może to wypróbować!

+0

Stepowanie w macierzy NxM ... odnosi się do splotu za pomocą elementu strukturalnego? –

+0

Technicznie tak. Jest to szybka metoda kodująca ekstrakcję cech w przypadku, gdy istnieje punkt orientacyjny o ekstremalnym znaczeniu, w tym przypadku czarny X. Miałem problem z tym kilka lat temu. Weryfikacji położenia skanów TK, metalowej kulki umieszczonej w pewnych punktach, która powoduje smugi w zrekonstruowanym obrazie. Zlokalizowanie ich pozycji wystarczy, aby znaleźć ekstremalną wartość. Zamiast prostokąta można użyć okręgu do określenia zarówno położenia, jak i skali obrazu. – Jeff

1

Myślę, że istnieje o wiele prostszy sposób rozwiązania tego problemu. Linie tworzące poprzeczne włosy są jednakowej długości. Dlatego też będzie symetryczny we wszystkich orientacjach. Więc jeśli zrobimy prosty skan liniowy w poziomie i w pionie, aby znaleźć końce linii tworzących krzyżówkę. mediana tych wartości da współrzędne X i Y ośrodka.Prosta geometria.

+0

Myślę, że jest to dobry pomysł, ale najpierw należy przekonwertować go na mapę binarną. Po konwersji można to zrobić za pomocą pojedynczego przejścia przez cały wiersz obrazu po wierszu. Po prostu śledź najdalsze, niższe, lewe i prawe punkty, które mają 1 w nich. Następnie na końcu znajdź średnią z czterech punktów. Dobry pomysł. –

1

Po prostu uwielbiam te dyskusje, jak znaleźć coś bez zdefiniowania tego, co to jest! Ale jeśli muszę zgadywać, proponuję center of mass oryginalnego obrazu w skali szarości.

+0

Uważam, że PO oznacza punkt, w którym spotykają się dwie linie krzyża. –

1

Co z tym;

a) Konwertuj na binarny, aby algorytm był szybszy.

b) przeprowadza się znaleźć na otrzymanej tablicy

c) wyboru elementu, który ma albo najniższym/najwyższy wskaźnik wiersz/kolumna (trzeba cztery punkty wyboru następnie

d) Teraz należy poszukujący sąsiedzi

  • mają globalny kryteriów wyszukiwania, które jeśli nie powoduje więcej niż kilka iteracji za punkt zaznaczony jest fałszywy i wybrać inny skrajny punkt

e) przechodząc wzdłuż sąsiednich punktów, skończysz w punkcie, w którym masz trzy możliwe sąsiednie miejsca. To jest twoje skrzyżowanie

Powiązane problemy