Zamieszczony przykładowy obraz ma względnie mocną perspektywę (nie jest obrazowany prosto z kierunku normalnej powierzchni), co może powodować problemy z technikami dopasowania szablonów przy przetwarzaniu blokowym. Zakładam, że musisz wziąć obraz z mocną perspektywą, więc pierwszą rzeczą, którą chcemy zrobić, jest oszacowanie transformacji obrazu, która usunie rzut perspektywiczny i spowoduje obraz rektyfikowany („prosty obraz”).
Korekcja rzutu perspektywicznego, gdy kształt jest znany
Ostatecznym celem przetwarzania wstępnego jest znalezienie narożników tego szarego prostokąta, który jest tłem karty kolorów. Zacząłem od progu o stałej wartości. Literatura / sieć zawiera wiele informacji na temat wykonywania progów, gdy obraz ma nierównomierne oświetlenie, ale jeśli możesz, spróbuj poprawić ustawienia obrazowania, aby oświetlenie było względnie równe.
Założyłem, że karta kolorów zajmuje dość dużą część ekranu, więc jest to prawdopodobnie największy ciągły obszar obrazu. Istnieje wiele czarno-białych funkcji znakowania (MATLAB bwlabel, IPPs LabelMarkers, OpenCV ma zewnętrzną bibliotekę cvblob), które nadadzą każdemu odrębnie połączonemu regionowi swój własny indeks. Po etykietowaniu można obliczyć obszary połączonych komponentów za pomocą histogramu, a następnie wybrać komponent o największym obszarze.
Zazwyczaj dobrym pomysłem jest wypełnienie komponentów tak, aby komponent nie miał otworów, co zmniejsza liczbę pikseli krawędzi.
Teraz możemy użyć operatorów znajdowania krawędzi (użyłem metody opartej na gradiencie, ale możesz także śledzić krawędź, śledząc białe piksele połączone z czarnymi pikselami), aby uzyskać piksele należące do granicy.
Ponieważ interesujący nas obiekt to prostokąt, dopasowałem cztery linie do pikseli brzegowych za pomocą solidnego dopasowania linii (RANSAC). Po znalezieniu nowej linii usunąłem wszystkie punkty znajdujące się blisko znalezionej linii, co zmusza kolejne operacje dopasowania do zwrócenia innych krawędzi obiektu. W końcu, kiedy znaleziono wszystkie krawędzie, obliczyłem wszystkie możliwe przecięcia między zbiorem linii. Z zestawu wynikowych punktów usunąłem wszystkie punkty poza obrazem.
Teraz mamy rogi wykresu kolorów i znając wymiary wykresu, możemy obliczyć macierz transformacji (homografia, rzut między dwiema płaszczyznami. Użyj bezpośredniej transformacji liniowej (DLT) do rozwiązania ) między współrzędnymi milimetrowymi i współrzędne pikseli.HH
x=HX
Ta matryca transformacji może być następnie wykorzystana do transformacji oryginalnego obrazu, tak że karta kolorów jest obrazowana prosto z kierunku normalnej powierzchni.
Jak widać, pozostały tylko zniekształcenia promieniowe. Kiedy użyliśmy transformacji do transformacji obrazu (interpolacja 2D), wybraliśmy takie współrzędne interpolacji, abyśmy znali dokładną rozdzielczość obrazu, co oznacza, że znamy teraz na przykład rozmiar liter.H
Jeśli nadal chcemy dopasować szablon, możemy użyć dowolnej przyzwoitej metody dopasowania szablonu. Metoda nie musi być niezmienna rotacja / skala, ponieważ obraz jest już skorygowany.