通过二维序列的差值和抽取,设计一个对自己照片进行放缩的程序。要求显示放缩前后对比图。
使用MATLAB中imread函数读取图片后得到的是一个三维矩阵,要想实现对彩 {MOD}照片的抽取和插值,就要在每个维度上都进行抽取和插值。同时,使用imread函数得到的矩阵是uint8类型的数据,考虑到抽取和插值运算的精度,将矩阵的数据类型转换为double型。
clc,clear;
image_data=imread('1_1.jpg'); %读取图片
image_data=im2double(image_data); %数据类型转换
[m,n]=size(image_data(:,:,1));
for i=1:m
for j=1:n/2
for k=1:3
y1(i,j,k)=0;
end
end
end
for i=1:m/2
for j=1:n
for k=1:3
y2(i,j,k)=0;
end
end
end
for i=1:m
for j=1:n*2
for k=1:3
y3(i,j,k)=0;
end
end
end
for i=1:m*2
for j=1:n
for k=1:3
y4(i,j,k)=0;
end
end
end
for j=1:3
for i=1:m
y1(i,:,j)=decimate(image_data(i,:,j),2); %按行抽取
end
end
for j=1:3
for i=1:n
y2(:,i,j)=decimate(image_data(:,i,j),2); %按列抽取
end
end
for j=1:3
for i=1:m
y3(i,:,j)=interp(image_data(i,:,j),2); %按行插值
end
end
for j=1:3
for i=1:n
y4(:,i,j)=interp(image_data(:,i,j),2); %按列插值
end
end
figure
subplot(3,2,1);imshow(image_data);title('原图');
subplot(3,2,3);imshow(y1);title('按行抽取');
subplot(3,2,4);imshow(y2);title('按列抽取');
subplot(3,2,5);imshow(y3);title('按行插值');
subplot(3,2,6);imshow(y4);title('按列插值');