日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

使用双线性插值法放大图像(matlab实现)

發(fā)布時(shí)間:2023/12/15 综合教程 23 生活家
生活随笔 收集整理的這篇文章主要介紹了 使用双线性插值法放大图像(matlab实现) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

雙線性插值的概念及公式可以參考百度,這里僅對(duì)算法原理進(jìn)行簡(jiǎn)單的說(shuō)明:

雙線性插值計(jì)算公式:

f(i+u,j+v) = (1-u)(1-v)f(i,j)+u(1-v)f(i+1,j)+(1-u)vf(i,j+1)+uvf(i+1,j+1)

這個(gè)公式表明了如何利用矩陣中的四個(gè)像素值計(jì)算新的像素值,這些新的像素值就組成了放大后的圖像。

下圖是如何將3x3的圖像放大為4x4的圖像:

原圖像表示為3x3的矩陣(像素值處在黑線的交叉點(diǎn)上),如何計(jì)算4x4矩陣的值呢?(像素值處在紅色虛線交叉點(diǎn)及紅線與黑線的交點(diǎn)上)

比如新圖像B的第一列與原圖像A的第一列的對(duì)應(yīng)關(guān)系是:

B(1,1) = A(1,1)

B(1,2) = A(1,1.66667)

B(1,3) = A(1,2.33334)

B(1,4) = A(1,3.00001)

應(yīng)用上面的公式,實(shí)際上就是用A的含有小數(shù)點(diǎn)的位置的像素值來(lái)計(jì)算B的像素值,但含有小數(shù)點(diǎn)位的像素是不存在的,這里稱為虛擬位置。

用原圖像A的值就能計(jì)算出放大后B的值,是不是很神奇?

實(shí)際上可以這樣認(rèn)為:雙線性插值就是把放大后的圖像再壓縮到原來(lái)圖像的尺寸大小,計(jì)算原圖像中虛擬的像素值,等同于計(jì)算放大后圖像的像素值,

對(duì)于本例來(lái)說(shuō),B圖像的步長(zhǎng)相當(dāng)于A圖像步長(zhǎng)的(3-1)/(4-1)=0.66667倍。下面我們就可以利用這個(gè)比率來(lái)對(duì)應(yīng)B中像素位置與A中虛擬像素位置的關(guān)系。

B(1,1) = A(1,1) (1-1)*0.66667+1=1

B(1,2) = A(1,1.66667) (2-1)*0.66667+1=1.66667

B(1,3) = A(1,2.33334) (3-1)*0.66667+1=2.33334

B(1,4) = A(1,3.00001) (4-1)*0.66667+1=3.00001

根據(jù)上面的對(duì)應(yīng)關(guān)系,我們就可以用代碼實(shí)現(xiàn)了。

現(xiàn)在還有一個(gè)問(wèn)題:

我們計(jì)算虛擬像素值是需要周圍四個(gè)原像素值,比如上列中的(下圖中紅圈圈住的部分)

A(1,3) = (1-0)(1-0)A(1,3) + (1-0)0A(1,4) + 0(1-0)A(2,3) + 00A(2,4)

顯然這里的A(1,4)和A(2,4)是無(wú)法索引到得,因?yàn)樵瓐D像是3x3的矩陣。

為了解決這個(gè)問(wèn)題,在A的最后一行,與最后一列分別加上0,這樣A就變成了4x4的矩陣。

圖示中擴(kuò)展的0行0列的元素位置用紅色的坐標(biāo)標(biāo)示,紅色斜箭頭把需要用到擴(kuò)展A矩陣的虛擬像素點(diǎn)位置都標(biāo)了出來(lái)。

實(shí)驗(yàn)結(jié)果:

原圖像:

放大四倍后的圖像:


代碼實(shí)現(xiàn):

主程序代碼:

clear ; close all; clc
image = imread('bird.png');  %載入圖像的值
r = image(:,:,1);     %由于真彩圖是紅藍(lán)綠三個(gè)像素的疊加
g = image(:,:,2);     %這里把r,g,b分離出來(lái)單獨(dú)調(diào)用函數(shù)計(jì)算
b = image(:,:,3);     %計(jì)算完成后再進(jìn)行組裝
%這里需要手動(dòng)設(shè)置放大的倍數(shù)
w = 4;   %w放大的是豎直方向
l = 4;   %l放大的是水平方向

r = extenRGB(r,w,l);  %調(diào)用函數(shù)計(jì)算放大后的r值
g = extenRGB(g,w,l);  %調(diào)用函數(shù)計(jì)算放大后的g值
b = extenRGB(b,w,l);  %調(diào)用函數(shù)計(jì)算放大后的b值
%下面把計(jì)算完成后的rgb再組裝起來(lái)
outRGB(:,:,1) = r;
outRGB(:,:,2) = g; 
outRGB(:,:,3) = b;

outRGB = uint8(outRGB);%格式轉(zhuǎn)換,否則無(wú)法顯示

imshow(outRGB);        %顯示放大后的圖像
 
 

主程序調(diào)用的函數(shù):

%像素放大計(jì)算函數(shù) extenRGB()
function Output = extenRGB(A,w,l)

% A矩陣分別代表r,g,b矩陣
[m,n] = size(A);      %讀取A的行和列 
A = [A;zeros(1,n)];   %在A的最后一行加入兩行0
A = [A zeros(m+1,1)]; %在A的最后一列加入兩列0
%這樣A就變成(m+1)x(n+1)的矩陣,這是為了解決索引A矩陣時(shí)的邊界溢出問(wèn)題

ini_u = (m-1)/(w*m-1); %步長(zhǎng)比,如果把原來(lái)的一步A(1,1)到A(2,1)看做1,那么計(jì)算放大后的
ini_v = (n-1)/(l*n-1); %圖像B(2,1)相當(dāng)于計(jì)算A(1+ini_u,1),即每步加ini_u
         

Output = zeros(w*m,l*n);            %初始化輸出矩陣
for j = 1:l*n;                      %左邊兩個(gè)語(yǔ)句的功能是:z_u,z_v向左取整,u,v取小數(shù),原理如下
    z_v = floor((j-1)*ini_v+1);     %比如A為3x3的矩陣,要放大為Output是4x4大小,即放大了4/3倍, 
      v = (j-1)*ini_v+1 - z_v;      %新的一步的距離相當(dāng)于原來(lái)的(3-1)/(4-1)=0.66667
    for i = 1:w*m;                  %Output(1,1) = A(1,1)       %(1-1)*0.66667+1=1
        z_u = floor((i-1)*ini_u+1); %Output(1,2) = A(1,1.66667) %(2-1)*0.66667+1=1.66667
          u = (i-1)*ini_u+1 - z_u;  %Output(1,3) = A(1,2.33334) %(3-1)*0.66667+1=2.33334
                                    %Output(1,4) = A(1,3.00001) %(4-1)*0.66667+1=3.00001
                                    
                                   

%===================下面是雙線性插值的代碼實(shí)現(xiàn)================================   
        Output(i,j) = (1 - u)*(1 - v)*A(z_u,     z_v    ) + ...
                      (1 - u)* v     *A(z_u,     z_v + 1) + ...
                       u     *(1 - v)*A(z_u + 1, z_v    ) + ...
                       u     * v     *A(z_u + 1, z_v + 1);
    end
end
       

總結(jié)

以上是生活随笔為你收集整理的使用双线性插值法放大图像(matlab实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。