matlab练习程序(图像放大/缩小,双线性插值)
生活随笔
收集整理的這篇文章主要介紹了
matlab练习程序(图像放大/缩小,双线性插值)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
半年前寫過matlab最鄰近插值的圖像縮放,沒怎么考慮邊界問題。更早之前用Opencv寫過雙線性插值圖像放大,不過寫的比較混亂。所以這里用matlab重新再清楚的寫一遍。
close all; clear all; clc;m=1.8; %放大或縮小的高度 n=2.3; %放大或縮小的寬度 img=imread('lena.jpg'); imshow(img); [h w]=size(img); imgn=zeros(h*m,w*n); rot=[m 0 0;0 n 0;0 0 1]; %變換矩陣for i=1:h*mfor j=1:w*npix=[i j 1]/rot; float_Y=pix(1)-floor(pix(1)); float_X=pix(2)-floor(pix(2));if pix(1) < 1 %邊界處理pix(1) = 1;endif pix(1) > hpix(1) = h;endif pix(2) < 1pix(2) =1;endif pix(2) > wpix(2) =w;endpix_up_left=[floor(pix(1)) floor(pix(2))]; %四個相鄰的點pix_up_right=[floor(pix(1)) ceil(pix(2))];pix_down_left=[ceil(pix(1)) floor(pix(2))];pix_down_right=[ceil(pix(1)) ceil(pix(2))]; value_up_left=(1-float_X)*(1-float_Y); %計算臨近四個點的權重value_up_right=float_X*(1-float_Y);value_down_left=(1-float_X)*float_Y;value_down_right=float_X*float_Y;%按權重進行雙線性插值imgn(i,j)=value_up_left*img(pix_up_left(1),pix_up_left(2))+ ...value_up_right*img(pix_up_right(1),pix_up_right(2))+ ...value_down_left*img(pix_down_left(1),pix_down_left(2))+ ...value_down_right*img(pix_down_right(1),pix_down_right(2)); end endfigure,imshow(uint8(imgn))
原圖
?放大后的。
轉載于:https://www.cnblogs.com/tiandsp/archive/2012/12/03/2800201.html
總結
以上是生活随笔為你收集整理的matlab练习程序(图像放大/缩小,双线性插值)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 西安拟制定羊肉泡馍肉夹馍制作标准
- 下一篇: 一年一次!互联网女皇又来了!今年她说了这