Czy w obrazku jest dany kształt

0

Witam. Mam pewien obrazek i muszę sprawdzić czy jest w nim dany kształt. Niestety z pewnych powodów nie mogę go pokazać, ale myślę że obejdzie się bez niego. A więc wszystkie kształty są tego samego koloru (zieleń), a tło jest czarne, więc to powinno ułatwić.

Kształty są w różnych kontach, lecz tylko do chyba max 30 stopni nie więcej, jednak za to o tych samych rozmiarach zawsze co też ułatwi sprawę.

I teraz chciałbym sprawdzić czy na obrazku jest np. zielony trójkąt. Jak to można najszybciej i najpewniej zrobić?

Myślałem aby prześledzić piksel po pikselu obrazek. Tzn trójkąt będzie szukało 3 zielonych pikseli w tych samych odstępach. Zacznie np. w lewym górnym rogu i będzie przesuwało 3 punkty o 1 piksel. Potem zacznie od nowa od lewej strony tylko że 1 piksel niżej i znowu. Jeżeli na któreś pozycji trafi że każdy piksel (punkt) będzie zielony to to najpewniej nasz trójkąt. Dla pewności kształty oznaczę jak największą ilością punktów by nie pomyliło.

Tylko jak to się ma ze strony wydajności i czy będzie to łatwo wykonalne w delphi? Czy myślicie że taka pętla sprawdzająca każde piksele jest dobrym rozwiązaniem? Może są jakieś gotowe rozwiązania w sieci? Ja niestety nie znalazłem ;/

Może da się to zrobić bardziej optymalnie?

Proszę o jakieś sugestie, pozdrawiam

0

Eeee...???

Możesz dać jakiś przykładowy kod? Z tego tematu to ciężko cokolwiek wykminić... A tak poza tym to musisz tak kombinować? Nie możesz sobie podczas dodawania tej figury przechować gdzieś informacje na temat tej figury? Przecież gdzieś w programie musisz mieć zapisany kod malujący odpowiednią figurę na obrazku więc chyba można sobie do jakiejś zmiennej zapisać informacje jaka to jest figura; Będzie lepiej odczytać tą informacje niż pieprzyć się i ręcznie przeszukiwać obrazek piksel po pikselu...

0

Nie mam jeszcze żadnego kodu :)
I nie generuję tych figur, tylko otrzymuję gotowy obrazek w formie rastrowej i muszę znaleźć pozycję danej figury.

0

Jeśli chodzi ci o rozkodowanie np reCaptchy czy czegoś w tym stylu to sprawa jest trudna. Natomiast jeżeli na obrazku masz jakiś prosty jednokolorowy kształt to już być może jest prościej. Sugerowałbym zrobienie mipmap dla danego obrazka i znajdywanie kształtu od najmniejszej mipmapy. Przy przejściu na kolejny poziom mipmapy sprawdzał byś czy coś co przypominało dany kształt na niższym poziomie szczegółowości przypomina go dalej, albo czy nie pojawiły się jakieś małe obiekty o rozpoznawalnych kształtach (jako że duże zostały znalezione przy skanowaniu mniejszym mipmap).

0

Ja bym przeprowadził segmentacje obrazu po kolorze i dla wydzielonych segmentów policzył współczynniki kształtu, itp. Czyli normalny proces rozpoznawania obrazu.

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