0

当使用 HaarDetectObject() 函数检测眼睛时,我们得到如下结果(detectedObjects):

[((110, 47, 44, 44), 11), ((27, 45, 54, 54), 31)] 
[((114, 49, 40, 40), 10), ((28, 50, 47, 47), 17)] 
[((31, 50, 47, 47), 18), ((106, 47, 44, 44), 3)] 
[((106, 46, 44, 44), 38), ((29, 53, 45, 45), 35), ((18, 30, 74, 74), 4)] 
[((98, 54, 36, 36), 7), ((108, 48, 45, 45), 31), ((26, 52, 49, 49), 49)] 
[((109, 46, 45, 45), 28), ((29, 50, 49, 49), 38)] 
[((109, 46, 44, 44), 29), ((27, 47, 53, 53), 27), ((123, 45, 48, 48), 3)] 
[((108, 46, 44, 44), 35), ((28, 50, 49, 49), 33)] 
[((109, 47, 45, 45), 34), ((28, 53, 47, 47), 35), ((126, 50, 44, 44), 3)] 
[((109, 47, 44, 44), 29), ((29, 47, 51, 51), 39)] 
[((106, 47, 42, 42), 49), ((27, 49, 49, 49), 30)] 
[((31, 54, 42, 42), 13), ((110, 46, 44, 44), 4), ((125, 46, 44, 44), 4), ((27, 35, 66, 66), 6)] 

等等

我所知道的是:

(110, 47, 44, 44), 11) , 即 x, y, w, h, ?

x,y 是 'eyes' 中检测到的 'eye' 左上角的坐标,w,h 是确定检测到的眼睛区域的宽度和高度,所以是 cvRect 格式

如您所见,最后一次检测有 4 只眼睛 - 因此我问,我怎么知道其中哪两只是我完美检测到的眼睛?我的意思是,看到任何 i 的眼睛[i][0][0],我们可以知道眼睛是右还是左。但是在这里,我们有两只左眼和两只右眼,eyes[0] 和eyes[3] 是左眼,eyes[1] 和eyes[2] 是右眼。

这是我的问题,现在如果我只需要获得左右眼的两个检测结果中的一个,我该怎么做?

早些时候我认为 eye[i][1] 可以用作某种分数。我有一段时间无法访问互联网,所以我假设。但它不是一些质量得分,正如我刚刚发现的那样。

所以在我们的例子中,eyes[0][1] 是 13,eyes[1][1] 是 4,eyes[2][1] 是 4,eyes[3][1] 是 6。让我们称之为 Q

在其余的检测中,我看到我的其他检测的 Q 值很高,通常在 40-60 左右,所以我认为该范围内的 Q 可能表示最佳检测。但正如我之前所说,它不是。

那么我如何确定“眼睛”中的哪个“眼睛”是最好的检测?

4

1 回答 1

0

我想说您可以使用以前的结果并为每张图像存在的检测到的眼睛提供更多分数(假设您正在使用视频)。

您还可以使用参数(例如眼间距离)来找到最佳匹配的情侣。最后,您还可以进行更复杂的操作(例如耦合头部/眼睛检测或背景减法)来获取您自己的模式并搜索最佳匹配的眼睛位置。

如果该方法为您提供 4 只眼睛,您要么必须在预处理图像之前增强其结果,要么在算法中增加一些复杂性以过滤掉结果。

于 2012-03-02T08:25:08.513 回答