資源簡介
matlab圖像插值,包括最近鄰法,雙線性內插法,三次卷積內插法

代碼片段和文件信息
%?直接讀取RGB圖像數據------------------------------------------------------------------------
RGB?=?imread(‘x.jpg‘);
R?=?RGB(::1);
G?=?RGB(::2);
B?=?RGB(::3);
[nrowsncolsncoms]=size(RGB);
%?鍵入放大的比例系數并輸出原圖像
K?=?str2double(inputdlg(‘請輸入放大系數‘?‘請輸入放大系數‘?1?{‘5.0‘}));
figure(‘Name‘‘原圖‘)
imshow(RGB);
%?創建輸出圖像的空矩陣
width?=?K?*?ncols;
height?=?K?*?nrows;
RR?=?uint8(zeros(heightwidth));
GG?=?uint8(zeros(heightwidth));
BB?=?uint8(zeros(heightwidth));
OUT?=?uint8(zeros(heightwidthncoms));
%?映射比例,即原圖放大倍數的倒數
widthScale?=?1/K;
heightScale?=?1/K;
???????
%雙線性內插*********************************-------------------------------------------------
for?x?=?1:width??
???for?y?=?1:height
???????xx?=?x?*?widthScale;?%%坐標映射(x為放大后圖像坐標,xx為映射之后原圖像的坐標)
???????yy?=?y?*?heightScale;%坐標映射
????????if?(xx?<=?1.0)%防止左邊界溢出
??????????xx?=?1;
???????end
???????if?(xx?>=?ncols)%防止右邊界溢出
??????????xx?=?ncols-1;
???????end
???????if?(yy?<=?1.0)
??????????yy?=?1;
???????end
???????if?(yy?>=?nrows?)
??????????yy?=?nrows-1?;
???????end
???????if?(xx/double(uint16(xx))?==?1.0)?&&?(yy/double(uint16(yy))?==?1.0)?%?如果映射后坐標為整數,就取映射后坐標的像元值
???????????RR(yx)?=?R(int16(yy)int16(xx));
???????????GG(yx)?=?G(int16(yy)int16(xx));
???????????BB(yx)?=?B(int16(yy)int16(xx));
???????else??????????
???????????a?=?double(fix(yy));%放大后圖像點(xy)所對應的原圖像上的點(xx,yy)的向零取整近坐標(ab)
???????????b?=?double(fix(xx));
???????????
???????????r11?=?double(R(ab));
???????????r12?=?double(R(ab+1));
???????????r21?=?double(R(a+1b));
???????????r22?=?double(R(a+1b+1));
???????????RR(yx)?=?uint8(?(b+1-xx)?*?((yy-a)*r21?+?(a+1-yy)*r11)?+?(xx-b)?*?((yy-a)*r22?+(a+1-yy)?*?r12)?);%雙線性內插
???????????
???????????g11?=?double(G(ab));
???????????g12?=?double(G(ab+1));
???????????g21?=?double(G(a+1b));
???????????g22?=?double(G(a+1b+1));
???????????GG(yx)?=?uint8(?(b+1-xx)?*?((yy-a)*g21?+?(a+1-yy)*g11)?+?(xx-b)?*?((yy-a)*g22?+(a+1-yy)?*?g12)?);
???????????
???????????b11?=?double(B(ab));
???????????b12?=?double(B(ab+1));
???????????b21?=?double(B(a+1b));
???????????b22?=?double(B(a+1b+1));
???????????BB(yx)?=?uint8(?(b+1-xx)?*?((yy-a)*b21?+?(a+1-yy)*b11)?+?(xx-b)?*?((yy-a)*b22?+(a+1-yy)?*?b12)?);
???????end
????end
end
OUT(::1)?=?RR;
OUT(::2)?=?GG;
OUT(::3)?=?BB;
%在當前文件夾保存圖像
imwrite(OUT?‘bilinear.jpg‘?‘jpg‘);
figure(‘Name‘‘雙線性內插‘)
%顯示圖像?
imshow(OUT);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????7008??2017-10-28?19:56??interpolation.m
?????文件???????1961??2017-10-28?17:55??Nearest.m
?????文件????????402??2017-10-28?15:22??SinXDivX.m
?????文件???????2733??2017-10-28?17:49??Three_convolution.m
?????文件???????2600??2017-10-28?17:54??bilinear.m
-----------?---------??----------?-----??----
????????????????14704????????????????????5
- 上一篇:配電網粒子群算法
- 下一篇:數字下變頻MATLAB仿真程序
評論
共有 條評論