表示された物体データの認識システム

オブジェクト表示データ認識システム



はじめに

開発されたシステムは、ディスプレイに表示されるオブジェクトデータの非接触認識用に設計されています。 このシステムは、オブジェクトとユーザーの間の対話に従ってオブジェクトをテストする手段の一部です。

ユーザー情報を出力するためのソフトウェアまたはハードウェアチャネルにアクセスできるシステムのテストには、データ認識は必要ありません。 ただし、オブジェクトデータへのこのような接続が存在しない場合は、非接触認識システムを使用して実行でき、自動モードでオブジェクトの状態を継続的に監視できます。

この作業では 、ニューラルネットワークを使用しないMatLAB認識ツールについて説明します。ニューラルネットワークの有効性は、学習成果に大きく依存します。

開発したシステムの機能は、ダイブコンピューター会社のOpen Safety Equipment Ltd.のデータ認識の例に示されています。

この記事には次のセクションが含まれています。

•画像処理MatLABのライブラリ関数

•使用するWebカメラの特性、カメラをMatLAB環境に接続し、カメラモードを設定します。

•相関関数を使用した文字認識。

•認識システムのユーザーインターフェイスと認識結果



MATLAB画像処理のライブラリ関数

MatLABには、グラフィックファイルとビデオ信号を操作するための関数ライブラリがあります。 ライブラリ関数のオプションは次のとおりです。

画像ファイルの読み取り

>> pct = imread('DC_OS.jpg');
      
      







図 1. <196x259x3 uint8>形式のRGB画像[1] jpgファイル



サポートされている入力ファイル形式は、BMP、CUR、GIF、HDF4、ICO、LPEG、JPEG 2000、PBM、PCX、PGMです。



画像にグラフィックプリミティブを追加する

 Imf = insertShape(pct, 'Rectangle', [32, 27, 220, 153], 'Color', 'green'); %    pct     .
      
      







図 2.緑の長方形のフレームを持つ<240x320x3 uint8>のpctイメージ。



ビデオフレームにプリミティブを追加するためのmコード:

 clear all pos_triangle = [183 297 302 250 316 297]; pos_hexagon = [340 163 305 186 303 257 334 294 362 255 361 191]; %webcamlist; cam = webcam(1); for i = 1:100 %    I = snapshot(cam); %   RGB = insertShape(I, 'circle', [150 280 35], 'LineWidth', 5); %     RGB = insertShape(RGB, 'FilledPolygon', {pos_triangle, pos_hexagon}, 'Color', {'white', 'green'}, 'Opacity', 0.7); figure(2), imshow(RGB); %     end
      
      







図 3.ジオメトリプリミティブが追加されたビデオ画像。



画像縮小

2N倍の画像縮小は、各座標の画像ピクセル数の対応する減少によって達成されます。

 %    4  ( 2^2) gaussPyramid = vision.Pyramid('PyramidLevel', 2); %  jpg ,     uint8  single I = im2single(imread('DC_OS.jpg')); J = step(gaussPyramid, I);  %     figure, imshow(I); title('Original Image'); figure, imshow(J); title('Reduced Image');
      
      







図 4. 4倍の画像縮小。



画像のサイズ変更

 pct=imresize(pct,[400 NaN]); %    pct      , ,  <196 x 259 x 3 uint8 >  <400 x 529 x 3 uint8 >
      
      





画像フラグメントの選択

 Imf = imcrop(pct_bw, [32, 27, 220, 153]); %     <154 x 221 x 3 uint8 >
      
      





RGB画像をグレーパレットに変換する

 pct_bw=rgb2gray(pct); %  RGB <196 x 259 x 3 uint8 >  <196 x 259 uint8 >
      
      







図 5. RGB画像をグレースケールにします。



画像フィルタリング

2D中央値グレースケール画像フィルタリング

 pct_filt=medfilt2(pct_bw,[3 3]); %     .
      
      





画像のぼかし

 se=strel('disk',6); %     (STREL)-  0  1      , ,  pct_dilasi=imdilate(pct_filt,se); %  
      
      







図 6.左の画像をぼかす例。



ソリッドイメージ要素の細線化

 pct_eroding=imerode(pct_filt,se); % Eroding the gray image with structural element <img src="https://habrastorage.org/files/3ac/c17
      
      



/253/3acc172530fe4ad4bd3d385b52507d0e.PNG "/>

図 7.ソリッドイメージ要素の間引きの例。



画像または他の画像から定数を引く

 pct_edge_enhacement=imsubtract(pct_dilasi,pct_eroding); %   pct_dilasi pct_eroding
      
      





画像の準備と減算プログラム:

 pct = imread('DC_OS.jpg'); pct_bw=rgb2gray(pct); se=strel('disk',1); pct_eroding=imerode(pct_bw,se); pct_edge_enhacement=imsubtract(pct_bw,pct_eroding); figure, imshow(pct_edge_enhacement);
      
      







図 8.左から平均画像を減算した結果(右)。



マトリックスをグレートーン画像に変換する

 pct_edge_enhacement_double=mat2gray(double(pct_edge_enhacement)); %  196 x 258 uint8 [0 .. 255] > 196 x 258 double [0 .. 255] > 196 x 258 double [0 .. 1]
      
      





2D畳み込み

 pct_double_konv=conv2(pct_edge_enhacement_double,[1 1;1 1]); %  double 
      
      







図 9.畳み込みのアクション。



画像強度スケーリング

 pct_intens=imadjust(pct_double_konv,[0.5 0.7],[0 1],0.1); %  [0.5 0.7]  128 .. 179   [0 1]  0 .. 255; 0.1 - gamma
      
      







図 10.スケーリング強度。



数値行列を論理行列に変換する

 pct_logic=logical(pct_intens); %  double  uint8  binary; ,  > 0  1.
      
      







図 11. <196 x 256 double>行列をバイナリ<196 x 256 logical>に変換します



輪郭要素を塗りつぶす

 pct_fill=imfill(pct_line_delete,'holes');
      
      







図 12.連続輪郭の要素を埋める<196 x 256 double>



バイナリイメージからソリッド(小島)フラグメント(ノイズ)を削除する

 pct_final=bwareaopen(pct_logic,500); %  " == 1"  > 500 
      
      







図 13. NOT反転を使用して500ピクセルを超える「黒== 0」フラグメントを削除します。



プログラムコード:

 pct_double = double(imread('DC_OS.jpg'))./256; pct_gray =rgb2gray(pct_double); pct_logic=logical(pct_gray); %   pct_logic_inv=not(logical(pct_logic)); %  pct_final_inv =bwareaopen(pct_logic_inv,500); %  " " pct_final=not(pct_final_inv); %  figure, imshow(pct_final);
      
      





バイナリイメージのフラグメント(アイランド)の選択

 [labelled jml] = bwlabel(pct_final); %  “”      . labelled –    , lml –   .
      
      







図 14.バイナリイメージのユニットの10個の番号付き「島」グループのフラグメント。



膵島ゾーンの座標とサイズを見つける

 Iprops=regionprops(labelled,'BoundingBox','Image');
      
      







図 15.番号付きグループの矩形ゾーンの座標とサイズ、および各グループのバイナリマトリックスを含む、構造変数Ipropsのグラフィック表示のフラグメント。 5番目のグループの座標とサイズが強調表示されます。



棒グラフ

ヒストグラムimhist(Img_reference)を使用すると、各強度のピクセル数の依存関係を取得できます。



図 16.画像(左)とそのヒストグラムは、グレーのハーフトーンの数です。 ヒストグラムは、イメージがゼロ強度の黒色で支配されていることを示しています:〜3500ポイント。



強度分布



図 17.線の合計強度分布の合計(Img)。



図 18.左側は、中央値フィルターImg = medfilt2(Img、[5 5])の後の線の合計に沿ったピクセル強度の合計(Img)です。 右側には、合計diffの微分(sum(Img))があります。



三次元ビデオ画像。

図に示すように、ビデオフレームは表形式で表示できます。 シンボル9の場合は19。



図 19. Excelのシンボル「9」のピクセル強度の表分布。

プロッターMatLABには、「3D回転」ボタン(図20)があり、出力データを3D形式で表示できます。



図 20.表示されたデータを3D形式で翻訳するためのプロッターボタン。



図 21. 3D画像の例。 シンボル「20」が右側に表示されます。 ピクセルの垂直強度が表示されます。



ビデオカメラ

このプロジェクトでは、Logitech C52のWEB HDカメラを使用しました[2]。

Logitech C52ビデオカメラの技術仕様。

•HDビデオ通話(1280 x 720ピクセル)

•HDムービー撮影:最大1280 x 720ピクセル。

•オートフォーカス

•写真:最大8メガピクセル(ソフトウェア処理あり)

•Logitech RightSoundテクノロジーを搭載した内蔵マイク



図 22. Logitech C52ビデオカメラの外観と設定。



1280 x 720ピクセルのカメラ解像度の基本的なコンピューター要件。

•プロセッサ周波数2.4 GHz

•RAM 2 GB

•200 MBのハードディスク空き容量

•USBポート2.0

•動作環境:Windows XP(SP2以降)、VistaまたはWindows 7(32ビットまたは64ビット)



ビデオカメラをMatLABに接続する

1.ビデオカメラがMatLABデバイスリストにあるかどうかを確認します。

 >> webcamlist
      
      





2.カメラがリストにない場合は、サポートパッケージインストーラーを使用して接続します(図23を参照)



図 23.ビデオカメラをMatLABに接続します。



3.インストールが成功すると、カメラが一覧表示されます

 >> webcamlist
      
      





ビデオカメラをSimulinkに接続する

ナショナルインスツルメンツのビデオカメラは、Image Acquisition Toolbox> From Video Device libraryオブジェクトを介してMatLAB Simulink環境に接続できます。 接続するには、サポートパッケージインストーラーを使用してNI-DAQmxパッケージをインストールする必要があります(図23)。

画像取得ツールは、MatLABコマンドラインから起動できます。

  >>imaqtool
      
      





MatLABでのビデオ入力の順序

MatLABの入力フレームは、次の順序で実行されます。

1.コンピューターに接続されたMATLABによって認識されたカメラを検索します。

 >> webcamlist
      
      





2.ビデオカメラオブジェクトを作成します。

 >> cam = webcam('Logitech')
      
      





3.カメラ名、ビデオ時間、解像度、フレームレートの出力でRGBビデオを表示します。

 >> preview(cam)
      
      







図 24. MatLABへのビデオ出力。



4.必要なカメラパラメーターを設定します。

 cam = webcam (1)
      
      





カメラパラメータの構造リストの例:

カム=

プロパティ付きウェブカメラ:

名前:「Logitech HD Webcam C525」

解像度: '640x480'

AvailableResolutions:{1x22セル}

明るさ:128

コントラスト:32

フォーカス:60

ゲイン:64



WhiteBalance:5500

チルト:0

露出:-4

パン:0

シャープネス:22

彩度:32

バックライト補正:1

ズーム:1

ExposureMode:「自動」

カム=

プロパティ付きウェブカメラ:

名前:「Logitech HD Webcam C525」

解像度: '960x720'

AvailableResolutions:{1x22セル}

明るさ:128

WhiteBalanceMode: 'manual'

パン:0

露出:-5

チルト:0

FocusMode:「マニュアル」

バックライト補正:1

WhiteBalance:5900

ExposureMode:「マニュアル」



シャープネス:30

彩度:32

フォーカス:90%80、85、90、95調整

コントラスト:32

ズーム:1

ゲイン:64



カメラの解像度など、可能なパラメーター値の取得

 >> cam.AvailableResolutions ans = '640x480' '160x120' '176x144' '320x176' '320x240' '432x240' '352x288' '544x288' '640x360' '752x416' '800x448' '864x480' '960x544' '1024x576' '800x600' '1184x656' '960x720' '1280x720' '1392x768' '1504x832' '1600x896' '1280x960'
      
      







図 25.「320x240」「640x480」および「1280x960」ピクセルの解像度の画像。

必要なパラメーター値の設定

 >> cam.Resolution = '320x240';
      
      





5.ビデオ表示モードを終了します。

>> closePreview(カム)

6.フレームを入力します。

 >> img = snapshot(cam);
      
      





7.フレームを表示します。

 >> imshow(img)
      
      





8.カメラオブジェクトを削除します。

 >> clear('cam');
      
      





被写体に対するカメラの位置を調整します

MatLABに表示されるビデオに、既知の座標を持つフレームが追加されます(図26)。 オブジェクトに対してカメラの位置を調整する場合、オブジェクトの境界はフレームの位置と一致する必要があります。



図 26.ビデオフレーム内のフレーム。



ビデオをベースフレームで表示するためのmコードの例:

 webcamlist; cam = webcam(1); cam.Resolution = '320x240'; target_area = [45, 44, 217, 150]; while(1) pct = snapshot(cam); % display target Imf = insertShape(pct, 'Rectangle', target_area, 'Color', 'green'); image(Imf); end
      
      





オブジェクトの状態の特徴

その過程で、デバイスは表示される非画面情報の形式を変更します。 システムは、TTSおよびStepフィールドの有無によってフォーマットの変更を認識します。 各形式のフィールドに対して、シンボル定義ゾーンの独自の分布が構築されます。 27。



図 27.テスト対象のデバイスによって表示されるさまざまな形式の情報。



テキスト認識

OCR MatLAB関数

MATLABの光学式文字認識(OCR)機能は、グラフィックファイル内のテキストを認識します。

 %   I = imread('DC_OS.jpg'); %   results = ocr(I); %    wordBBox = results.WordBoundingBoxes %     figure; Iname = insertShape(I, 'Rectangle', wordBBox, 'Color', 'red'); imshow(Iname);
      
      







図 28.文字検索ゾーン(23個の長方形ゾーンが赤で強調表示されています)、results.WordBoundingBoxesのゾーンの座標とサイズ。

表1.テキスト認識の結果。



MATLABでのテキスト領域の自動検出とテキスト認識の例

MatLABの自動テキスト認識の例は、MATLAB [3]のヘルプセクションに示されています。



図 29.元の画像[3]。



相関関数による画像フラグメントの検索

正規化された相互相関norm_Corr_fの計算により、指定されたフラグメントの存在とビデオ画像のフレーム内の座標を追跡できます。 これは、たとえば、オブジェクトを検索またはカウントするとき、またはカメラの位置を調整するときに使用できます。

検出アルゴリズムの実装の例を図に示します。 30、図 31、アルゴリズムのコード[4]。



図 30.オブジェクトの領域-左フレームで正しく検出されたテキスト「Run Time」。 手がオブジェクトのゾーンを覆うと、検索プログラムはオブジェクトの間違った領域を見つけました(右フレーム)。



図 31.相関関数のフレーム番号への依存。 検索されたオブジェクトが存在する場合の関数の値は〜0.99で、不在の場合は〜0.978です。 関数0.012の変動範囲が小さいため、検索アルゴリズムは干渉の影響を受けやすくなります。参照オブジェクトとよく相関するオブジェクトのない領域を見つける...



シンボルの検出面積に対するシンボルの面積の比率を増加させることによる信号対雑音比の改善

相関法によりシンボルを区別する能力は、シンボルフィールドの解像度、シンボルの検出領域に対するシンボル領域の比率、および定義されたシンボルと参照シンボルの不一致に依存します。 相関は、解像度と面積比の増加、および比較されるシンボル間の不一致の減少とともに増加します。



図 32.キャラクターの位置のゾーンの割り当て。



図 33. 17x25ピクセルゾーンのオブジェクト5(青い線)、6(茶色の線)、2(黄色の線)の番号と参照シンボルの相関係数:空のゾーン、0〜9のシンボル。相関振幅は、2つが非常に異なることを示します残りのキャラクターから(検出しやすい)、5つは6つとほとんど変わりません。



図 34.オブジェクトの2つの空のゾーンと、9および参照シンボルが「空」のゾーンとの間の相関係数。 0; 1; 2; 3; 4; 5; 6; 7; 8; 9.グラフは、最初の2つのポジションでは「空の」参照シンボルと、最後のポジションでは標準の9との最大相関を示しています。



文字を空のゾーンと比較するときのあいまいさの解決

相関関数は、オブジェクトのシンボルをゼロで構成される空の参照ゾーンと比較するときに、NaNの不定値を与えることができます。 この影響を排除するために、標準の1つの要素の強度を255に増やします。

 function nmb = recognize_1(Img,target_area,Img_ref,index) nmb = 0; for n = index(1):index(end) Img_target = imcrop(Img,target_area(n,:)); Img_target = imadjust(Img_target); % Adjust image intensity values Img_target(1,1) = 255; % to remove NaN correlation with zero image for i = 1:size(Img_ref,1) Img_ref(i,1,1) = 255; % to remove NaN correlation with zero image Img_reference = reshape(Img_ref(i,:,:),size(Img_ref,2),size(Img_ref,3)); r(i) = corr2(logical(Img_reference-110),logical(Img_target-110)); end num = find(r == max(r)) - 2; if num < 0 num = 0; end nmb = nmb*10 + num; end
      
      





標準フォントを使用した相関の増加

この実施形態では、320×240ピクセルが、以下のサイズ18の数のフォントを使用している。 26; 36および60。特別なプログラム、たとえばGLCDFontCreator.exe [5]を使用して、オブジェクトのフォントへの参照のフォントを選択および変更できます。



図 35.元の画像(左)と元の画像に重ねられた 'Arial Rounded MT Bold'フォントの結果(右)。



図 36.文字の検索ゾーンを絞り込むオプション。



図 37.高解像度および低解像度の参照番号のバリエーション。 数字5と6の間の相関(一致)は、他の文字間の相関よりも高くなっています。



図 38.碑文の時間と停止のピクセルビュー



GUI

オブジェクト状態認識システムは、グラフィカルユーザーインターフェイス(GUI)によって補完されます。 ユーザーインターフェイスはMatLABで開発されています。 インターフェイスには次の機能があります。

•ビデオのセットアップと開始を制御します

•ライブビデオを表示します

•オブジェクトに関連するビデオカメラの設置品質を示します

•認識ゾーンの位置を調整します

•文字認識結果を表示します

•シンボルによるパラメーター値の復元

•オブジェクトパラメータの変化のグラフを作成する

•結果を蓄積して保存する

•NEXTおよびSELECTボタンを介して、オブジェクトに対するユーザーの影響を受け入れます。



図 39. MatLABで設計されたグラフィカルユーザーインターフェイス(GUI)の初期状態。



図 40. GUIのフラグメント。 周波数が30 Hzのオブジェクトのビデオ画像が左側に表示されます。 強調表示された緑の領域で認識されたビデオストリームのシンボルは、右側のフレームテンプレートに表示されます。 カメラとオブジェクトの組み合わせの精度は、左フレームの最大の長方形領域のフレームの位置によって決まります。



オブジェクト記号の認識結果



図 41.オブジェクトデータの初期出力形式でのGUIの状態。





図 42.オブジェクトデータを出力するためのフォーマットが変更されたGUIの状態。





図 43.非接触文字認識システムによって読み取られたオブジェクトのディスプレイに表示されるパラメーターのグラフ。



文学

1. BIO-350 Dive Computer tps://www.opensafety.eu/datasheets/Bio350%20Short%20Datasheet.pdf

2.ポータブルWebカメラHD Webcam C525 www.logitech.com/ru-ru/product/hd-webcam-c525

3. MatLAB> Computer Vision System Toolbox>例>自然画像のテキストを自動的に検出および認識するヘルプ。

4. [MatLAB]> [オブジェクトの検出と認識]> [例と方法]> [パターンマッチング]を支援します。

5.博士 ボブ・ダビドフ。 Arduino UNOコントローラーに基づいたローカル制御システムのユーザーインターフェイスの構築。 portalnp.ru/wp-content/uploads/2015/01/15.03_Arduino-UNO-Local-Control-User-Interface_Ed2a.pdf

6.博士 ボブ・ダビドフ。 技術システムportalnp.ru/author/bobdavidovのコンピューター制御テクノロジー。



All Articles