Білінійна інтерполяція — узагальнення лінійної інтерполяції для функції двох змінних. Ідея в тому, що проводиться лінійна інтерполяція по одній осі, а потім по іншій осі.
Якщо необхідно інтерполювати значення функції f в точці P = (x, y). І задано значення функції в навколишніх до P точках Q11 = (x1, y1), Q12 = (x1, y2), Q21 = (x2, y1), та Q22 = (x2, y2).
Спершу лінійно інтерполюємо в напрямку осі x:
Тепер проводимо лінійну інтерполяцію в напрямку осі y (між точками та ) щоб отримати кінцевий результат:
Коли відомі вершини є вершинами одиничного квадрата: (0, 0), (0, 1), (1, 0) та (1, 1), формула білінійної інтерполяції спрощується до
можна записати у вигляді наступної білінійної форми:
Інтерполяція є добутком двох лінійних функцій. І вона також може бути записана як:
де
- .
Результат білінійної інтерполяції не залежить від порядку виконання кроків інтерполяції.
Очевидним узагальненням білінійної інтерполяції на функцію трьох змінних є — трилінійна інтерполяція.
Білінійна інтерполяція в комп'ютерній графіці
У комп'ютерній графіці білінійна інтерполяція набула широкого поширення у процесі ресемплінга (або, простіше кажучи, масштабування) зображень.
При збільшенні цифрових зображень спостерігається сильна пікселізація зображення. Білінійна інтерполяція використовується для розрахунку кольорів додаткових пікселів щодо основних, вихідних що дозволяє згладжувати переходи. Значенням функції у даному випадку виступає колір пікселя (його складові). При цьому квадрат, утворений чотирма розглянутими основними точками приймається за одиничний.
Недолік методу
Головним мінусом білінійної інтерполяції при масштабуванні зображень є той факт, що при збільшенні в разів зображення розміром на пікселів в результаті буде отримано зображення розміром не на пікселів, а на пікселів.
Пов'язано це з тим, що у вихідному зображенні, наприклад, по горизонталі мається точок, тобто суміжних пар. При збільшенні зображення в раз між кожною парою основних точок вставляється по додаткових точок (тобто при збільшенні вдвічі між основними точками вставляється ще по одній, при збільшенні втричі - по дві і т. д.). Усього в результаті ширина результуючого зображення дорівнюватиме сумі кількості основних і додаткових точок:
- .
Простіше кажучи , для останнього пікселя ( в кожному рядку і стовпці ) вихідного зображення не знаходиться пари , з якою можна було б провести інтерполювання .
Для обходу цього обмеження , по-перше , звичайно приймається , що у вихідному і отриманому зображеннях колірні значення пікселів семпліровані з їхніх центрів , а не з кутів , тобто наприклад , якщо взяти абсолютну довжину і ширину зображення рівними 1 , в зображенні розміром 2 на 2 координатами вихідних точок є ( 0.25 ; 0.25 ) , ( 0.25 ; 0.75 ) , ( 0.75 ; 0.25 ) , і ( 0.75 ; 0.75 ), а не ( 0 ; 0 ) , ( 0 ; 0.5) , ( 0.5 ; 0 ) , і ( 0.5 ; 0.5) ( поправка на дискретизацію ) . Таким чином забезпечується правильна центровка зображення при масштабуванні , але проблемними виявляються не тільки останній рядок і останній стовпець , а всі прикордонні пікселі одержуваного зображення однаково , бо їх координати випадають за межі прямокутника , що окреслює точки семплування вихідного зображення (наприклад, при масштабуванні в 4 на 4 потрібно обчислити значення в точках ( 0.125 ; 0.125 ) , ( 0.125 ; 0.875 ) і т.д.). Потім, так як значення в цих точках не можуть бути інтерпольованні, то потрібно розширити вихідне зображення одним із способів (вибір якого залежить від способу подальшого використання зображення )
- Екстраполяція значень крайових пікселів;
- Дзеркальне відображення вихідного зображення щодо кожного краю, і центральне по кутах. Як значення відсутніх пікселів використовуються копії значень пікселів з того ж краю; таким чином, пікселі, що випадають за вихідні координати, є інтерполянтами лише в одному вимірі, а в іншому копіями крайових значень;
- Теселяція вихідного зображення; копії вихідного зображення "приклеюються" впритул з кожного краю і з кутів. Як кольори відсутніх пікселів, таким чином, використовуються значення пікселів з протилежного краю. Метод підходить, якщо інтерпольоване зображення саме використовуватиметься для теселяції (наприклад, для заповнення багатокутників при текстуруванні).
Після подібної попередньої обробки процедура білінійної інтерполяції застосовується в початковому вигляді, з отриманням зображення очікуваного розміру ( на ).
Приклад програми
Нижче наведено приклад програми білінійної інтерполяції зображення, написаний на
void resample( const unsigned* inBuf // вхідний масив пікселів , unsigned* outBuf // результат - вихідний масив пікселів , int oldWidth //ширина оригіналього зображення , int oldHeight //висота оригіналього зображення , int newWidth //ширина результуючого зображення , int newHeight //висота результуючого зображення ) { const float div_height = (float) ( (oldHeight - 1) ) / (newHeight - 1); const float div_width = (float) ( (oldWidth - 1) ) / (newWidth - 1); float i_tmp = 0.f; for ( int i = 0; i < newHeight; ++i, i_tmp += div_height ) { float j_tmp = 0.f; int l = (int)(i_tmp); if (l > oldHeight - 2) { l = oldHeight - 2; } const float u = i_tmp - l; l *= oldWidth; for ( int j = 0; j < newWidth; ++j, j_tmp += div_width ) { int c = (int) (j_tmp); if (c > oldWidth - 2) { c = oldWidth - 2; } const float t = j_tmp - c; //Коефіцієнти const float d1 = (1 - t) * (1 - u); const float d2 = t * (1 - u); const float d3 = t * u; const float d4 = (1 - t) * u; const int ind = l + c; // для оптимізації (щоб не рахувати далі 4 рази) // значення кольору в 4 пікселях, за якими інтерполюємо const unsigned p1 = inBuf[ ind ]; const unsigned p2 = inBuf[ ind + 1 ]; const unsigned p3 = inBuf[ ind + oldWidth + 1 ]; const unsigned p4 = inBuf[ ind + oldWidth]; // Записуємо результуючий піксель *outBuf++ = p1 * d1 + p2 * d2 + p3 * d3 + p4 * d4; } } }
Див. також
Ця стаття не містить . (жовтень 2015) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Bilinijna interpolyaciya uzagalnennya linijnoyi interpolyaciyi dlya funkciyi dvoh zminnih Ideya v tomu sho provoditsya linijna interpolyaciya po odnij osi a potim po inshij osi Vidomo znachennya funkciyi v chotiroh chervonih tochkah Znachennya funkciyi v zelenij tochci potribno interpolyuvati Priklad bilinijnoyi interpolyaciyi v odinichnomu kvadrati Interpolovani znachennya predstavleni kolorom Yaksho neobhidno interpolyuvati znachennya funkciyi f v tochci P x y I zadano znachennya funkciyi v navkolishnih do P tochkah Q11 x1 y1 Q12 x1 y2 Q21 x2 y1 ta Q22 x2 y2 Spershu linijno interpolyuyemo v napryamku osi x f R 1 x 2 x x 2 x 1 f Q 11 x x 1 x 2 x 1 f Q 21 R 1 x y 1 displaystyle f R 1 approx frac x 2 x x 2 x 1 f Q 11 frac x x 1 x 2 x 1 f Q 21 quad R 1 x y 1 f R 2 x 2 x x 2 x 1 f Q 12 x x 1 x 2 x 1 f Q 22 R 2 x y 2 displaystyle f R 2 approx frac x 2 x x 2 x 1 f Q 12 frac x x 1 x 2 x 1 f Q 22 quad R 2 x y 2 Teper provodimo linijnu interpolyaciyu v napryamku osi y mizh tochkami R 1 displaystyle R 1 ta R 2 displaystyle R 2 shob otrimati kincevij rezultat f P y 2 y y 2 y 1 f R 1 y y 1 y 2 y 1 f R 2 displaystyle f P approx frac y 2 y y 2 y 1 f R 1 frac y y 1 y 2 y 1 f R 2 Koli vidomi vershini ye vershinami odinichnogo kvadrata 0 0 0 1 1 0 ta 1 1 formula bilinijnoyi interpolyaciyi sproshuyetsya do f x y f 0 0 1 x 1 y f 1 0 x 1 y f 0 1 1 x y f 1 1 x y displaystyle f x y approx f 0 0 1 x 1 y f 1 0 x 1 y f 0 1 1 x y f 1 1 xy mozhna zapisati u viglyadi nastupnoyi bilinijnoyi formi f x y 1 x x f 0 0 f 0 1 f 1 0 f 1 1 1 y y displaystyle f x y approx begin bmatrix 1 x amp x end bmatrix begin bmatrix f 0 0 amp f 0 1 f 1 0 amp f 1 1 end bmatrix begin bmatrix 1 y y end bmatrix Interpolyaciya ye dobutkom dvoh linijnih funkcij I vona takozh mozhe buti zapisana yak b 1 b 2 x b 3 y b 4 x y displaystyle b 1 b 2 x b 3 y b 4 xy de b 1 f 0 0 displaystyle b 1 f 0 0 b 2 f 1 0 f 0 0 displaystyle b 2 f 1 0 f 0 0 b 3 f 0 1 f 0 0 displaystyle b 3 f 0 1 f 0 0 b 4 f 0 0 f 1 0 f 0 1 f 1 1 displaystyle b 4 f 0 0 f 1 0 f 0 1 f 1 1 Rezultat bilinijnoyi interpolyaciyi ne zalezhit vid poryadku vikonannya krokiv interpolyaciyi Ochevidnim uzagalnennyam bilinijnoyi interpolyaciyi na funkciyu troh zminnih ye trilinijna interpolyaciya Bilinijna interpolyaciya v komp yuternij graficiPriklad zbilshennya chastini zobrazhennya prostim masshtabuvannyam i zi zastosuvannyam bilinijnoyi interpolyaciyi U komp yuternij grafici bilinijna interpolyaciya nabula shirokogo poshirennya u procesi resemplinga abo prostishe kazhuchi masshtabuvannya zobrazhen Pri zbilshenni cifrovih zobrazhen sposterigayetsya silna pikselizaciya zobrazhennya Bilinijna interpolyaciya vikoristovuyetsya dlya rozrahunku koloriv dodatkovih pikseliv P displaystyle P shodo osnovnih vihidnih Q displaystyle Q sho dozvolyaye zgladzhuvati perehodi Znachennyam funkciyi f displaystyle f u danomu vipadku vistupaye kolir pikselya jogo skladovi Pri comu kvadrat utvorenij chotirma rozglyanutimi osnovnimi tochkami prijmayetsya za odinichnij Nedolik metodu Golovnim minusom bilinijnoyi interpolyaciyi pri masshtabuvanni zobrazhen ye toj fakt sho pri zbilshenni v N displaystyle N raziv zobrazhennya rozmirom W displaystyle W na H displaystyle H pikseliv v rezultati bude otrimano zobrazhennya rozmirom ne N W displaystyle NW na N H displaystyle NH pikseliv a N W 1 1 displaystyle N W 1 1 na N H 1 1 displaystyle N H 1 1 pikseliv Pov yazano ce z tim sho u vihidnomu zobrazhenni napriklad po gorizontali mayetsya W displaystyle W tochok tobto W 1 displaystyle W 1 sumizhnih par Pri zbilshenni zobrazhennya v N displaystyle N raz mizh kozhnoyu paroyu osnovnih tochok vstavlyayetsya po N 1 displaystyle N 1 dodatkovih tochok tobto pri zbilshenni vdvichi mizh osnovnimi tochkami vstavlyayetsya she po odnij pri zbilshenni vtrichi po dvi i t d Usogo v rezultati shirina rezultuyuchogo zobrazhennya dorivnyuvatime sumi kilkosti osnovnih i dodatkovih tochok W W 1 N 1 N W 1 1 displaystyle W W 1 N 1 N W 1 1 Prostishe kazhuchi dlya ostannogo pikselya v kozhnomu ryadku i stovpci vihidnogo zobrazhennya ne znahoditsya pari z yakoyu mozhna bulo b provesti interpolyuvannya Dlya obhodu cogo obmezhennya po pershe zvichajno prijmayetsya sho u vihidnomu i otrimanomu zobrazhennyah kolirni znachennya pikseliv semplirovani z yihnih centriv a ne z kutiv tobto napriklad yaksho vzyati absolyutnu dovzhinu i shirinu zobrazhennya rivnimi 1 v zobrazhenni rozmirom 2 na 2 koordinatami vihidnih tochok ye 0 25 0 25 0 25 0 75 0 75 0 25 i 0 75 0 75 a ne 0 0 0 0 5 0 5 0 i 0 5 0 5 popravka na diskretizaciyu Takim chinom zabezpechuyetsya pravilna centrovka zobrazhennya pri masshtabuvanni ale problemnimi viyavlyayutsya ne tilki ostannij ryadok i ostannij stovpec a vsi prikordonni pikseli oderzhuvanogo zobrazhennya odnakovo bo yih koordinati vipadayut za mezhi pryamokutnika sho okreslyuye tochki sempluvannya vihidnogo zobrazhennya napriklad pri masshtabuvanni v 4 na 4 potribno obchisliti znachennya v tochkah 0 125 0 125 0 125 0 875 i t d Potim tak yak znachennya v cih tochkah ne mozhut buti interpolovanni to potribno rozshiriti vihidne zobrazhennya odnim iz sposobiv vibir yakogo zalezhit vid sposobu podalshogo vikoristannya zobrazhennya Ekstrapolyaciya znachen krajovih pikseliv Dzerkalne vidobrazhennya vihidnogo zobrazhennya shodo kozhnogo krayu i centralne po kutah Yak znachennya vidsutnih pikseliv vikoristovuyutsya kopiyi znachen pikseliv z togo zh krayu takim chinom pikseli sho vipadayut za vihidni koordinati ye interpolyantami lishe v odnomu vimiri a v inshomu kopiyami krajovih znachen Teselyaciya vihidnogo zobrazhennya kopiyi vihidnogo zobrazhennya prikleyuyutsya vpritul z kozhnogo krayu i z kutiv Yak kolori vidsutnih pikseliv takim chinom vikoristovuyutsya znachennya pikseliv z protilezhnogo krayu Metod pidhodit yaksho interpolovane zobrazhennya same vikoristovuvatimetsya dlya teselyaciyi napriklad dlya zapovnennya bagatokutnikiv pri teksturuvanni Pislya podibnoyi poperednoyi obrobki procedura bilinijnoyi interpolyaciyi zastosovuyetsya v pochatkovomu viglyadi z otrimannyam zobrazhennya ochikuvanogo rozmiru N W displaystyle NW na N H displaystyle NH Priklad programiNizhche navedeno priklad programi bilinijnoyi interpolyaciyi zobrazhennya napisanij na S void resample const unsigned inBuf vhidnij masiv pikseliv unsigned outBuf rezultat vihidnij masiv pikseliv int oldWidth shirina originalogo zobrazhennya int oldHeight visota originalogo zobrazhennya int newWidth shirina rezultuyuchogo zobrazhennya int newHeight visota rezultuyuchogo zobrazhennya const float div height float oldHeight 1 newHeight 1 const float div width float oldWidth 1 newWidth 1 float i tmp 0 f for int i 0 i lt newHeight i i tmp div height float j tmp 0 f int l int i tmp if l gt oldHeight 2 l oldHeight 2 const float u i tmp l l oldWidth for int j 0 j lt newWidth j j tmp div width int c int j tmp if c gt oldWidth 2 c oldWidth 2 const float t j tmp c Koeficiyenti const float d1 1 t 1 u const float d2 t 1 u const float d3 t u const float d4 1 t u const int ind l c dlya optimizaciyi shob ne rahuvati dali 4 razi znachennya koloru v 4 pikselyah za yakimi interpolyuyemo const unsigned p1 inBuf ind const unsigned p2 inBuf ind 1 const unsigned p3 inBuf ind oldWidth 1 const unsigned p4 inBuf ind oldWidth Zapisuyemo rezultuyuchij piksel outBuf p1 d1 p2 d2 p3 d3 p4 d4 Div takozhInterpolyaciya Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno zhovten 2015