提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:以下是本篇文章正文内容,下面案例可供参考
理论知识网上都有,这边直接展示代码和运行结果。
1、最邻近插值
%R 放大倍数
function M=closet(filename,R)
F=imread(filename);
[row,col,color]=size(F);
row=row*R;
col=col*R;
M=zeros(row,col,color,class(F));
for i=1:row
for j=1:col
for n=1:color
x = floor(i/R+0.5);
y = floor(j/R+0.5);
%为了避免出现‘位置 1 处的索引无效。数组索引必须为正整数或逻辑值’的问题。
%Matlab中的数组或矩阵的下标最小为1
if x==0
x=x+1
end
if y==0
y=y+1
end
M(i,j,n) = F(x,y,n);
end
end
end
figure(1);
imshow(F);
figure(2);
imshow(M)
end
注:这里我把代码写成了函数,使用时调用函数即可(文件名称根据自己的来)。
调用代码:
M=closet('写轮眼.jpg',3);
运行结果:
2、双线性插值
function A=bilinear(filename,C)
F=imread(filename);
[row,col,color]=size(F);
row=row*C;
col=col*C;
[d,e,f]=size(F);
A=zeros(row,col,color,class(F));
for i = 1:row
for j = 1:col
for n = 1:color
x = floor(i/C);
y = floor(j/C);
if x == 0
x = x+1;
end
if y ==0
y = y+1;
end
u = i/C-floor(i/C);
v = j/C-floor(j/C); %求出dx和dy
if x==d
x=x-1;
end
if y==e
y=y-1;
end
A(i,j,n) =(1-u)*(1-v)*F(x,y,n)+(1-u)*v*F(x+1,y,n)+u*(1-v)*F(x,y+1,n)+u*v*F(x+1,y+1,n);
end
end
end
figure(3);
imshow(F);
figure(4);
imshow(A)
end
运行结果:
结果分析:因为前两种插值都是彩色图像作为原图像,容易对比。两种插值方法的结果都是把原图像的一个像素分为9个小像素(放大可见,双线性较为明显);双线性插值的结果中9个小像素的颜色各不相同,出现了明显的颜色变化,这说明 该算法的功能性很好。
3、三次卷积插值
function g=SSJJ(filename,k)
F=imread(filename);
[m,n,color]=size(F);
f=rgb2gray(F);
a=f(1,:);
c=f(m,:) ; %将图像扩展四行四列
b=[f(1,1),f(1,1),f(:,1)',f(m,1),f(m,1)];
d=[f(1,n),f(1,n),f(:,n)',f(m,n),f(m,n)];
a1=[a;a;f;c;c];
b1=[b;b;a1';d;d];
f=b1';
f1=double(f);
for i=1:m*k
dx=i/k-floor(i/k);
x=floor(i/k)+2;
A=[sw(1+dx) sw(dx) sw(1-dx) sw(2-dx)]; %四个横坐标的权重W(i)
for j=1:n*k
dy=rem(j,k)/k;
y=floor(j/k)+2;
C=[sw(1+dy);sw(dy);sw(1-dy);sw(2-dy)];
B=[f1(x-1,y-1),f1(x-1,y) ,f1(x-1,y+1), f1(x-1,y+2)
f1(x ,y-1),f1(x, y),f1(x, y+1),f1(x, y+2)
f1(x+1,y-1),f1(x+1,y),f1(x+1,y+1),f1(x+1,y+2)
f1(x+2,y-1),f1(x+2,y),f1(x+2,y+1),f1(x+2,y+2)];
g1(i,j)=(A*B*C);
end
end
g=uint8(g1); %将矩阵转换成整数类型
imshow(g);
end
代码中用到的sw函数代码如下:
function A=sw(w1)
w=abs(w1);
a=-0.5;
if w<1&&w>=0
A=1-(a+3)*w^2+(a+2)*w^3;
else if w>=1&&w<2
A=a*w^3-5*a*w^2+(8*a)*w-4*a;
else
A=0;
end
end
end
运行结果:
总结:对比前两种插值方法很明显可以发现双线性插值的效果好于最邻近插值;理论上说三次卷积插值效果要好于前两种,这里不好做比较,就不再谈了。
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。