10

次のコンピューター ビジョンの問題にアプローチする方法について、いくつかの提案を探しています。以下は、私が使用しているアイ トラッキング データセットの 4 つのサンプルです。コードを書きたいのですが、そのような画像を1つ取り、瞳孔の中心の(x、y)位置を計算します。私は現在 MATLAB を使用していますが、他のソフトウェアも使用できます。

このタスクに使用できるアプローチを誰かが推奨できますか? ここに私がすでに試したことがいくつかありますが、あまりにもうまくいきませんでした.

  • サークルハフ変換を使用しようとしましたが、瞳孔の半径を推測する必要があり、少し問題があります。また、歪みのため、瞳孔は常に正確に円であるとは限らないため、このアプローチはさらに難しくなる可能性があります。
  • ピクセルの明るさに基づいて画像のしきい値を設定し、regionprops MATLAB 関数を使用して、離心率が非常に低い (つまり、可能な限り円形の) 約 200 ピクセル領域の領域を探しました。ただし、これはしきい値に非常に敏感であり、照明条件に基づいて、目の一部の画像が他の画像よりも明るくなります。(以下の 4 つのサンプルは既に平均値で正規化されていることに注意してください。それでも、画像の 1 つが全体的に他の画像よりも明るいのは、おそらくどこかで非常に暗いランダムなピクセルが原因であると考えられます)

コメントや提案をいただければ幸いです。

編集: Stargazer さん、コメントありがとうございます。アルゴリズムは、理想的には、最後のサンプルの場合のように、瞳孔が画像に含まれていないと判断できる必要があります。しばらく見失ってしまっても大したことはない。間違った答えが返ってきたらなおさらです。

代替テキスト

4

4 に答える 4

6

データセットを使用していて、キャプチャ デバイスを変更する柔軟性やニーズがわからないため、これが役立つかどうかはわかりません。念のため、行きましょう。

森本ら。素敵なカメラトリックを使用してください。彼らは2 セットの赤外線 LED を備えたカメラを作成しました。最初のセットは、カメラ レンズの近くに配置されます。2 つ目は、レンズから離れた場所に配置されます。異なる周波数を使用して、2 つの LED セットが異なる瞬間に点灯します。

網膜は、カメラ レンズの近くのセットからの光を反射し (写真の赤目の問題と同じです)、明るい瞳孔を生成します。他のセットの LED は暗い瞳孔を生成します。結果を比較します。したがって、2 つの画像の単純な違いによって、ほぼ完全な瞳孔が得られます。森本らの方法を見てみましょう。輝きを探ります(視線方向に近づくのはいいことです)。

于 2010-10-22T11:32:35.920 に答える
5

OpenCV 統合 Python を使用します。. . 初心者が OpenCV で作業するのは非常に簡単です。

手順 :
* 通常の Web カメラを使用している場合
1. 最初に VideoCapture 機能でフレームを処理します
。 2. グレー スケール イメージに変換します。
3. cv2.Canny() 関数を使用してキャニー エッジを検索します
。 4. HoughCircles 関数を適用します。画像の中心だけでなく、画像内の円も検出されます。
5. HoughCirlces の結果のパラメーターを使用して、瞳孔の周りに円を描きます。それでおしまい。

于 2015-03-03T20:22:41.240 に答える
1
import java.awt.Robot;%Add package or class to current import listimport java.awt.event.*;robot = Robot();objvideoinput('winvideo',2);%to set the device ID and supported format set(obj, 'FramesPerTrigger', Inf);% trigger infinite set(obj, 'ReturnedColorspace', 'rgb')%video in RGB format obj.FrameGrabInterval = 5;%the object acquires every %5th frame from the video stream start(obj)% to start the vedio time=0;NumberOfFrames=while(true)data=getsnapshot(obj);image(data);filas=size(data,1);columnas=size(data,2);% Centercentro_fila=round(filas/2);centro_columna=round(columnas/2);figure(1);if size(data,3)==3data=rgb2gray(data);% Extract edges.BW = edge(data,'canny')[H,T,R] = hough(BW,'RhoResolution',0.5,'Theta',-90:0.5:89.5);endsubplot(212)piel=~im2bw(data,0.19);piel=bwmorph(piel,'close');piel=bwmorph(piel,'open');piel=bwareaopen(piel,275);piel=imfill(piel,'holes');imagesc(piel);% Tagged objects in BW imageL=bwlabel(piel);% Get areas and tracking rectangleout_a=regionprops(L);% Count the number of objectsN=size(out_a,1);if N < 1 || isempty(out_a) % Returns if no object in the imagesolo_cara=[ ];continue end % Select larger area areas=[out_a.Area];[area_max pam]=max(areas);subplot(211)imagesc(data);colormap grayhold on rectangle('Position',out_a(pam).BoundingBox,'EdgeColor',[1 0 0],...'Curvature', [1,1],'LineWidth',2)centro=round(out_a(pam).Centroid);X=centro(1);Y=centro(2);robot.mouseMove(X,Y);text(X+10,Y,['(',num2str(X),',',num2str(Y),')'],'Color',[1 1 1])if X<centro_columna && Y<centro_fila 
title('Top left')elseif X>centro_columna && Y<centro_fila
title('Top right')elseif X<centro_columna && Y>centro_fila
title('Bottom left')else
title('Bottom right')
于 2015-09-02T07:46:47.297 に答える