-
1. Data: 2014-11-15 11:19:26
Temat: Obcinanie frędzli
Od: Borneq <b...@a...hidden.pl>
Mamy szary obraz, rozmywamy go i poddajemy posteryzacji, to znaczy
zmniejszamy liczbę odcieni szarości z 256 na mniejszą, np. jasność
70..79 należy do jednej grupy a jasność 80..89 do drugiej.
Kolorujemy każdą grupę i otrzymujemy:
http://i.imgur.com/mgtJb5E.png
Problemem jest to, że nie otrzymujemy "mapy" a dominują głównie obwódki.
Przykładowe trudne plamy:
http://i.imgur.com/HuD086o.png
http://i.imgur.com/JSKIfyS.png
http://i.imgur.com/HFlK6c8.png
http://i.imgur.com/dg4lSfy.png
http://i.imgur.com/zJL4zvs.png
http://i.imgur.com/DTUowQQ.png
Zadaniem teraz jest obciąć wystające "frędzle". Dla jednego obrazu
wydaje się proste:
oto bierzemy plamę i scanliniami pionowo wyszukujemy kolor od piksela x0
do pikelsa x1
jeśli długość linii x1-x0+1 jest mała wtedy zamalowujemy ją innym
kolorem, przykładowo pierwszą część kolorem x0-1 a drugą x1+1.
Możemy potem brać scanlinie pionowe, co trochę będzie wolniejsze bo
struktura przystosowana jest do scanlinii pioziomych.
Pierwsza niepokojąca rzecz to wydajność: jest około 300 plam na obrazie
512x512, niektóre rozciągają się niemal na cały ekran przy czym w tym
ekranie tylko 3% to kolor plamy. Czyli wielokrotnie będziemy opuszczali
piksele. Choć takich plam może nie jest dominująca ilość - trzeba by
sprawdzić.
Druga rzecz: jeśli usuwamy odcinek frędzla, to jednocześnie pogrubiamy
plamy leżące po prawej i lewej stronie.
A te plamy mogą być zarówno tymi których jeszcze nie obrabialiśmy jak i
te które obrabialiśmy - można to rozpoznać po indeksie koloru.
Gdy nie obrabialiśmy - pogrubia się plamę, choć pogrubiona może bć
jeszcze za wąska
Poza tym ostatecznie: obrobiona plama może podzielić się na kilka części
- tu trzeba chyba zastosować rozrost ziarna i ponumerowąć kolorem każdą
część oddzielnie.
-
2. Data: 2014-11-15 21:37:18
Temat: Re: Obcinanie frędzli
Od: Borneq <b...@a...hidden.pl>
W dniu 2014-11-15 o 11:19, Borneq pisze:
> http://i.imgur.com/mgtJb5E.png
> Problemem jest to, że nie otrzymujemy "mapy" a dominują głównie obwódki.
Gdy mamy scanlinię, to wtedy można działać gdy na przemian są szerokie i
wąskie odcinki eliminując te wąskie, ale co gdy wąski sąsiaduje z wąskim?
-
3. Data: 2014-11-16 09:17:09
Temat: Re: Obcinanie frędzli
Od: Borneq <b...@a...hidden.pl>
W dniu 2014-11-15 o 21:37, Borneq pisze:
> Gdy mamy scanlinię, to wtedy można działać gdy na przemian są szerokie i
> wąskie odcinki eliminując te wąskie, ale co gdy wąski sąsiaduje z wąskim?
Typowy brzeg wygląda tak:
http://i.imgur.com/LAMvZ0l.png w powiększeniu 16-krotnym.
Otóż jest jedna plama, po drugiej stronie biały kolor i są aż trzy
otoczki grubości 1-3 piksele. To wszystko powinno stać się tą błękitną
plamą.
-
4. Data: 2014-11-16 09:27:09
Temat: Re: Obcinanie frędzli
Od: Borneq <b...@a...hidden.pl>
W dniu 2014-11-16 o 09:17, Borneq pisze:
> Typowy brzeg wygląda tak:
> http://i.imgur.com/LAMvZ0l.png w powiększeniu 16-krotnym.
Mam pierwsze rozwiązania: otóż nie będę bezpośrednio modyfikował rysunku
ale tworzył jego kopię. Z jednego będę odczytywał niezmodyfikowane, a
modyfikację zapisywał na drugim. Poza tym ta kopia potrzebna do FloodFilla,
Obawiam się że będzie tak:
błękitny pozostanie
fioletowy stanie się błękitnym
różowy stanie się fioletowym
szary stanie się różowym i zniknie
- z trzech pasków zniknie jeden.
Czyli trzeba by wielokrotnie przechodzić cały obraz. Gdyby chociaż było
rozwiązanie, że w jednym kroku niknie połowa pasków a nie jeden, wtedy
trzeba by przechodzić logarytmiczną liczbę razy razy.
-
5. Data: 2014-11-16 13:54:53
Temat: Re: Obcinanie frędzli
Od: Borneq <b...@a...hidden.pl>
W dniu 2014-11-16 o 09:27, Borneq pisze:
>> http://i.imgur.com/LAMvZ0l.png w powiększeniu 16-krotnym.
> Mam pierwsze rozwiązania: otóż nie będę bezpośrednio modyfikował rysunku
> ale tworzył jego kopię. Z jednego będę odczytywał niezmodyfikowane, a
Największy problem jest gdy wiele prążków jest przy sobie. Zadanie: mamy
wyeliminować prążki grubości <5 a te >=5 powiększyć o wyeliminowane.
Ale teraz mamy 20 jednopikselowych:
|0|1|2|3|4|...|19|
To co powinniśmy uzyskać to jeden prążek na 5 pikseli szerokości 5
pikseli: będą 0,5,10,15, niby można to zrobić, ale co gdy w następnej
scanlinii zamiast 0,5,10,15 tymi grubszymi będą 1,6,11,16?
Uzyskamy siatkę, zamiast pionowych linii