找回密码
 注册
Simdroid-非首页
查看: 100|回复: 1

帮我看一个程序,给这个程序求出的矩阵赋予个名称

[复制链接]
发表于 2010-10-26 10:37:49 | 显示全部楼层 |阅读模式 来自 江西赣州
function imgrad=shiyan1a=imread('klj.jpg');imshow(a);[x y]=ginput(2);x=round(x);y=round(y);n1=abs(x(1)-x(2))+1;n2=abs(y(1)-y(2))+1;[n which_max]=max([n1,n1]);imgrad=ones(3,n);for i=1:3    b=a(:,:,i);    if y(1)<y(2)&&x(1)<x(2)        if which_max==1            xx=x(1):x(2);            yy=subf(x,y,xx);        else            yy=y(1):y(2);            xx=subf(x,y,yy);        end    elseif y(1)<y(2)&&x(1)>x(2)        if which_max==1            xx=x(2):x(1);            yy=subf(x,y,xx);        else            yy=y(1):y(2);            xx=subf(x,y,yy);        end    elseif y(1)>y(2)&&x(1)<x(2)        if which_max==1            xx=x(1):x(2);            yy=subf(x,y,xx);        else            yy=y(2):y(1);            xx=subf(x,y,yy);        end    elseif y(1)>y(2)&&x(1)>x(2)        if which_max==1            xx=x(2):x(1);            yy=subf(x,y,xx);        else            yy=y(2):y(1);            xx=subf(x,y,yy);        end    end        ind=sub2ind(size(b),yy,xx);    data=b(ind);    data=double(data);    imgrad(i,:)=gradient(data);endfunction coordinate=subf(x,y,input)k=(y(1)-y(2))/(x(1)-x(2));if abs(x(1)-x(2))>=abs(y(1)-y(2))    coordinate=k*(input-x(1))+y(1);    coordinate=round(coordinate);else    coordinate=(input-y(1))/k+x(1);    coordinate=round(coordinate);end 以上代码是用来给图片求颜色变化梯度的,求出来的是一个3行n列的矩阵,我想给这个矩阵赋予一个名称,方便后面对其进行操作,但是不知道该怎么添加代码,请高手解惑,谢谢!!!
发表于 2010-10-26 20:58:34 | 显示全部楼层 来自 黑龙江哈尔滨
Simdroid开发平台
本帖最后由 messenger 于 2010-10-27 20:30 编辑

真服了,怎么贴出来的代码没有换行呢?

如果想给求出来的矩阵赋一个名,只要在调用函数前面加=号就可以了。

比如,你将这段程序存为
shiyan.m文件,在调用时用 x=shiyan,就把求出来的矩阵赋成 x 这个矩阵名了。


建议你找一本基础的Matlab书,看看函数调用方面的内容。



  1. function imgrad=shiyan1
  2. a=imread('klj.jpg');
  3. imshow(a);
  4. [x y]=ginput(2);
  5. x=round(x);
  6. y=round(y);
  7. n1=abs(x(1)-x(2))+1;
  8. n2=abs(y(1)-y(2))+1;
  9. [n which_max]=max([n1,n1]);
  10. imgrad=ones(3,n);
  11. for i=1:3   
  12. b=a(:,:,i);   
  13. if y(1)<y(2)&&x(1)<x(2)        
  14. if which_max==1           
  15. xx=x(1):x(2);            
  16. yy=subf(x,y,xx);        
  17. else            
  18. yy=y(1):
  19. y(2);           
  20. xx=subf(x,y,yy);        
  21. end   
  22. elseif
  23. y(1)<y(2)&&x(1)>x(2)        
  24. if which_max==1            
  25. xx=x(2):x(1);            
  26. yy=subf(x,y,xx);        
  27. else            
  28. yy=y(1):y(2);            
  29. xx=subf(x,y,yy);        
  30. end   
  31. elseif y(1)>y(2)&&x(1)<x(2)        
  32. if which_max==1            
  33. xx=x(1):x(2);            
  34. yy=subf(x,y,xx);        
  35. else            
  36. yy=y(2):y(1);            
  37. xx=subf(x,y,yy);        
  38. end   
  39. elseif y(1)>y(2)&&x(1)>x(2)        
  40. if which_max==1            
  41. xx=x(2):x(1);            
  42. yy=subf(x,y,xx);        
  43. else            
  44. yy=y(2):y(1);            
  45. xx=subf(x,y,yy);        
  46. end   
  47. end        
  48. ind=sub2ind(size(b),yy,xx);   
  49. data=b(ind);   
  50. data=double(data);   
  51. imgrad(i,:)=gradient(data);
  52. end

  53. function coordinate=subf(x,y,input)
  54. k=(y(1)-y(2))/(x(1)-x(2));
  55. if abs(x(1)-x(2))>=abs(y(1)-y(2))   
  56. coordinate=k*(input-x(1))+y(1);   
  57. coordinate=round(coordinate);
  58. else   
  59. coordinate=(input-y(1))/k+x(1);   
  60. coordinate=round(coordinate);
  61. end

复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-6-29 13:15 , Processed in 0.037275 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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