Programování - Java - Deformace obrázku
Dobrý den,
potřeboval bych poradit. Mám obrázek zde:
http://img705.imageshack.us/img705/2738/img2fr.png
a ten obrázek bych potřeboval sdeformovat do této podoby:
a nedaří se mi to udělat. Pokoušel jsem se to dělat skrz kod níže ale výsledek připomíná kus pizzy jako když bych zmáčkl k sobě 2 levé rohy horní a dolní. Mohl by mi prosím někdo poradit jak na to? Děkuji
Kod:
for (int i = 0; i < imageB.getWidth(); i++) {
for (int j = 0; j < imageB.getHeight(); j++) {
int fi = (int)Math.sqrt(i*i + j*j);
int r= (int) (Math.atan2(i, j) / DEG_TO_RAD);
if (r < imageA.getWidth() && fi < imageA.getHeight()) {
// nastaveni pixelu 2. obrazku na pozici (i,j)
// na barvu z 1. obrazku na pozici (r, fi)
// TODO nastaveni barvy na pozici (i, j)
imageB.setRGB(i, j, imageA.getRGB(r, fi));
}
}
}
Spíš postupuj opačně. Pro každý pixel výsledného obrázku si vypočítej, jaký bod mu odpovídá v původním obrázku.
To me vubec nenapadlo a muzu se jeste zeptat jak by se resil ten tvar? Protoze zatim docilim maximalne trojhranku ale potreboval bych plast komoleho kuzelu
Asi ti nerozumím.
Ja bych ve výsledku potřeboval dostat tenhle tvar toho obrazku
1. obrázek
imgnv.png
ale zatim i kdyz jsem to zkousel opacne jak jste mi radil dostavam toto
2.obrázek
img3y.png
používám převod na polární souřadnice ale nevím si rady jak z toho dostat ten 1.obrázek respektive ten tvar nedaří se mi přijít na to jak doplnit ten program aby mi to fungovalo
Tak to jsi ten opačný převod udělal špatně.
A jak by se to tedy melo udelat? Ale porad nechapu jak udelat abych nemel po transformaci pocatek ve spice viz obrazek 2 ale mel je jako oblouk viz obrazek 1
Ted to probiha tak ze jak projizdim obrazek B(novy) pixel po pixelu a pak tomu pixelu pridelim barvu z obrazku A(puvodni)
Tak vytiskni pizzu na hrneček a bude to OK.
Jen tak mimo, sice ti moc neporadím, ale dle slov přednášejícího nemá být algoritmus napsán přes 2 ,,fory,,
To sice name ale nejprve potrebuji prijit na to jak to vubec funguje nebo jak to mam vubec udelat ale jelikoz stejne nevim jak to provest je jedno co pouzivam :D
Máš recht, já taky nevím jak to napsat a to jsem absolvoval všechny cvičení.
Udělám to taky přes 2 fory, v zadání práce o 2 forech nic nepíšou, po pravdě jsem na to ještě nekoukal, zítra na to mrknu, tak jestli něco vymyslím rád poradím.
Pro zjištění kam se má původní bod posunout používáš nějakou funkci. Takže ty teď potřebuješ použít inverzní funkci, abys našel původní bod.
Ale správně bys to měl dělat přes násobení matice a vektoru. Pak by stačilo najít inverzní matici.
Mno pouzivam polarni transformace ktere bych mel pouzit a melo by to podle nich nejak jit udelat jen netusi jak to modifikovat abych z toho nemel ctvrtku kruznicle a plast komoleho kuzelu