Image 视野/凸度贴图
在逻辑图像的形状上,我试图在matlab上从形状内部的任何点提取视野: 我尝试了一些涉及到测试穿过点的每条线的方法,但它确实很长。(我希望对形状的每个点或者至少它的轮廓的每个点进行测试,这是相当多的次数) 我认为一种更快的方法是从考虑的角度通过扩展磁盘来迭代工作,但我不确定如何做到这一点 我怎样才能有效地找到这个视野Image 视野/凸度贴图,image,matlab,image-processing,geometry,convex,Image,Matlab,Image Processing,Geometry,Convex,在逻辑图像的形状上,我试图在matlab上从形状内部的任何点提取视野: 我尝试了一些涉及到测试穿过点的每条线的方法,但它确实很长。(我希望对形状的每个点或者至少它的轮廓的每个点进行测试,这是相当多的次数) 我认为一种更快的方法是从考虑的角度通过扩展磁盘来迭代工作,但我不确定如何做到这一点 我怎样才能有效地找到这个视野 任何想法或解决方案都将不胜感激,谢谢。以下是一种可能的方法(背后的原则): 我创建了这个测试图像和一个任意的观点: testscene=zeros(500); testscene
任何想法或解决方案都将不胜感激,谢谢。以下是一种可能的方法(背后的原则): 我创建了这个测试图像和一个任意的观点:
testscene=zeros(500);
testscene(80:120,80:120)=1;
testscene(200:250,400:450)=1;
testscene(380:450,200:270)=1;
viewpoint=[250, 300];
imsize=size(testscene); % checks the size of the image
看起来是这样的(圆圈标记了我选择的视点):
下一行计算从视点到图像边缘的最长距离:
maxdist=max([norm(viewpoint), norm(viewpoint-[1 imsize(2)]), norm(viewpoint-[imsize(1) 1]), norm(viewpoint-imsize)]);
angles=1:360; % use smaller increment to increase resolution
然后生成一组均匀分布在视点周围的点:
endpoints=bsxfun(@plus, maxdist*[cosd(angles)' sind(angles)'], viewpoint);
for k=1:numel(angles)
[CX,CY,C] = improfile(testscene,[viewpoint(1), endpoints(k,1)],[viewpoint(2), endpoints(k,2)]);
idx=find(C);
intersec(k,:)=[CX(idx(1)), CY(idx(1))];
end
这样做的目的是从观察点到阵列中指定的每个方向绘制线角度
,并查找与障碍物相交的位置或图像边缘
这将有助于可视化流程:
最后,让我们使用内置的roiply
函数从一组坐标创建一个二进制掩码:
FieldofView = roipoly(testscene,intersec(:,1),intersec(:,2));
下面是它的外观(障碍物为白色,可见区域为灰色,视点为红色):
你所说的“视野”是什么意思?你能详细说明一下,或者展示一张图片吗。你在寻找到边缘的最小距离吗?我添加了一张图片。我正在寻找一条直线点可以到达的所有位置。(形状更精确,但这里可能太多)我想我有一个代码可以做到这一点。你有图像处理工具箱吗?有,我有8.1版。代码是如何工作的?我可以尝试一下,但有一些提示。如果它暂时改变了什么,我现在有最新的版本。这非常适合我想要做的事情,而且比我正在做的要快得多。注意:对于Matlab central上的文件,您可能希望使用输入图像作为输出“visiblefield”的掩码,以清除视野中形状的边界。谢谢