%作业3:将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);