Il modo più semplice per comprendere l'interpolazione bilineare è comprendere l'interpolazione lineare in 1D.
Questa prima figura dovrebbe darti dei flashback alla matematica della scuola media. Dato un po 'di posizione a a cui vogliamo sapere f (a), prendiamo i valori "noti" vicini e inseriamo una linea tra di essi.

Così abbiamo usato solo le vecchie equazioni della scuola media y = mx + B e Y-Y1 = m (x-x1). Nulla di bello.
Fondamentalmente questo concetto viene portato in 2D per ottenere l'interpolazione bilineare. Possiamo attaccare il problema di trovare f (a, b) per qualsiasi a, b facendo tre interpolazioni. Studia attentamente la prossima figura. Non farti intimidire da tutte le etichette. In realtà è piuttosto semplice.

Per un'interpolazione bilineare, abbiamo ancora una volta utilizzando i punti vicini. Ora ce ne sono quattro, visto che siamo in 2D. Il trucco è attaccare il problema una dimensione alla volta.
Proiettiamo i nostri (a, b) ai lati e prima calcoliamo due righe (una dimensione!) Interpolanti.
- f (a, y j) dove y j viene mantenuta costante
- f (a, y j + 1) dove y j + 1 è tenuto costante.
Ora c'è solo un ultimo passaggio. Si prende i due punti si è calcolato, f (a, y j) e f (a, y j + 1), e montare una linea tra di loro. Quello è quello blu che va da sinistra a destra nel diagramma, passando attraverso f (a, b). Interpolando lungo quest'ultima linea ti dà la risposta finale.
Lascerò la matematica per il caso 2-D per te. Non è difficile se lavori dal diagramma. E affrontarlo tu stesso ti aiuterà davvero a capire cosa sta succedendo.
Un'ultima piccola nota, non importa quali lati si scelgono per le prime due interpolazioni. Avresti potuto scegliere la parte superiore e quella inferiore, e poi hai fatto la terza linea di interpolazione tra quelle due. La risposta sarebbe stata la stessa.
Sei stato incaricato di scrivere il tuo, però? –
L'interpolazione bilineare non è definita per definizione per gli array 2D? – Phonon
Il mio obiettivo principale è di ottimizzarlo tramite CUDA. Quindi, come il ridimensionamento dell'immagine viene fatto tramite bilineare è solo un passaggio intermedio. Dovresti modificare il mio post. Il professore vuole i risultati di ottimizzazione, quindi il resto spetta a me. Con l'algoritmo, posso quindi passare a invocare CUDA per eseguirlo con il parallelismo accelerandolo.:) – f0rfun