【问题标题】:Assigning events to pre-defined shapes将事件分配给预定义的形状
【发布时间】:2020-05-03 12:53:04
【问题描述】:

我的问题是在here 讨论的内容以及我在那里得到的建议之后提出的。

我从七个设备(每个设备,一个响应像素传感器的 XY 矩阵;想想一个 CCD 相机)获取数据。每个设备的尺寸为 X:1024 像素,Y:512 像素。数据被结构化为单独的事件(即时间戳),其中每个事件都有许多此类像素处于活动状态。每个像素的XY位置由每个设备中Pix关键字后面的两个数字表示。

此类事件的示例,其中 7 台设备中只有 6 台具有活动像素:

=== 169139 ===
Start: 4.80374e+19
End:   4.80374e+19
--- 1 ---
Pix 9, 66
--- 2 ---
Pix 11, 31
Pix 12, 31
--- 3 ---
Pix 17, 53
Pix 16, 53
Pix 16, 54
--- 4 ---
Pix 44, 64
--- 5 ---
Pix 49, 133
Pix 48, 133
--- 6 ---
Pix 109, 143
Pix 108, 143
Pix 108, 144 
Pix 109, 144 

由于论坛中前面提到的问题,我现在能够为 6 台设备中的每台分离并绘制一个 2D 直方图,显示活跃的像素和位置。

我事先不知道每个事件中有多少平面处于活动状态,哪些像素将处于活动状态以及设备中有多少。

接下来我想做的是为每个平面的这些像素的不同形状制作一个“出现频率”。如果一堆相邻的像素是活动的,它们被称为一个簇。这种分类的一个例子:

因此,对于上面给出的事件示例,您会发现:

  • 形状 ID 0 出现 2 次(设备 1 和 4)
  • 形状 ID 1 出现 2 次(设备 2 和 5)
  • 1 次出现形状 ID 6(设备 3)
  • 形状 ID 12 出现 1 次(设备 6)

第一个分类将基于每个设备的线路数。这将很好地指示每个设备的活动像素数(未考虑的情况:如果同一设备的两个区域在同一事件中触发活动像素)。

对于事件中的一行(意味着一个像素处于活动状态),我可以直接将其归为数字 0 类别。 对于两条线,我可以查看左/右(或上/下)相邻像素并检查它是否处于活动状态并将其分类为事件 1(或 2)。

对于 3 像素的情况,我有点不确定如何检查。基本上,我会取该设备出现 Pix 的第一个值,但我怎么知道它是 3 个活动像素中的哪一个?

另外,如何在 Python 中“分类”事件?我在想一本形状字典。并且某些功能会检查以将特定事件分配给这样的形状。这是如何在字典中实现的?

【问题讨论】:

    标签: python matrix cluster-analysis pixel


    【解决方案1】:

    确实,你可以做一个出现的字典。

    一个直接的解决方案是:

    1. 创建一个包含 0 和 1 的 NxN 矩阵的字典。迭代生成所有这些可能的矩阵。 例如N=3

    [00,00] [10,00] [01,00] [00,10] [00,01] [11,00] ... [11,11]

    1. 每当有新事件出现时,标准化您的像素矩阵并将其与字典中的像素矩阵相匹配。增加它的计数器。 D(001 000 000) ++

    可选地,为了优化这一点,不要初始化字典。如果它不存在,只需添加一个新条目并增加计数器。

    1. 然后,如果您不关心像素位置而只关心形状,请处理字典。

    创建另一个形状字典,例如: 点、2行、2列、3行、3列、T、倒T、L、倒L等。

    通过这种方式,您可以越来越接近解决方案,并确定需要保持抽象的点。

    我知道这不是一个具体的解决方案,但它可能会让你更接近你想要的。

    【讨论】:

    • 好的,按照您的建议,我可能对此有所了解。我可以隔离和聚集像素。对于每个这样的集群,我可以计算像素数、列宽和行宽。这让我有粗略的分类。在某些情况下,我无法扩展它并希望得到一些输入:如何为具有 3 个活动像素、2 行和 2 列的对象指定不同的类别(即:集群 ID 3、4、6、 7)?这当然扩展到4个活动像素和2-3或3-2的行列对。
    猜你喜欢
    • 2014-08-04
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多