声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 999|回复: 8

[综合讨论] 请教这个程序出了什么问题?

[复制链接]
发表于 2008-5-4 18:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
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 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2008-5-4 19:02 | 显示全部楼层
刚刚重新调试了一下,改了几个符号的距离,现在变成问题:??? Index exceeds matrix dimensions.
发表于 2008-5-4 19:25 | 显示全部楼层

回复 楼主 的帖子

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

评分

1

查看全部评分

发表于 2008-5-4 19:26 | 显示全部楼层


我试了一下,没有报错,但是有警告,如下:
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文件

tiaoshi.m

2.08 KB, 下载次数: 6

评分

1

查看全部评分

 楼主| 发表于 2008-5-4 21:08 | 显示全部楼层

回复 3楼 的帖子

这个程序是牛顿插值算法的一点改进
f36=(f3-f6)/-4;
我已经改了
 楼主| 发表于 2008-5-4 21:13 | 显示全部楼层
可以放大,不过只有图像的一角,
可能那些参数设置有问题
 楼主| 发表于 2008-5-4 23:51 | 显示全部楼层
哪个高手能提示一下,怎么放大会看不到全图?
发表于 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 编辑 ]

原图

原图

放大图

放大图

评分

1

查看全部评分

 楼主| 发表于 2008-5-5 09:59 | 显示全部楼层

回复 8楼 的帖子

呵呵,谢谢楼上的修改.
这个是牛顿插值图像放大,因为我改进用了两次插值所以速度非常慢.希望效果能好一点.
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-23 11:21 , Processed in 0.060879 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表