Matrix 在散点图中定位死区是否有一个倍频程函数或一般解决方案?

Matrix 在散点图中定位死区是否有一个倍频程函数或一般解决方案?,matrix,plot,octave,Matrix,Plot,Octave,我处理50万个八度点的数据图。我试图找到数据中的空白中心(故意的) 我知道要寻找多少个点,我在考虑在起始位置进给,然后尝试在一个方向上展开一个圆,直到到达有效的数据点位置,并在几个方向上继续这样做,直到有一个圆没有填充数据,但接触到有效的数据点。这个圆的中心就是空隙的中心。我不完全确定如何写,因为我对编码非常熟悉 显然,图形解决方案可能不是最好的方法,但我不知道如何在一个巨大的x-y位置矩阵中找到大的x和y间隙 我知道你说过你的数据不是以x或y排列的,但它看起来仍然像可疑的网格 在这种情况下

我处理50万个八度点的数据图。我试图找到数据中的空白中心(故意的)

我知道要寻找多少个点,我在考虑在起始位置进给,然后尝试在一个方向上展开一个圆,直到到达有效的数据点位置,并在几个方向上继续这样做,直到有一个圆没有填充数据,但接触到有效的数据点。这个圆的中心就是空隙的中心。我不完全确定如何写,因为我对编码非常熟悉

显然,图形解决方案可能不是最好的方法,但我不知道如何在一个巨大的x-y位置矩阵中找到大的x和y间隙


我知道你说过你的数据不是以x或y排列的,但它看起来仍然像可疑的网格

在这种情况下,您可能可以将每个网格点表示为图像中的“像素”;这使您可以使用
image
软件包中的优秀功能,例如
imregionalmin
功能。在您的情况下,这将为您提供“孔”的连接组件。对于每个组件,您可以通过查找该组件内像素的“平均坐标”轻松找到其重心。然后,您可以执行距离变换(例如,使用
bwdist
),以找到所描述圆的精确半径,即从该质心到最近像素的距离。或者,您可以从
bwdist
开始,然后使用
immaximas
直接检测质心。如果有多个这样的区域,可以使用
bwconncomp
首先查找连接的组件(或通过imregionalmin的输出)

如果您的数据不是特别像网格,那么您可能会对数据进行插值,使其适合这样的网格

例如:

pkg加载映像
t=0:0.1:2*pi;%供以后打印圆时使用
[X0,Y0]=ndgrid(1:100,1:100);%创建“索引”网格
X=X0-0.25*Y0;Y=0.25*X0+Y0;%创建变换网格
Z=0.5*(X0-50)。^2+(Y0-50)。^2>250;%为网格上的每个“索引”点分配一个逻辑值
M=最小值(Z);%找到“洞”作为面具
C={四舍五入(平均值(X0(M)),四舍五入(平均值(Y0(M))};%找到质心(作为索引)
R=bwdist(~M)(C{:});%找到从质心到最近像素的距离
R=min(abs(X(C{1}+R,C{2})-X(C{:})),abs(Y(C{1},C{2}+R)-Y(C{:}));%调整变换后的栅格
图(1);等等
绘图(X(Z)、Y(Z)、“.”、“markerfacecolor”、“b”)%绘制原始转换网格数据
绘图(X(C{:})、Y(C{:})、'o','markerfacecolor','r');%在变换网格中绘制质心
绘图(X(C{:})+R*cos(t),Y(C{:})+R*sin(t),'R-')%在顶部绘制最佳圆
轴相等;拖延

(这实际上是散点图还是稀疏矩阵?)。我的数据在x或y上都不是直线。我将尝试添加另一个带有数据样本的图像。这是否回答了您的问题?(我不确定Octave是否具有与MATLAB相同的功能。)!不幸的是,看起来matlab的环心比倍频程更健壮,但我想我已经接近一个解决方案了。谢谢。我已经编写了更多的函数并做了一些检查,我非常接近一个永久的解决方案。我想我现在有一个足够好的解决方案。我可能稍后再发。现在,我以一个nx3的圆坐标和半径矩阵结束,它很好地填充了我的数据孔。我需要找出如何为每个局部区域获得一个唯一的圆,以及该区域的最佳定位圆。谢谢你@CrisLuengo和Tasos!塔索斯,谢谢你的回复,但是我的数据在遵循你的解决方案时遇到了问题。它看起来像是从一个在“洞”处有0的矩阵开始的。我的基本数据中没有这个。我想我必须插值我的数据,使它成为一个矩阵表,并插入我的z值作为占位符。我担心那样会有很多非常小的区域极小值。我还担心计算时间可能会超过必要的时间。我将尝试附加一个完整的.ascii数据文件。@mhotkow大量小区域最小值不是问题,因为在继续进一步计算之前,您可以根据大小拒绝连接的组件。但是,如果您的数据不是特别像网格,那么上面评论中的Cris链接也有其他很好的解决方案,对您来说可能会更好。