格式: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提取图像轮廓的坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)