Jak rozpoznać kolory z karty kolorów?

9

Zajmuję się tworzeniem aplikacji wizyjnej, która wykorzystuje poniższą tabelę kolorów i aparat do wyodrębnienia koloru każdej plamy na karcie. W tym celu najpierw muszę wykryć obszar wykresu na obrazie i dopasować obszar do istniejącego szablonu zawierającego lokalizacje łat.

Moje pytanie: muszę wykryć obszar plamy koloru, rozpoznając cztery rogi tabeli. Możesz zobaczyć rogi, które wskazują małe wstawiane prostokąty na poniższym obrazku. Wiem, że można to zrobić, pozwalając użytkownikowi wybrać te rogi, klikając je. Ale czy jest jakiś sposób na automatyczne wykrycie czterech rogów obrazu.

wprowadź opis zdjęcia tutaj

Tae-Sung Shin
źródło
Ciekawe, gdzie można uzyskać taką kolorową tabelę referencyjną?
hotpaw2
@ hotpaw2 Jak prawie zawsze, google. Wyszukaj termin „it8 target”
Tae-Sung Shin,

Odpowiedzi:

4

Możesz ukryć linie kolorów, aby wykryć obszar koloru

  • Najpierw wykryj wszystkie linie
  • Linie o najdłuższej długości byłyby najbardziej zewnętrzne
  • Wybierz górną poziomą linię i wykonaj dopasowanie szablonu dla kwadratów.
  • Po znalezieniu kwadratów przejdź w dół, by dotrzeć do drugiego zestawu kwadratów.
  • Zaznacz wszystkie punkty, w których znaleziono kwadraty
  • Teraz masz otaczający obszar dla karty kolorów.
Wajih
źródło
2

Każda tablica 2D komponentu koloru (RGB i in.) Ma dość wysoki kontrast i wyróżnia się. Mogę więc spróbować użyć złożonej FFT 2D każdego komponentu koloru, aby określić skalę i przesunięcie obrazu w porównaniu do obrazu odniesienia. Następnie użyj tych, aby dopasować zmierzone / znane współrzędne narożników i / lub łat na obrazie referencyjnym, aby uzyskać współrzędne na zdjęciu.

Być może będziesz musiał z pierwszej ręki zmierzyć niektóre współrzędne na obrazie odniesienia za pomocą edytora bitmap.

hotpaw2
źródło
1

W pierwszej kolejności usunę cały bałagan z szarością i tekstem. Zaczynając od wszystkich czterech stron, zatrzymam się, aż większość pikseli będzie miała wyjątkowo znany „szary” kolor.

Dzięki temu będziesz mieć tylko szachownicę składającą się z różnych kolorów. Oczekujesz około 22x12 - około 264 kolorów.

Najprostszą metodą byłoby zastosowanie prostszego algorytmu palatalizacji. Jeśli musiałbyś to przetłumaczyć na obraz GIF - stosuje kwantyzację kolorów dla każdej grupy kolorów reprezentowanej jako kolor środka ciężkości.

W twoim przypadku byłoby to szczególnie łatwe, ponieważ źródło jest już czymś w rodzaju podniebienia i możesz zgadnąć, jak zacząć.

Spójrz na to:

NeuQuant: http://members.ozemail.com.au/~dekker/NEUQUANT.HTML

Kwantyzacja kolorów Octree: http://www.cubic.org/docs/octree.htm . Zobacz to także.

To tylko niektóre odniesienia; ale w większości bibliotek, które używają takich formatów obrazów, znajdziesz gotowy do użycia kod. (BMP, PNG i GIF obsługują takie reprezentacje). Sprawdź także libpng i libjpeg, aby uzyskać szybkie implementacje.

Dipan Mehta
źródło
0

Dlaczego nie szukać granic wykresu zamiast narożników? Możesz spróbować użyć detektora krawędzi, a następnie znaleźć proste linie za pomocą transformaty Hougha.

Dima
źródło