witam
mam algorytm na powiększania obrazów interpolacją dwuliniową jednak pewna kwestia nie daje mi spokoju. I nie rozumiem, dlaczego tak jest rozwiązywana. Chodzi o krawędź dolną i prawą.
Otóż przypuśćmy, że mój obraz źródłowy wygląda tak:
3 6
8 4
Powiększe go x2
3 . 6 .
. . . .
8 . 4 .
- . . .
I teraz wg. moich obliczeń piksel * powinien przyjąć wartość 4 gdyż:
for (j=0; j<Image2->Height; j++)
{
for (i=0; i<Image2->Width; i++)
{
x = i*ratiox;
y = j*ratioy;
(int)ix = x; (int)iy = y;
fx = x - ix; fy = y - iy;
p1 = GetRValue(Image1->Canvas->Pixels[ix][iy]);
p2 = GetRValue(Image1->Canvas->Pixels[ix+1][iy]);
p3 = GetRValue(Image1->Canvas->Pixels[ix][iy+1]);
p4 = GetRValue(Image1->Canvas->Pixels[ix+1][iy+1]);
kolor=((1.0-fx)*(1.0-fy)*p1+(fx)*(1.0-fy)*p2
+(1.0-fx)* (fy)*p3+(fx)* (fy)*p4);
na podstawie kodu:
ratiox i ratioy=1/2
j=3;
i=0;
x=0; ix=0; fx=0;
y=3/2; iy=1; fy=1/2;
p1=8; p2=4; p3=0; p4=0;
(1-0)(1-1/2)8+0(1-1/2)p2+(1-0)1/20+01/20=4
Wyżej pokazałem, że można obliczyć na krawędziach piksele. Program natomiast tą krawędź (dolna) nie obliczy. To samo tyczy się krawędzi prawej.
Wynik działania programu. (strzałki wskazują nieobliczone piksele) :
Bardzo proszę o pomoc