瞳孔追踪技术 研发

样例图像大概是这样

因为样本量不足,自己画了几幅

瞳孔追踪技术 研发_第1张图片

分析:

瞳孔,是动物或人眼睛内虹膜中心的小圆孔,为光线进入眼睛的通道。上虹膜瞳孔括约肌的收缩可以使瞳孔缩小,瞳孔开大肌的收缩使瞳孔散大,瞳孔的开大与缩小展示进入控制瞳孔的光量。

图像角度来看:瞳孔是高密度黑色圆形区域

要求瞳孔分割,可以用hough检测圆形,但是速度太慢了,跟不上瞳孔运动速度,所以本算法必须要求简单快速

有以下几种思路:

1.基于灰度直方图做波谷检测,从而阈值分割,随后计算图像质心,在质心范围内,检测上下边界,框出一个矩形,在矩形中,再此检测质心,则基本可以保证质心的准确度

2.平均值阈值分割,求全图黑色像素个数,当做瞳孔面积。根据圆形面积公式换算出半径R,从(0,0)为起点做滑动窗口,以[R为边长,检测每个窗口中黑色像素数量,最大的为瞳孔中心。

3.在二的基础上,不再用滑动窗口计算,而是做随机数,随机窗口计算

4.不做二值化,在原图的基础上,把计算像素数量换成计算窗口内灰度方差与深灰色像素数量

按照第4种思路,我做了一些尝试

from PIL import Image 
import numpy as np
img =  Image.open('F:\\BaiduNetdiskDownload\\new_data\\TIM图片20180824142106.jpg').convert('L')
img = np.mat(img)
h = img.shape[0]
w = img.shape[1]
avg = np.mean(img)
var = img.var()
print(avg)
print(var)


tx=0
ty=0
tavg=0
tvar=0
for i in range(100000):
    x = np.random.randint(h)
    y = np.random.randint(w)
    randmat = img[x-5:x+5,y-5:y+5]
    randavg = np.mean(randmat)
    randvar = randmat.var()
    if randvar

修改了一下代码,只要一百个随机点,就能找到瞳孔

瞳孔追踪技术 研发_第2张图片

蓝色点为瞳孔位置,但是该算法鲁棒性不够,考虑改进

 

 

 

 

 

 

你可能感兴趣的:(瞳孔追踪技术 研发)