matlab怎么给图像描边

matlab怎么给图像描边,第1张

格式:B = bwboundaries(BW,conn)(基本格式)

作用:获取二值图中对象的轮廓,和OpenCV中cvFindContours函数功能类似。B是一个P×1的cell数组,P为对象个数,每个cell是Q×2的矩阵,对应于对象轮廓像素的坐标。

help 文档例子

I = imread('ricepng');%读入图像

BW = im2bw(I, graythresh(I));%转换成2进制图像

[B,L] = bwboundaries(BW,'noholes');%寻找边缘,不包括孔

imshow(label2rgb(L, @jet, [5 5 5]))%显示图像

hold on

for k = 1:length(B)

boundary = B{k};

plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2)

end%整个循环表示的是描边

#include "mathh"

main()

{

long int i,x,y,z;

for (i=1;i<100000;i++)

 { x=sqrt(i+100); /x为加上100后开方后的结果/

y=sqrt(i+268); /y为再加上168后开方后的结果/

 if(xx==i+100&&yy==i+268)/如果一个数的平方根的平方等于该数,这说明此数是完全平方数/

printf("\n%ld\n",i);

  }

}

matlab里的函数imcontour即可。

用法:[C,handle] = imcontour(I),I是图像,C是返回的轮廓位置坐标

具体的用法可以在matlab中 help imcontour

h=15;

b=90pi/180;

r0=30;

e=5;

rr=6;

w=10;

s0=sqrt(r0r0-ee);

for i=1:1:90;

sita(i)=ipi/1800;

s1=h(sita(i)/b-sin(2pisita(i)/b)/(2pi));

v1=hw/b-whcos(sita(i)2pi/b)/b;

a1=sin(sita(i)2pi/b)w^22pi/(b^2);

j1=cos(sita(i)2pi/b)w^34pi^2/(b^3);

x(i)=(s0+s1)sin(sita(i))+ecos(sita(i));

y(i)=(s0+s1)cos(sita(i))-esin(sita(i));

a(i)=(s0+s1)cos(sita(i))-esin(sita(i));

bb(i)=(s0+s1)sin(sita(i))-ecos(sita(i));

xx(i)=x(i)-rrbb(i)/sqrt(a(i)a(i)+bb(i)bb(i));

yy(i)=y(i)-rra(i)/sqrt(a(i)a(i)+bb(i)bb(i));

alpha(i)=atan((v1-e)/(s0+s1));

end

for i=91:1:180;

sita(i)=ipi/180;

s2=h;

v2=0;

a2=0;

j2=0;

x(i)=(s0+s2)sin(sita(i))+ecos(sita(i));

y(i)=(s0+s2)cos(sita(i))-esin(sita(i));

a(i)=(s0+s1)cos(sita(i))-esin(sita(i));

bb(i)=(s0+s1)sin(sita(i))-ecos(sita(i));

xx(i)=x(i)-rrbb(i)/sqrt(a(i)a(i)+bb(i)bb(i));

yy(i)=y(i)-rra(i)/sqrt(a(i)a(i)+bb(i)bb(i));

alpha(i)=atan((v2-e)/(s0+s2));

end

for i=181:1:270;

sita(i)=ipi/180;

s3=-h((sita(i)-3pi/2)/b-sin(2pi(sita(i)-3pi/2)/b)/(2pi));

v3=hw/b+hw/bcos(2pi(sita(i)-3pi/2)/b);

a3=-h(w^2)2pi/(b^2)sin(2pi(sita(i)-3pi/2));

j3=-hw^34pi^2/(b^3)cos(2pi(sita(i)-3pi/2));

x(i)=(s0+s3)sin(sita(i))+ecos(sita(i));

y(i)=(s0+s3)cos(sita(i))-esin(sita(i));

a(i)=(s0+s3)cos(sita(i))-esin(sita(i));

bb(i)=(s0+s3)sin(sita(i))-ecos(sita(i));

xx(i)=x(i)-rrbb(i)/sqrt(a(i)a(i)+bb(i)bb(i));

yy(i)=y(i)-rra(i)/sqrt(a(i)a(i)+bb(i)bb(i));

alpha(i)=atan((v3-e)/(s0+s3));

end

for i=271:1:360;

sita(i)=ipi/180;

s4=0;

v4=0;

a4=0;

j4=0;

x(i)=(s0+s4)sin(sita(i))+ecos(sita(i));

y(i)=(s0+s4)cos(sita(i))-esin(sita(i));

a(i)=(s0+s4)cos(sita(i))-esin(sita(i));

bb(i)=(s0+s4)sin(sita(i))-ecos(sita(i));

xx(i)=x(i)-rrbb(i)/sqrt(a(i)a(i)+bb(i)bb(i));

yy(i)=y(i)-rra(i)/sqrt(a(i)a(i)+bb(i)bb(i));

alpha(i)=atan((v4-e)/(s0+s4));

end

主要问题是,一开始定义了变量b=90pi/180是一个标量常数

后来循环计算中用了b(i)结果是一个数组

你这里肯定是变量太多,搞混了

前面的b,和数组b(i)应该是两个不同的变量

所以我把数组改名字为bb,就没有报错了

你也可以将一开始的b改个名字

蒙特卡洛法实质上就是通过大量的随机采样关节向量,通过正解得到一系列的位于工作空间内的点。大概过程:

1在关节向量范围内随机采样theta_14,可以这样写limit_low+rangerand(1,4),其中limit_low是关节下限位,range是关节的运动范围,都是14维;

2利用你推导的正解求出末端的位姿,如果只画点,提取位置向量P(3维);

3利用plot3指令显示点;

4循环1~3步即可以(如采样1W个点)大概看出工作空间的形状和分布。

PS:不知道机器人本身运动会否碰撞,绘制出来的工作空间云图可能包含碰撞部分。另外,少自由度的关节型的机械臂,其实用几何法直接求出工作空间的解析表达式更为实用。蒙特卡洛法得到云图后,又能如何用于实际?

以上就是关于matlab怎么给图像描边全部的内容,包括:matlab怎么给图像描边、MATLAB中如何画图像中心线,即图像轮廓上的所有点到直线的距离最短,MATLAB小白急求大神相助,谢谢!、如何使用matlab提取图像轮廓的坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10639812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存