Matrix 计算边界内矩阵中的值

Matrix 计算边界内矩阵中的值,matrix,polygon,counting,Matrix,Polygon,Counting,我自己也尝试过使用“直线方程之间”的方法,但我需要做以下工作: 我有一个矩阵,n乘n,它存储2D直方图计数。我需要能够按顺序指定点,并让程序计算这些点之间的所有内容 至少现在,我对一个简单的矩形非常满意(不过,这个矩形可以旋转任意角度) 从我的Paint.exe的直方图图片中,您可以看到我希望能够在蓝色框中计数。计算水平(右上)矩形不是问题(将For循环中的边界指定为矩阵的开始/结束容器) 我一直在研究如何在代码中定义边界,以便在另一个(最左边的)蓝色框中计数。我正在使用igorpro(来自W

我自己也尝试过使用“直线方程之间”的方法,但我需要做以下工作:

我有一个矩阵,n乘n,它存储2D直方图计数。我需要能够按顺序指定点,并让程序计算这些点之间的所有内容

至少现在,我对一个简单的矩形非常满意(不过,这个矩形可以旋转任意角度)

从我的Paint.exe的直方图图片中,您可以看到我希望能够在蓝色框中计数。计算水平(右上)矩形不是问题(将For循环中的边界指定为矩阵的开始/结束容器)

我一直在研究如何在代码中定义边界,以便在另一个(最左边的)蓝色框中计数。我正在使用igorpro(来自WaveMetrics)来实现这一点,因此在大多数情况下,这不是特定于语言的

基本上,这是为了分析这些图中感兴趣的区域。有一些工具可以分析“多边形内/自由形式”类型的图像,但它们无法从该矩阵中准确获得计数(它们基于图像颜色而不是计数进行分析)。此外,我不能基于“此箱子中是否有多个X?”进行过滤,因为同一矩形必须应用于基线“噪波”矩阵

想法?我真的被困在如何工作的核心概念上了

编辑:我的尝试似乎无法正常工作,当我放入一个“框”中时,结果是空的,类似于上面右边的蓝色框。我也不一定能改变倾斜的矩形(因为我们没有真正的方法来计算它)

//查找多边形边界
s1=(y2-y1)/(x2-x1)
o1=s1==inf | | s1==inf?0:y2-(s1*x2)
s2=(y3-y2)/(x3-x2)
o2=s2==inf | | s2==inf?0:y3-(s2*x3)
s3=(y4-y3)/(x4-x3)
o3=s3==inf | s3==inf?0:y4-(s3*x4)
s4=(y1-y4)/(x1-x4)
o4=s4==inf | | s4==inf?0:y1-(s4*x1)
//获取最高/最低点(用于For循环)
最大值=最大值(最大值(x1,x2),x3,x4)
最大值=最大值(最大值(y1,y2),y3,y4)
最小值=最小值(最小值(x1,x2),x3,x4)
minY=min(min(min(y1,y2),y3,y4)
对于(i=minX;i(s3*i+o3))| |((s1*i+o1)j&j>(s4*i+o4))|((s2*i+o2)
您可以使用与水平矩形相同的方法计算对角线矩形中的值,您只需使用更复杂的循环来确定边界的位置。可以通过在包含整个对角矩形的水平矩形上循环,并且仅当值落在对角矩形内时才计算值来完成此操作

如果知道构成对角矩形角的点,则可以得到每个边界的方程(坡度截距方程)。从那里你可以看到每个边界的哪一边是点。如果它们位于矩形内部对应的边上,则包含它们,如果它们不在,则不包含它们

您必须为正在处理的每个点找到边界的X和Y点。如果只检查左下角的边框,则会出现如下情况:

for(each point in the matrix){
  if(point.x > border X value @ height Y && point.y > border Y value @ column X)
    include this point
  else
    don't include it
}
如果您有边界方程,并且知道要分析的点,您可以使用已知的X值(从该点开始)来获得边界的Y值(您正在查看的列中的高度)和已知的Y值(同样,从您正在分析的点开始)来获得边界的X值(点的高度在边界中的距离)

对于完整的条件列表,您应该有以下要点:

  • 左下边框:point.x>border.x&&point.y>border.y
  • 右下边框:point.xborder.y
  • 左上边框:point.x>border.x&&point.y
  • 右上边框:point.x
Igor有一个比您当前的解决方案更强大的工具

  • 转到windows菜单
  • 选择帮助窗口
  • 选择“XOP Index.ihf”
  • 搜索“为遮罩选择点”
  • 它将解释如何定义图形中任何形状的多边形,并为其中的点获取一个掩码。然后,您可以对它们运行任何代码


    您也可以在代码中创建/更改多边形。

    我想我可能是逻辑错误。.我只检查过Y值。有机会我会尝试一下。谢谢。
    for(each point in the matrix){
      if(point.x > border X value @ height Y && point.y > border Y value @ column X)
        include this point
      else
        don't include it
    }