请教这个程序出了什么问题?
clearz=imread('lena.jpg'); /*读入图像数据*/
y=zeros(150,593,3); /*建立三维数组*/
simulation_start=clock;
for t=1:3; /*行放大*/
for i=1:150;
for j=1:2:147;
f0=double(z(i,j,t));/*计算一阶,二阶差商*/
f3=double(z(i,j+1,t));
f6=double(z(i,j+2,t));
f36=(f3-f6)/-4;
f03=(f0-f3)/-4;
f036=(f03-f36)/-8;
x=0:8;
N=f0+f03.*x+f036.*x.*(x-4); /*基函数*/
y(i,(j-1)*4+1,t)=N(1);
y(i,(j-1)*4+2,t)=N(2);
y(i,(j-1)*4+3,t)=N(3);
y(i,(j-1)*4+4,t)=N(4);
y(i,(j-1)*4+5,t)=N(5);
y(i,(j-1)*4+6,t)=N(6);
y(i,(j-1)*4+7,t)=N(7);
y(i,(j-1)*4+8,t)=N(8);
y(i,(j-1)*4+9,t)=N(9);
end
end
end
for t=1:3; /*二次行放大*/
for i=1:150;
for j=5:4:585;
f0=y(i,j,t);/*计算一阶,二阶差商*/
f3=y(i,j+4,t);
f6=y(i,j+8,t);
f36=(f3-f6)/-4;
f03=(f0-f3)/-4;
f036=(f03-f36)/-8;
N=f0+f03.*x+f036.*x.*(x-4); /*基函数*/
y(i,j+1,t)=N(2);
y(i,j+2,t)=N(3);
y(i,j+3,t)=N(4);
y(i,j+4,t)=N(5);
y(i,j+5,t)=N(6);
y(i,j+6,t)=N(7);
y(i,j+7,t)=N(8);
end
end
end
for s=1:3; /*列放大*/
for m=1:150;
for n=1:2:147;
f0=y(n,m,s); /*计算一阶,二阶差商*/
f3=y(n+1,m,s);
f6=y(n+2,m,s);
f03=(f0-f3)/-4;
f36=(f3-f6)/-4;
f036=(f03-f36)/-8;
NN=f0+f03.*x+f036.*x.*(x-4);/*基函数*/
h((n-1)*4+1,m,s)=NN(1);
h((n-1)*4+2,m,s)=NN(2);
h((n-1)*4+3,m,s)=NN(3);
h((n-1)*4+4,m,s)=NN(4);
h((n-1)*4+5,m,s)=NN(5);
h((n-1)*4+6,m,s)=NN(6);
h((n-1)*4+7,m,s)=NN(7);
h((n-1)*4+8,m,s)=NN(8);
h((n-1)*4+9,m,s)=NN(9);
end
end
end
for s=1:3;/*二次列放大*/
for m=1:150;
for n=5:4:585;
f0=h(n,m,s);/*计算一阶,二阶差商*/
f3=h(n+4,m,s);
f6=h(n+8,m,s);
f03=(f0-f3)/-4;
f36=(f3-f6)/-4;
f036=(f03-f36)/-8;
NN=f0+f03.*x+f036.*x.*(x-4);/*基函数*/
h(n+1,m,s)=NN(2);
h(n+2,m,s)=NN(3);
h(n+3,m,s)=NN(4);
h(n+4,m,s)=NN(5);
h(n+5,m,s)=NN(6);
h(n+6,m,s)=NN(7);
h(n+7,m,s)=NN(8);
end
end
end
simulation_end=clock; /*记录时间*/
time=fix(etime(simulation_end,simulation_start));
k=uint8(h);
imshow(k) /*显示结果*/
出现的错误是:
??? Error: "f3" was previously used as a variable,
conflicting with its use here as the name of a function.
[ 本帖最后由 eight 于 2008-5-4 21:51 编辑 ] 刚刚重新调试了一下,改了几个符号的距离,现在变成问题:??? Index exceeds matrix dimensions.
回复 楼主 的帖子
f3 6=(f3-f6)/-4;变量名可以这样定义吗 原帖由 baishui 于 2008-5-4 19:02 发表 http://www.chinavib.com/forum/images/common/back.gif
刚刚重新调试了一下,改了几个符号的距离,现在变成问题:??? Index exceeds matrix dimensions.
我试了一下,没有报错,但是有警告,如下:
Warning: Image is too big to fit on screen; displaying at 67%
In imuitools\private\initSize at 73
In imshow at 264
In tiaoshi at 95
附件为代码m文件
回复 3楼 的帖子
这个程序是牛顿插值算法的一点改进f36=(f3-f6)/-4;
我已经改了 可以放大,不过只有图像的一角,
可能那些参数设置有问题 哪个高手能提示一下,怎么放大会看不到全图? 你这个程序是不是把图片像素放大?我已成功调试.
程序中不知道你150,593,147,585等数字是从哪里来的.
我作了一些修改,请注意红色部分为修改部分.
另外想说一句,你这程序运行的也太慢了:@Q
clear
z=imread('hehe.jpg'); %/*读入图像数据*/
y=zeros(size(z));
simulation_start=clock;
for t=1:3; %/*行放大*/
for i=1:size(z,1)
for j=1:2:size(z,2)-2
f0=double(z(i,j,t));%/*计算一阶,二阶差商*/
f3=double(z(i,j+1,t));
f6=double(z(i,j+2,t));
f36=(f3-f6)/-4;
f03=(f0-f3)/-4;
f036=(f03-f36)/-8;
x=0:8;
N=f0+f03.*x+f036.*x.*(x-4); %/*基函数*/
y(i,(j-1)*4+1,t)=N(1);
y(i,(j-1)*4+2,t)=N(2);
y(i,(j-1)*4+3,t)=N(3);
y(i,(j-1)*4+4,t)=N(4);
y(i,(j-1)*4+5,t)=N(5);
y(i,(j-1)*4+6,t)=N(6);
y(i,(j-1)*4+7,t)=N(7);
y(i,(j-1)*4+8,t)=N(8);
y(i,(j-1)*4+9,t)=N(9);
end
end
end
for t=1:3; %/*二次行放大*/
for i=1:size(z,1)
for j=5:4:size(z,2)-8
f0=y(i,j,t);%/*计算一阶,二阶差商*/
f3=y(i,j+4,t);
f6=y(i,j+8,t);
f36=(f3-f6)/-4;
f03=(f0-f3)/-4;
f036=(f03-f36)/-8;
N=f0+f03.*x+f036.*x.*(x-4); %/*基函数*/
y(i,j+1,t)=N(2);
y(i,j+2,t)=N(3);
y(i,j+3,t)=N(4);
y(i,j+4,t)=N(5);
y(i,j+5,t)=N(6);
y(i,j+6,t)=N(7);
y(i,j+7,t)=N(8);
end
end
end
for s=1:3; %/*列放大*/
for m=1:size(y,2)
for n=1:2:size(y,1)-2
f0=y(n,m,s); %/*计算一阶,二阶差商*/
f3=y(n+1,m,s);
f6=y(n+2,m,s);
f03=(f0-f3)/-4;
f36=(f3-f6)/-4;
f036=(f03-f36)/-8;
NN=f0+f03.*x+f036.*x.*(x-4);%/*基函数*/
h((n-1)*4+1,m,s)=NN(1);
h((n-1)*4+2,m,s)=NN(2);
h((n-1)*4+3,m,s)=NN(3);
h((n-1)*4+4,m,s)=NN(4);
h((n-1)*4+5,m,s)=NN(5);
h((n-1)*4+6,m,s)=NN(6);
h((n-1)*4+7,m,s)=NN(7);
h((n-1)*4+8,m,s)=NN(8);
h((n-1)*4+9,m,s)=NN(9);
end
end
end
for s=1:3;%/*二次列放大*/
for m=1:size(y,2)
for n=5:4:size(y,1)-8
f0=h(n,m,s);%/*计算一阶,二阶差商*/
f3=h(n+4,m,s);
f6=h(n+8,m,s);
f03=(f0-f3)/-4;
f36=(f3-f6)/-4;
f036=(f03-f36)/-8;
NN=f0+f03.*x+f036.*x.*(x-4);%/*基函数*/
h(n+1,m,s)=NN(2);
h(n+2,m,s)=NN(3);
h(n+3,m,s)=NN(4);
h(n+4,m,s)=NN(5);
h(n+5,m,s)=NN(6);
h(n+6,m,s)=NN(7);
h(n+7,m,s)=NN(8);
end
end
end
simulation_end=clock; %/*记录时间*/
time=fix(etime(simulation_end,simulation_start));
k=uint8(h);
imshow(k) %/*显示结果*/
图片显示效果如下:
[ 本帖最后由 laughzha 于 2008-5-5 09:11 编辑 ]
回复 8楼 的帖子
呵呵,谢谢楼上的修改.这个是牛顿插值图像放大,因为我改进用了两次插值所以速度非常慢.希望效果能好一点.
页:
[1]