-
1. Data: 2014-10-08 16:39:27
Temat: Wektoryzacja obrysu
Od: Borneq <b...@a...hidden.pl>
Mamy obraz doprowadzony już do postaci dwutonowej - biało czarnej lub
kolorowe plamy na białym tle, gdzie w istocie liczą się tylko dwa kolory
- albo kolor plamy albo kolor inny.
Jak znaleźć łamaną leżącą na brzegu takiej plamy. Próbowałem tak:
znajduję pierwszy punkt leżący na plamie przy samym brzegu.
Następnie badam wokoło tego punktu szukając następnego punktu na brzegu
oddalonego od tamtego o 10 czy 20 pikseli.
To dosyć skomplikowane, bo muszę używać algorytmu rysującego nie całe
koła ale łuki od jakiejś pozycji.
To mi nie wychodzi, bo jeśli za pierwszym razem znajduję drugi punkt, to
trzeci na przykład wraca mi spowrotem do poprzedniego. Czasem
kilkadziesiąt punków wyrysuję, ale przy skomplikowanej plamie nastąpi
zapętlenie
-
2. Data: 2014-10-09 11:26:09
Temat: Re: Wektoryzacja obrysu
Od: g...@g...com
Taka juz natura obrysu, ze w koncu punkt poczatkowy staje sie
ostatecznie punktem koncowym.
Dosc oczywistym rozwiazaniem wydaje sie wybor kolejnego punktu na podstawie
wektora przemieszczenia od poprzedniego punktu do punktu biezacego i odrzucanie
rozwiazan, w ktorych zmiana kierunku przekracza, powiedzmy, 90 stopni w lewo
albo prawo (moze byc i wiecej, nawet i 179 stopni w skrajnym przypadku)
Byc moze jeszcze prostsze byloby po prostu wyszukiwanie zbioru wszystkich
mozliwych punktow. W idealnym przypadku bedzie to po prostu zbior dwupunktowy,
i teraz wystarczy z niego odrzucic poprzedni punkt. W przypadku nieidealnym
(gdy bedzie n punktow w zbiorze) byc moze najlepiej byloby wybrac punkt
najbardziej odlegly od poprzedniego, ceteris paribus.
-
3. Data: 2014-10-09 11:37:55
Temat: Re: Wektoryzacja obrysu
Od: Borneq <b...@a...hidden.pl>
W dniu 2014-10-09 o 11:26, g...@g...com pisze:
> rozwiazan, w ktorych zmiana kierunku przekracza, powiedzmy, 90 stopni w lewo
> albo prawo (moze byc i wiecej, nawet i 179 stopni w skrajnym przypadku)
> (gdy bedzie n punktow w zbiorze) byc moze najlepiej byloby wybrac punkt
> najbardziej odlegly od poprzedniego, ceteris paribus.
Czyli nadal metoda "cyrklowa" tylko zamiast pierwszego napotkanego
punktu w łuku znajdować najpierw wszystkie punkty w kole w potem wybrać
ten najlepszy?
-
4. Data: 2014-10-09 13:13:46
Temat: Re: Wektoryzacja obrysu
Od: g...@g...com
> > rozwiazan, w ktorych zmiana kierunku przekracza, powiedzmy, 90 stopni w lewo
> > albo prawo (moze byc i wiecej, nawet i 179 stopni w skrajnym przypadku)
>
> > (gdy bedzie n punktow w zbiorze) byc moze najlepiej byloby wybrac punkt
> > najbardziej odlegly od poprzedniego, ceteris paribus.
>
> Czyli nadal metoda "cyrklowa" tylko zamiast pierwszego napotkanego
> punktu w łuku znajdować najpierw wszystkie punkty w kole w potem wybrać
> ten najlepszy?
Na to by wychodzilo
-
5. Data: 2014-10-09 16:12:02
Temat: Re: Wektoryzacja obrysu
Od: "M.M." <m...@g...com>
Może brzeg plamy stanowią piksele, które mają przynajmniej jednego
białego sąsiada?
Pozdrawiam
-
6. Data: 2014-10-09 18:01:00
Temat: Re: Wektoryzacja obrysu
Od: Borneq <b...@a...hidden.pl>
W dniu 2014-10-09 o 16:12, M.M. pisze:
> Może brzeg plamy stanowią piksele, które mają przynajmniej jednego
> białego sąsiada?
> Pozdrawiam
>
Można tak powiedzieć, że plama jest pewnego koloru na białym tle, gdy
sąsiaduje z inną plamą, to tez mamy tylko dwa przypadki:
- kolor plamy
- kolor różny od koloru plamy
Obrysowywanie już jako-tako działa, tylko samo tworzenie tych plam nie
dokońca bo są tworzone floodfillem i czasem kolor najeżdża na sąsiednią
plamę.
-
7. Data: 2014-10-10 13:32:59
Temat: Re: Wektoryzacja obrysu
Od: "M.M." <m...@g...com>
On Thursday, October 9, 2014 6:01:00 PM UTC+2, Borneq wrote:
> doko�ca bo s� tworzone floodfillem i czasem kolor
> naje�d�a na s�siedni� plam�.
Jeśli jest wiecej plam w roznych kolorach, to moze trzeba
zmieic warunek. Zamiast:
if( any(sasiad) == bialy )
Moze dac
if( any(sasiad) != biezacy )
Potem wektoryzacja. Hmmmmm. Moze caly obrazek pociac siatka. Nastepnie wyszukac
przeciecia siatki z pikselami nalezacymi do zbioru obrysu. Potem polaczyc
przeciecia prostymi tak, aby obwiednia laczaca byla w miare kortka. Na koniec
aproksymacja funkcjami sklejanymi, ale nie wiem do czego to potrzebujesz. Moze
sam uporzadkowany ciag przeciec Ci wystarczy.
Pozdrawiam
-
8. Data: 2014-10-15 13:57:05
Temat: Re: Wektoryzacja obrysu
Od: Borneq <b...@a...hidden.pl>
W dniu 2014-10-09 o 13:13, g...@g...com pisze:
>> Czyli nadal metoda "cyrklowa" tylko zamiast pierwszego napotkanego
>> punktu w łuku znajdować najpierw wszystkie punkty w kole w potem wybrać
>> ten najlepszy?
>
> Na to by wychodzilo
Wybieram najlepszy taki, dla że dla każdego patrzę na indeks, gdzie ten
punkt jest blisko punków dotychczas postawionych, -1 gdy do wszystkich
ma daleko. Wybieram punkt o najmniejszym indeksie np. -1, gdy kilka o
takim samym, wtedy taki że odległość między poprzednim a następnym jest
największa - to daje dobre rezultaty
-
9. Data: 2014-11-08 10:41:30
Temat: Re: Wektoryzacja obrysu
Od: Borneq <b...@a...hidden.pl>
W dniu 2014-10-08 o 16:39, Borneq pisze:
> To mi nie wychodzi, bo jeśli za pierwszym razem znajduję drugi punkt, to
> trzeci na przykład wraca mi spowrotem do poprzedniego. Czasem
> kilkadziesiąt punków wyrysuję, ale przy skomplikowanej plamie nastąpi
> zapętlenie
Zmieniłem algorytm co mi dało dużą poprawę, należy wykorzystać sposób
znany z labiryntologii, czyli regułę prawej dłoni. Będąc w obrysie
idziemy prawą stroną (lub lewą - to zależne od punktu startowego)
-
10. Data: 2014-11-08 17:52:46
Temat: Re: Wektoryzacja obrysu
Od: Borneq <b...@a...hidden.pl>
W dniu 2014-11-08 o 10:41, Borneq pisze:
> Zmieniłem algorytm co mi dało dużą poprawę, należy wykorzystać sposób
> znany z labiryntologii, czyli regułę prawej dłoni. Będąc w obrysie
> idziemy prawą stroną (lub lewą - to zależne od punktu startowego)
Bardzo dobrze działa, nawet gdy są wypustki (byle by na nich nie
zaczynać) cieńsze niż krok wektoryzacji = 6 piskeli