Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用低分辨率输入矩阵测量奇数角度的矩形(线性回归分类?)_Python_Linear Regression_Classification - Fatal编程技术网

Python 使用低分辨率输入矩阵测量奇数角度的矩形(线性回归分类?)

Python 使用低分辨率输入矩阵测量奇数角度的矩形(线性回归分类?),python,linear-regression,classification,Python,Linear Regression,Classification,我试图解决以下问题: 比如说 0000000000000000 0011111111110000 0011111111110000 0011111111110000 0000000000000000 0000000111111110 0000000111111110 0000000000000000 我需要找到字段中所有矩形的宽度和高度。输入实际上是一次一列(就像扫描仪从左向右移动一样),并且在程序期间是连续的(也就是说,扫描列不移动,但矩形在其上移动) 在这个例子中,我可以“等待一个矩形开始

我试图解决以下问题:

比如说

0000000000000000
0011111111110000
0011111111110000
0011111111110000
0000000000000000
0000000111111110
0000000111111110
0000000000000000
我需要找到字段中所有矩形的宽度和高度。输入实际上是一次一列(就像扫描仪从左向右移动一样),并且在程序期间是连续的(也就是说,扫描列不移动,但矩形在其上移动)

在这个例子中,我可以“等待一个矩形开始”(也就是说,观察零变为1),然后观察它结束(1变回零),并以“网格单位”测量工件。对于上面概述的简单情况,这将很好地工作,但如果矩形倾斜一个角度,则将失败,例如:

0000000000000000
0000011000000000
0000111100000000
0001111111000000
0000111111100000
0000011111110000
0000000111100000
0000000011000000
我原以为下列问题适用:

但现在我不太确定

我几乎没有回归或回归测试的经验,但我认为我可以将其表示为8个变量的输入

老实说,我根本不知道该怎么做。这部分代码提取的大小需要与已知大小的矩形相匹配(即,从数据库中)

我最初以为我可以将已知数据作为训练练习输入,并存储阳性测试结果,但我真的不确定从这里开始该怎么做


感谢您的建议。

在扫描时收集过渡点(从1到0,反之亦然),然后直接从那里或从每个对象的凸面外壳计算长度和宽度


如果矩形可以重叠,那么您将遇到更大的问题。

在扫描时收集过渡点(从1到0,反之亦然),然后直接从那里或从每个对象的凸面外壳计算长度和宽度


如果矩形可以重叠,那么你会遇到更大的问题。

我向一位朋友提出了这个问题,他建议:

  • 第一次看到1时,请将其存储为新形状。将其向右填充,并将这些点添加到同一形状
  • 现在不在形状中的任何输入像素都是新形状。做同样的洪水填充
  • 在下一个输入列上,从原始形状点再次泛洪。将新像素添加到相应的形状
  • 如果任何整体填充没有为两个连续列添加任何新像素,则表示已完成形状。继续,试着确定它的尺寸
  • 这样我们就可以得到我们隔离的形状的尺寸(如示例2所示)

    为此,我们想到:

  • 如果形状中最左边的像素数低于每列的平均像素数,则peice可能会旋转。因此,通过获取最外面的像素来查找角点。使用它们之间的距离公式。最大=斜边,其他=宽度或高度
  • 否则,这一点可能是完全对齐的,所以角点可能只是最左上角的像素,最右下角的像素,等等

  • 你们都怎么想?

    我向一位朋友提出了这个问题,他建议:

  • 第一次看到1时,请将其存储为新形状。将其向右填充,并将这些点添加到同一形状
  • 现在不在形状中的任何输入像素都是新形状。做同样的洪水填充
  • 在下一个输入列上,从原始形状点再次泛洪。将新像素添加到相应的形状
  • 如果任何整体填充没有为两个连续列添加任何新像素,则表示已完成形状。继续,试着确定它的尺寸
  • 这样我们就可以得到我们隔离的形状的尺寸(如示例2所示)

    为此,我们想到:

  • 如果形状中最左边的像素数低于每列的平均像素数,则peice可能会旋转。因此,通过获取最外面的像素来查找角点。使用它们之间的距离公式。最大=斜边,其他=宽度或高度
  • 否则,这一点可能是完全对齐的,所以角点可能只是最左上角的像素,最右下角的像素,等等

  • 你们都觉得怎么样?

    我将采取以下步骤:

  • 将所有列合并到一个矩阵中(这是进行适当筛选所必需的)
  • 现在应用一个过滤器(需要谷歌搜索一下)来锐化棱角
  • 创建一些结构来保存下一步的数据(可以有许多不同的解决方案,选择您喜欢的和/或最佳的)
  • 垂直扫描(逐列扫描)以及在列中找到的后续“一”的每个段(段表示您已找到其起点-终点
    y
    坐标),请执行以下操作:
  • 检查此段是否与上一列中的某段重叠
  • 如果没有,请考虑这是一个新的记录。创建一个rect对象并将其句柄指定给线段。对于新的rect,
    更新其度量值
    (此操作仅获取段的坐标-
    x
    ymin
    ymax
    ,稍后将讨论)
  • 如果是,则假设这是同一个rect,获取该rect的句柄,将该句柄分配给当前段,然后通过其句柄获取该rect并更新其度量值
  • 真漂亮。在此之后,您将有一个矩形对象池,每个对象都有四个角点坐标。做一些基本的数学运算来估计rect的宽度和高度。
    那么魔法在哪里呢?嗯,这一切都发生在
    更新rect metrics
    例程中

    对于每个rect,我们有13个指标:

    • 最小X=>ymin1,ymax1
    • 最大X=>ymin2,ymax2
    • 最小Y=>xmin1,xmax1
    • 最大Y=>xmin2,xmax2
    • 平均垂直段长度
    首先,我们必须确定这个矩形是否在我们的扫描网格内正确对齐。为此,我们比较va