声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1274|回复: 2

[编程技巧] 请各位高人帮我修改一下算法中的错误,谢谢

[复制链接]
发表于 2006-4-8 16:30 | 显示全部楼层 |阅读模式

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

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

x
  1. function f=gradephase(x)
  2. I=imread('go.tif');
  3. x=rgb2gray(I);
  4. gradephase(x)
  5. function gradephase(x)
  6. [m,n]=size(x);
  7. bw=edge(x,'sobel');
  8. gy=x(1:m-1,1:n-1)-x(2:m,1:n-1);
  9. gx=x(1:m-1,1:n-1)-x(1:m-1,2:n);
  10. g=gy./(gx+eps);
  11. ph=atan(g)+(sign(gx)<0&sign(gy)>0)*pi+(sign(gx)<0&sign(gy)<0)*pi+(sign(gx)>0&sign(gy)<0)*2*pi+(sign(gx)==0)*pi;
  12. grdgp=floor(ph/pi*4)+1;
  13. cn=0;s=[];
  14. In_spt=cell(1,1);
  15. pline=[];
  16. for i=2:m-1
  17. for j=2:n-1
  18. if bw(I,j)~=0&grdgp(i,j)~=0
  19. ph_cp=grdgp(i,j);grdgp(I,j);bw(I,j);
  20. cn=cn+1;p=[I,j]';
  21. while ~isempty(s)
  22. [cs,rs]=size(s);
  23. ps=s(:,rs);s=s(:,1:rs-1);
  24. col=ps(1,1);row=ps(2,1);
  25. if legal(cil+1,row,m,n)&grdgp(col+1,row)==ph_cp
  26. s=[s,[col+1,row]'];In_spt{cn}=[In_spt{cn},[col+1,row]'];
  27. bw(col+1,row)=0;grdgp(col+1,row)=0;
  28. end
  29. if legal(col+1,row+1,m,n)&grdgp(col+1,row+1)==ph_cp
  30. s=[s,[col+1,row+1]'];In_spt{cn}=[In_spt{cn},[col+1,row+1]'];
  31. bw(col+1,row+1)=0;grdgp(col+1,row+1)=0;
  32. end
  33. if legal(col,row+1,m,n)&grdgp(col,row+1)==ph_cp
  34. s=[s,[col,row+1]'];In_spt{cn}=[In_spt{cn},[col,row+1]'];
  35. bw(col,row+1)=0;grdgp(col,row+1)=0;
  36. end
  37. if legal(col-1,row+1,m,n)&grdgp(col-1,row+1)==ph_cp
  38. s=[s,[col-1,row+1]'];In_spt{cn}=[In_spt{cn},[col-1,row+1]'];
  39. bw(col-1,row+1)=0;grdgp(col-1,row+1)=0;
  40. end
  41. if legal(col-1,row,m,n)&grdgp(col-1,row)==ph_cp
  42. s=[s,[col-1,row]'];In_spt{cn}=[In_spt{cn},[col-1,row]'];
  43. bw(col-1,row)=0;grdgp(col-1,row)=0;
  44. end
  45. if legal(col-1,row-1,m,n)&grdgp(col-1,row-1)==ph_cp
  46. s=[s,[col-1,row-1]'];In_spt{cn}=[In_spt{cn},[col-1,row-1]'];
  47. bw(col-1,row-1)=0;grdgp(col-1,row-1)=0;
  48. end
  49. if legal(col,row-1,m,n)&grdgp(col,row-1)==ph_cp
  50. s=[s,[col,row-1]'];In_spt{cn}=[In_spt{cn},[col,row-1]'];
  51. bw(col,row-1)=0;grdgp(col,row-1)=0;
  52. end
  53. if legal(col+1,row-1,m,n)&grdgp(col+1,row-1)==ph_cp
  54. s=[s,[col+1,row-1]'];In_spt{cn}=[In_spt{cn},[col+1,row-1]'];
  55. bw(col+1,row-1)=0;grdgp(col+1,row-1)=0;
  56. end
  57. end
  58. if length(In_spt{cn})<=10
  59. In_spt{cn}=[];
  60. cn=cn-1;
  61. else
  62. plne=draw_l(In_spt{cn});
  63. pline=[pline,plne];
  64. c(i)=lengh(In_spt{cn});
  65. end
  66. end
  67. end
  68. end
复制代码
回复
分享到:

使用道具 举报

发表于 2006-4-8 23:50 | 显示全部楼层
这么长,高手们看也要半天吧
你把错误说出来
他们才会相应地给你看的
我是不会:)
发表于 2006-4-9 08:32 | 显示全部楼层
function f=gradephase(x)
I=imread('go.tif');
x=rgb2gray(I);
x=double(x);
gradephase(x)
function gradephase(x)
[m,n]=size(x);
bw=edge(x,'sobel');
gy=x(1:m-1,1:n-1)-x(2:m,1:n-1);
gx=x(1:m-1,1:n-1)-x(1:m-1,2:n);
g=gy./(gx+eps);
ph=atan(g)+(sign(gx)<0&sign(gy)>0)*pi+(sign(gx)<0&sign(gy)<0)*pi+(sign(gx)>0&sign(gy)<0)*2*pi+(sign(gx)==0)*pi;
grdgp=floor(ph/pi*4)+1;
cn=0;s=[];
In_spt=cell(1,1);
pline=[];
for i=2:m-1
for j=2:n-1
if bw(I,j)~=0&grdgp(i,j)~=0
ph_cp=grdgp(i,j);grdgp(I,j);bw(I,j);
cn=cn+1;p=[I,j]';

while ~isempty(s)
[cs,rs]=size(s);
ps=s(:,rs);s=s(:,1:rs-1);
col=ps(1,1);row=ps(2,1);
if legal(cil+1,row,m,n)&grdgp(col+1,row)==ph_cp
s=[s,[col+1,row]'];In_spt{cn}=[In_spt{cn},[col+1,row]'];
bw(col+1,row)=0;grdgp(col+1,row)=0;
end
if legal(col+1,row+1,m,n)&grdgp(col+1,row+1)==ph_cp
s=[s,[col+1,row+1]'];In_spt{cn}=[In_spt{cn},[col+1,row+1]'];
bw(col+1,row+1)=0;grdgp(col+1,row+1)=0;
end
if legal(col,row+1,m,n)&grdgp(col,row+1)==ph_cp
s=[s,[col,row+1]'];In_spt{cn}=[In_spt{cn},[col,row+1]'];
bw(col,row+1)=0;grdgp(col,row+1)=0;
end
if legal(col-1,row+1,m,n)&grdgp(col-1,row+1)==ph_cp
s=[s,[col-1,row+1]'];In_spt{cn}=[In_spt{cn},[col-1,row+1]'];
bw(col-1,row+1)=0;grdgp(col-1,row+1)=0;
end
if legal(col-1,row,m,n)&grdgp(col-1,row)==ph_cp
s=[s,[col-1,row]'];In_spt{cn}=[In_spt{cn},[col-1,row]'];
bw(col-1,row)=0;grdgp(col-1,row)=0;
end
if legal(col-1,row-1,m,n)&grdgp(col-1,row-1)==ph_cp
s=[s,[col-1,row-1]'];In_spt{cn}=[In_spt{cn},[col-1,row-1]'];
bw(col-1,row-1)=0;grdgp(col-1,row-1)=0;
end
if legal(col,row-1,m,n)&grdgp(col,row-1)==ph_cp
s=[s,[col,row-1]'];In_spt{cn}=[In_spt{cn},[col,row-1]'];
bw(col,row-1)=0;grdgp(col,row-1)=0;
end
if legal(col+1,row-1,m,n)&grdgp(col+1,row-1)==ph_cp
s=[s,[col+1,row-1]'];In_spt{cn}=[In_spt{cn},[col+1,row-1]'];
bw(col+1,row-1)=0;grdgp(col+1,row-1)=0;
end
end
if length(In_spt{cn})<=10
In_spt{cn}=[];
cn=cn-1;
else
plne=draw_l(In_spt{cn});
pline=[pline,plne];
c(i)=lengh(In_spt{cn});
end
end
end
end


你这里的错误都很简单的,自己仔细检查一下就不应该出现的
1. 两个函数重名了,看红色标记
2. 数据类型不对,增加蓝色标记部分
3. 字母大小写问题,matlab严格区分大小写,I改称i就行了,粉色标记部分
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-20 19:33 , Processed in 0.066058 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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