%实验三:将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);