实验三:插值图像缩放

Modified: 2014/03/17 14:32 by admin - Uncategorized
%实验三:将tiger灰度图像放大3倍

% 读取彩色tiger图像(请从课程主页下载)
[img,map] = imread('tiger.jpg');

% 转化为灰度图像
g = zeros(300,300);
for x=1:300
    for y=1:300
        % 对每一个像素的RGB分量分别乘以系数0.2989,0.5870,0.1140再相加
        g(x,y) = img(x,y,1) * 0.2989 + img(x,y,2) * 0.5870 + img(x,y,3) * 0.1140;
    end
end
g = uint8(g);

% 显示tiger灰度图像
figure;
imshow(g);

% 放大3倍,为900*900
% 最近邻差值结果存放在big_nn中
big_nn = uint8(zeros(900,900));
% 双线性差值结果存放在big_bi中
big_bi = uint8(zeros(900,900));

% 向后差值
for x=1:900
    for y=1:900
        
        % 计算 (x,y) 在原图像中的位置 (xx,yy)
        xx = (x-1).*299./899+1;
        yy = (y-1).*299./899+1;
        
        % 计算最近邻位置
        xx_nn = round(xx);
        yy_nn = round(yy);
        % 取灰度
        big_nn(x,y) = g(xx_nn,yy_nn);
        
        % 计算双线性四角位置
        x1 = floor(xx); 
        if( x1==300 ) x1=x1-1; end
        x2 = x1+1;
        y1 = floor(yy); 
        if( y1==300 ) y1=y1-1; end
        y2 = y1+1;
        % (xx,yy)在四角内的相对位置
        xx = xx - x1;
        yy = yy - y1;
        % 取四角灰度
        l1 = g(x1,y1);
        l2 = g(x2,y1);
        l3 = g(x1,y2);
        l4 = g(x2,y2);
        % 根据双线性方程 f(x,y) = a*x + b*y + c*x*y + d 求得差值解
        il = (l2-l1).*xx + (l3-l1).*yy + (l4+l1-l2-l3).*xx.*yy + l1;
        big_bi(x,y) = round(il);
    end
end

% 显示最近邻差值结果
figure;
imshow(big_nn);

% 显示双线性差值结果
figure;
imshow(big_bi);

The end