baishui 发表于 2008-5-4 18:39

请教这个程序出了什么问题?

clear
z=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 编辑 ]

baishui 发表于 2008-5-4 19:02

刚刚重新调试了一下,改了几个符号的距离,现在变成问题:??? Index exceeds matrix dimensions.

sigma665 发表于 2008-5-4 19:25

回复 楼主 的帖子

f3 6=(f3-f6)/-4;
变量名可以这样定义吗

ch_j1985 发表于 2008-5-4 19:26

原帖由 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文件

baishui 发表于 2008-5-4 21:08

回复 3楼 的帖子

这个程序是牛顿插值算法的一点改进
f36=(f3-f6)/-4;
我已经改了

baishui 发表于 2008-5-4 21:13

可以放大,不过只有图像的一角,
可能那些参数设置有问题

baishui 发表于 2008-5-4 23:51

哪个高手能提示一下,怎么放大会看不到全图?

laughzha 发表于 2008-5-5 08:49

你这个程序是不是把图片像素放大?我已成功调试.
程序中不知道你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 编辑 ]

baishui 发表于 2008-5-5 09:59

回复 8楼 的帖子

呵呵,谢谢楼上的修改.
这个是牛顿插值图像放大,因为我改进用了两次插值所以速度非常慢.希望效果能好一点.
页: [1]
查看完整版本: 请教这个程序出了什么问题?