2012-10-31 22 views
5

Mam zestaw obrazów motyla do szkolenia mojego systemu do segmentowania motyla z danego obrazu wejściowego. W tym celu chcę wyodrębnić funkcje takie jak krawędzie, rogi, granice regionu, lokalna maksymalna/minimalna intensywność itp.Ekstrakcja cech dla obrazów motyli

Znalazłem wiele metod wyodrębniania cech, takich jak wykrywanie narożników Harris, SIFT, ale nie działały one dobrze, gdy tło obrazu miało ten sam kolor, co kolor motyla/koloru obramowania.

Czy ktoś mógłby powiedzieć, czy istnieje dobra metoda wyodrębniania cech, która sprawdza się w przypadku segmentacji motyli? Używam implementacji OpenCV w Pythonie.

+1

zdjęcia przykładowe pomogłyby dużo – Hammer

+0

Hi @Hammer użyłem zestawu danych z Leeds' (http://goo.gl/YYRcn) – freax

Odpowiedz

2

Czy chcesz napisać własną logikę przetwarzania obrazu?

Najlepszą opcją będzie prawdopodobnie zoptymalizowanie segmentacji/wyodrębniania funkcji dla danego problemu, zamiast korzystania z poprzednich implementacji, takich jak opencv, przeznaczonych do bardziej ogólnych przypadków użycia.

Opcja, którą udało mi się dobrze wykorzystać w środowiskach o dużym natężeniu hałasu/niskim kontraście, polega na zastosowaniu przesuwanego okienka (tj. 10x10 pikseli) i utworzeniu histogramu orientacji gradientu. Z tego histogramu można rozpoznać obecność bardziej dominujących krawędzi (gromadzą się na histogramie) i ich orientację (pozwalając na wykrycie takich rzeczy jak narożniki) i zobaczyć lokalne maksimum/minimum. (Mogę podać więcej szczegółów, jeśli to konieczne)

Jeśli interesuje Cię segmentacja jako całość ORAZ interakcja użytkownika, to polecam wycinanie wykresów lub chwytanie. Użytkownicy cięcia wykresów będą mogli precyzyjnie dostroić segmentację. Grab cut jest już w opencv, ale może powodować takie same problemy, jak pojedyncze wejście od użytkownika, a następnie automatycznie segmentuje obraz.

+0

Hi @Noremac, jestem zainteresowany segmentację motyla jako w całości i do wstępnego testowania, chciałbym narysować obwiednię wokół motyla, aby sprawdzić, czy moja segmentacja działa, czy nie. Jedną z ukrytych kwestii, z jakimi mam do czynienia, jest moment, gdy motyl jest zasłonięty. Chciałbym również dowiedzieć się więcej o metodzie gradientowego histogramu, o której wspomniałeś. Pisanie własnej logiki byłoby świetne, ale na początek próbuję wdrożyć już istniejące metody segmentacji. – freax

+0

Odsyłacz, którego użyłem do tego, znajduje się w bezpłatnej książce pdf pod adresem: http://szeliski.org/Book/. Jest to świetna książka informacyjna i wskazuje, gdzie można uzyskać więcej szczegółów. Na stronach 218,219 zacząłem używać ich. Są one częścią funkcji SIFT, ale zachowany jest tylko dominujący gradient, a ja użyłem więcej funkcji niż to (ostatecznie do klasyfikacji sieci neuronowej). W tej sekcji możesz znaleźć więcej pomysłów na funkcje. – Noremac

+0

Dzięki @Noremac, przejdę przez tę książkę! – freax

0

Można spróbować budowy modelu, przesyłając swoje dane treningowe (przedstawienia butterlys) do demo.nanonets.ai (swobodnie korzystać)

1) Dodaj dane treningowe tutaj:

demo.nanonets.ai

2) następnie kwerendy API używając następującego kodu (Python):

import requests 
import json 
import urllib 
model_name = "Enter-Your-Model-Name-Here" 
url = "https://i.ytimg.com/vi/xT6UsQwZyy0/maxresdefault.jpg" 
files = {'uploadfile': urllib.urlopen(url).read()} 
url = "http://demo.nanonets.ai/classify/?appId="+model_name 
r = requests.post(url, files=files) 
print json.loads(r.content) 

3) reakcja wygląda następująco:

{ 
    "message": "Model trained", 
    "result": [ 
    { 
     "label": "Black Swallowtail", 
     "probability": 0.97 
    }, 
    { 
     "label": "Orange Sulphur", 
     "probability": 0.025 
    }, 
    { 
     "label": "Monarch", 
     "probability": 0.005 
    } 
    ] 
}