matlab提取矩阵中点的坐标
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab提取矩阵中点的坐标相关的知识,希望对你有一定的参考价值。
比如我有一个100*100的矩阵,现在有四个点,下标分别是(1,1),(1,5),(100,10),(100,14),四个点连线可以构成一个平行四边形,如果矩阵中的点的下标落在这个四边形里(含边界),就取出它的坐标,最后得到一个坐标的集合,该怎么编程。请大侠指教,并把程序贴上来学习一下,谢谢!
楼上的方法挺高深的,但是我实验了。发现有“漏网之鱼”。
我将我办法和他的对比了一下,如下图:
可以看出,用楼上的方法解,行坐标为100的,对应的列坐标只有13,14两个点。
而事实上,有10,11,12,13,14共5个点。
而第一行只有(1,1)、(1,2)两个点,事实上,有1到5共5个点
不止第一行和最后一行,中间的每一行都有漏点。
图中,*表示应该包括的点,o表示上述方法包括的点(看不清,就是线的端点之间的点)。
我的方法说起来简单,就是先找到边界直线。然后将所有满足的点找出来。
我定义了一个函数,其说明如下(函数主体在附件中,可以自己看):
function [x1,y1,totalnum] = myarea(a,b,c,d)%% 该函数返回任意指定上下两边平行的四边形区域,所有在选定区域内点对应的x和y坐标
% 及在区域内点的个数
% 其中x1、y1为区域内所有点的横、纵坐标,为行向量。x,y在向量中对应位置为一组
%totalnum返回区域内点的个数
%a,b,c,d为从左上角开始四边形顺时针给出的四边形顶点
%如下,为一个正确给定的区域:
% a = [1,1];
% b = [1,7];
% c = [9,4];
% d = [9,7];
比如,输入命令如下:
返回的结果我直接用图给你表示吧:
其中红色是指定的端点,写‘1’的是判断在区域内的点。效果还是比较理想的。
代码在附件中。
1 5;
100 14; %注意最后两个顺序相反
100 10];
%输入四个顶点,注意让四个顶点按顺序连起来能形成凸多边形
a=[];
for jj=1:100
for ii=1:100
r=[d zeros(4,1)]-repmat([ii jj 0],[4 1]);
%计算4个顶点到ii,jj点的矢量,并加入z座标0
c=cross(r,circshift(r,1),2);%计算相邻矢量的叉乘积
if all(c(:,3)>=0)||all(c(:,3)<=0)%判断所有叉乘积的z分量符号是否相同
a=[a; [ii jj]];%如果相同,记录ii,jj坐标
end
end
end
主要用到判断点是否在凸多边形内的叉乘判断法
首先把要判断的点到多边形的各个角点的矢量求出来
再按顺序依次求相邻两个矢量中间的叉乘
由于点都在xy平面,叉乘结果的矢量肯定在z放向上
如果点在多边形内,那么得到的所有z矢量方向相同,同时大于零或同时小于零
如果刚好在某边所在直线上,对应的z矢量为0
因此判断是否说有z都是>=0或者<=0就可以判断点是否在凸多边形内
在matlab中,怎么把图片中的图像轮廓坐标找出来?
要二值图像才行格式:B = bwboundaries(BW,conn)(基本格式)
作用:获取二值图中对象的轮廓。B是一个P×1的cell数组,P为对象个数,每个cell是Q×2的矩阵,对应于对象轮廓像素的坐标。Q内每一行表示连通体的边界像素的位置坐标(第一列是纵坐标Y,第二列是横坐标X),Q为边界像素的个数。追问
我现在能够找到轮廓,可是不会把这个轮廓的坐标输出来,还请指教。我不会编程,还请说细一点,谢谢。
参考技术A B = bwboundaries(BW,conn);A=ind2sub(B*(B==255));
程序解析:
1、第一条指令,首先将图像变成一维的;
2、其次:依次取出每个像素判断是不是255(白色)找出是255的 那一段来;
3、然后确定255那段的 中心。用ind2sub()函数肯定能精确定位的。 参考技术B simple(S),采用多种方法化简多项式,包括simplify,expand、factor、combine、radsimp、convert、collect
采用radsimp结果就是x
估计程序问题
>> syms x
>> s=x^(2)^(1/2);
>> simple(s)
simplify:
csgn(x)*x
radsimp:
x
combine(trig):
(x^2)^(1/2)
factor:
(x^2)^(1/2)
expand:
(x^2)^(1/2)
combine:
(x^2)^(1/2)
convert(exp):
(x^2)^(1/2)
convert(sincos):
(x^2)^(1/2)
convert(tan):
(x^2)^(1/2)
collect(x):
(x^2)^(1/2)
mwcos2sin:
(x^2)^(1/2)
ans =
x
以上是关于matlab提取矩阵中点的坐标的主要内容,如果未能解决你的问题,请参考以下文章
求助:MATLAB处理图像,已提取边缘,也得到了边缘的二值矩阵,提取坐标是用【m,n】 = find(BW==1)
求助!!!!知道三维两点坐标如何用MATLAB求直线方程,急求!!!!!!!