[Obraz] Wykrywanie krawedzi

0

Znacie jakies ciekawe algorytmy to wykrywania krawedzi na podanym obrazku ?

Srednio mi to wychodzi :/ sa duze szumy, niektore krawedzie gubi, a kropkwana powierzchnia to jedna wielka plama :(

Sami zobaczcie:

http://xirx.net/0.jpg

http://xirx.net/1.jpg

http://xirx.net/2.jpg

http://xirx.net/3.jpg

http://xirx.net/4.jpg

0

na chwile obecna to ja widze ze mozna jeszcze szukac krawedzi w kazdym mozliwym kierunku jest ich 4+4 czyli 8 :] pozniej sprawdzasz czy wartosc rgb nie rozni sie az tak mocno od testowanego piksela ale krawedzie beda duze....

0

Moim celem jest uzyskanie ladnych krawedzi najwiekszych obiektow, tzn jak tu na zdjeciu co dalem to takim obiektem jest monitor, myszka itp

A jak bede miec jakies w miare krawedzie to chce je przeksztalcic w wektory a pozniej znalezc punkty orientacyjne i zrobic z tego sterowizje :) tak jakos sobie to obmyslilem :)

Najlepiej jak by byly prosto zrobione krawedzie, tzn tu myszka tam monitor bez zbetnych obiektow posrednich :P tak jak czlowiek widzi kiedy patrzy np na telewizor lub budynek :)

Aktualnie 2 zdjecia przetwarza 0.72 sekundy (640x480x24) ale kod jest niezbyt zoptymalizowany i zrobiony tak by latwo mozna bylo cos zmienic itd :)

0

Filtr wykrywający krawędzie to:
1 1 1
1 -8 1
1 1 1

Zrób splot tej macierzy z obrazkiem i gotowe.

Można też 2 sploty korzystając z pochodnych (właściwie to ilorazów różnicowych) - jeden w pionie, 2 w poziomie. np [-1 0 1]

0
StereoBanana napisał(a)

Najlepiej jak by byly prosto zrobione krawedzie, tzn tu myszka tam monitor bez zbetnych obiektow posrednich :P tak jak czlowiek widzi kiedy patrzy np na telewizor lub budynek :)

A wiesz, że nikomu nie udało się uzyskać sieci algorytmów o możliwości analizy dźwięku lub chociaż przypominających ludzkie postrzeganie? Proponowałbym algorytmy genetyczne albo sieci neuronowe. A najlepiej to sprytne połączenie obu. Gdzieś chyba widziałem sieci /z odpowiednimi danymi/ do wykrywania krawędzi, pogooglaj za tym. Oczywiście rewelacyjne to i tak nie jest - człowiek widzi lepiej :>

0

Jak po angielsku brzmi "wykrywanie krawedzi" ? w slowniku jest na pewno ale nieraz to brzmi inaczej niz powinno :P

A mozecie opisac troche bardziej te tablice? Ja bez zadnych materialow to robie :P od tygodnia :) ale bynajmniej ladnie wyglada jak na razie :P

0

Edge detection tak przynajmniej jest w IrfanView nazwany filtr który to robi.

0

Spróbuj tych splotów o których pisałem. Tak w uproszczeniu to polega na tym, że dla każdego piksela wyliczasz sumę 8 pikseli ościennych i odejmujesz ośmiokrotną wartość danego piksela. Jest to metoda, która pisze się szybko i daje w miarę dobre rezultaty.

Ciekawszy jest np. Sobel. Ogólnie masz 2 kierunki - poziomy i pionowy. W jednym z nich się rozmywa a w drugim wykrywa krawędzie.
To wykrywanie można łatwo zrobić filtrem [-1 0 1] (tzn. idziesz po pikselach od lewej do prawej i dajesz im nowa wartość równą -1 wartość poprzedniego + 1 wartość następnego). Natomiast co do rozmycia: najlepsze uzyskasz oczywiście gaussianem, ale filtr dwumianowy (łatwiejszy) nieźle go przybliża (filtr to np. (1/8) [1 3 3 1])
rozumiemy to jako dla piksela weź 1 zapoprzedni + 3 poprzedni + 3 *następny + 1 razy zanastępny i całość normalizujesz (mnożysz przez 1 / sumę 1+ 3 + 3 + 1 czyli 1/8)

[-1 0 1] bierze się stąd, że jest to iloraz różnicowy (przybliża pochodną). Pochodna opisuje szybkość zmian - szybkie to oczywiście krawędź.

Dobrym filtrem jest też LoG i DoG. (Drugi jest lepszy - bardziej izotropowy). DoG polega na tym, że robisz dla obrazka 2 rozmyte dwumianowymi (innymi) i je od siebie odejmujesz. Dla przykładu:
jak rozmyjesz [1 4 6 4 1] to powstanie obraz H1, rozmyj potem początkowy obraz filtrem [1 2 1] i powstaje obraz H2. Teraz je od siebie odejmujesz (pierwszy od drugiego) - zostają krawędzie.
Zwróć uwagę, że potrzebujesz obrazu jako wektora (ciąg), nie macierzy (inaczej musisz zawsze w 2 kierunkach robić, lub tworzyć splot z filtrem z macierzy (jest to kosztowne)).

To tak w wielkim skrócie i uproszczeniu. Myślę, że najlepszym źródłem wiedzy będą pozycje:
Digital image processing - Bernd Jahne
Digital image processing 3rd edition - Wiley

Podpowiem, że w gimpie jest taka opcja jak macierz przekształcenia - tam wystarczy wpisać te macierze/wektory z filtrami i całość się "sama" wykona ;-)

0

Pocwiczylem troche z algorytmami i wyszlo mi takie cos:

ramka 1px : http://xirx.net/5.jpg

ramka 2px : http://xirx.net/6.jpg

Ten maly szum mozna latwo usunac :) ale martwi mnie cos innego. Mianowicie jak mamy myszke to nie wykrywa jej calej krawedzi :(

zdjecie z zaznaczeniem : http://xirx.net/7.jpg

Jak takie cos mozna usunac?

Znacie jakis fajny algorytm ktory na podstawie jasnosci zdjecia wyliczy jaka powinna byc tolerancja do wykrywania krawedzi? Aktualnie mam 150 na sztywno ale np przy zdjeciach "wojskowych" jest jedna wielka plama, ale raczej mi chodzi o wykrywanie krawedzi wokol nas :P np przez robota itp

Obliczam roznice miedzy skladowymi lokalnego piksela a jego sasiadami i tak jakos ladnie to dziala jak na razie :) moze cos bardziej efektywnego ?

EDIT--------------------

Mam jeszcze ladniejszy algorytm :)

Porownujemy 8 pikseli i sumujemy ich roznice w barwach ze srodkowym i zapisujemy "moc" piksela wzorem:

krawedz = (suma suma suma) / (256 * 256)

proste jak budowa cepa ale dziala xD

O to obrazek: http://xirx.net/8.jpg

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0