7

Potrzebuję wyodrębnić WSZYSTKIE krawędzie ścian (łącznie z podłogami, skrzyżowaniami ścian i ścianą, przecięcia drzwi) z poniższego obrazu. Jeśli używam wykrywalnego wykrywania i transformacji hough (probabilistyczny). Daje mi wiele zbędnych i niepotrzebnych linii. Szukałem, czy uda mi się udoskonalić sprytny obraz, zanim zostanie na nim przeprowadzona transformacja.Ekstrakcja rzetelnej linii z obrazu

obrazu wejściowego Input Image

Ten Poniżej znajduje się obraz obrotny podane przez sprytny algorytm detekcji
używam parametry obrotny jako 0,20 dla min i max wartości progowej. Nie mogę użyć bardzo wysokiej wartości dla maksymalnego progu, w przeciwnym razie stracę krawędzie ściany, ale gradient będzie tam niski w porównaniu z resztą obrazu.
Normal Canny Image

Pomyślałem o zidentyfikowaniu klastra o wysokiej gęstości punktów w oknie i ustawieniu ich na zero, jeśli jest powyżej pewnego progu.

Poniżej przedstawiono ciekawy obraz uzyskany po tym. Możesz zobaczyć, że krawędzie ściany są zachowane. Modified Canny Image

Czy ktoś może zaproponować mi lepszy sposób radzenia sobie z tym problemem? Mam na myśli udoskonalenie sprytnego obrazu, aby móc zidentyfikować skupisko losowych punktów i uciec z nimi, ale ustawiając je na zero. Myślałem o sprawdzeniu punktów współliniowych w oknie, ale nie wiem, jak skuteczne byłoby to? Wszelkie komentarze byłyby mile widziane

Odpowiedz

7

Myślę, że możesz filtrować najdłuższe i prawie pionowe linie, po użyciu transformacji hough. Sprawdź to link.

SimpleCV to biblioteka skrótów obejmująca funkcje OpenCV, której nie trzeba używać. Nie sądzę, że napotkasz problemy z zaimplementowaniem algorytmu po uzyskaniu idei.

Edycja: Ok, myślałem więcej o twoim problemie. Ustawienie klastrów na zero jako etap wstępnego przetwarzania nie jest właściwie złe. Co powiesz na zwiększenie rozmiaru okna krok po kroku? Mam na myśli po uzyskaniu drugiego obrazu, zastosować inny filtr klastrowy z 2 * wielkością okna, z tym samym progiem. Myślę, że możesz tak dalej, ponieważ krawędzie ścian są trudne do zniesienia.

Innym sposobem jest użycie prostokątnego okna (szerokość> = 5 * wysokość) do filtrowania skupień, ponieważ potrzebujesz pionowych krawędzi.

Innym sposobem jest zabawa z erozją i rozszerzeniem oraz odfiltrowanie obiektów o dużej powierzchni.

Innym sposobem, sprawdź górną część obrazu, są tylko krawędzie ścian i żyrandol. Możesz wyszukiwać w poziomie dla białego wzoru, a następnie obserwować sąsiadów, aby określić długość połączonych punktów. Następnie odfiltruj dłuższe.

+0

Nie chcę nawet zgubić przecięcia między ścianą a podłogą. a algorytm powinien być czymś, co generyczne we wszystkich obrazach pokoi –

+0

dlaczego nie myślisz o prostym wykrywaniu koloru ściany? uzyskaj ścianę HSV z górnego lewego lub prawego rogu, a następnie odfiltruj piksele o różnicy odcieni> pewien próg. Wtedy filtr dolnoprzepustowy (rozmycie gaussowskie) lub rozszerzenie obrazu powinien działać dobrze. – baci

+0

nierówne na granicach = dlatego należy rozszerzyć + erodować, morfologicznie blisko. różne kolory = nie stanowi problemu, o ile wybierzesz kolor z rogu obrazu. warunki oświetleniowe = wyrównanie histogramu. To wszystko, co mam tutaj :) – baci