ヒストグラム(histogram)

ヒストグラムとは?
-> 統計で度数分布を示すグラフの一つ。横軸に階級、縦軸に度数をとり、各階級の度数を長方形の柱で示す。

define('cherry', 'cherry.jpg');

$img = imagecreatefromjpeg(cherry);
$imagex = imagesx($img);
$imagey = imagesy($img);

$histogramR = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
$histogramG = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
$histogramB = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

for($y = 0; $y < $imagey; $y++){
	for($x = 0; $x < $imagex; $x++){
		$rgb = imagecolorat($img, $x, $y);
		$r = ($rgb >> 16) & 0xFF;
		$g = ($rgb >> 8) & 0xFF;
		$b = $rgb & 0xFF;
		$histogramR[(int)($r/16)]++;
		$histogramG[(int)($g/16)]++;
		$histogramB[(int)($b/16)]++;
	}
}

function writeHistogram($value, $char){
	echo $value;
	for($i=0; $i<$value; $i++){
		echo $char;
	}
}

echo 'Red <br>';
foreach($histogramR as $countR){
	writeHistogram($countR/100, 'r');
	echo '<br>';
}

Red
53.32rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
41.12rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
446.61rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
470.27rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
505.77rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
263.59rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
238.95rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
178.22rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
118.97rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
86.47rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
72.66rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
65.12rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
56.57rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
46.29rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
39.89rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
48.98rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

OpenCVでは一次元ヒストグラムでは横軸が明度、縦軸が明度のピクセル数
二次元ヒストグラムでは、横軸が色相、縦軸が彩度、グラフの各点の明るさがピクセル数の数を示す。
cvCreateHist関数などを用いる
ヒストグラムを利用して画像同士の類似度を計算する

なるほど、写真からカテゴライズする時などはヒストグラムを使うのか。
顔認証にもヒストグラムは使われているのでしょうか。。。

モルフォロジー(morphological)変換

モルフォロジー変換とは、画像中の幾何学的な構造を解析したり処理したりする時に用いられる数学的手法の一つ
数理形態学(mathematical morphology)と呼ぶ
1960年G.Matheron, J.Serraによって提起
ノイズ除去、テクスチャ解析、エッジ検出など各種の画像処理に用いられる
モルフォロジー変換にはdilate(膨張)、erode(縮退)、open、closeという基礎的な演算処理があり、OpenCVでは関数で提供されている
dilateは微小領域を削除する為、ノイズの除去などに使用される
delationは入力画像の前景を広げる効果があり、erodionは入力画像の前景を狭める効果がある

### アルゴリズム
– 多次元空間における集合論として展開される
– サイジング n x n(縦横がそれぞれn画素)の2次元デジタル画像を入力すると、フィルタ画素のサイズを r x rとすると、モルフォロジー演算に要する計算量はO(n^2r^2)となる
– 大きなフィルタを小さなフィルタに分割して繰り返し処理を行う方法やフィルタを1次元フィルタに分解して処理する方法、距離変換アルゴリズムを用いてモルフォロジー演算を行う手法などが提案されている
– n x nの2値画像I{Iij}において、F = {(i,j)| Iij = 1}を前景、B = {(i,j)| Iij = 0}を背景と呼ぶ
– 物体と背景の隣接時に、0 -> 1にするのがdelate, 1 -> 0にするのがerode

基本的な原理はわかりました。

傾き補正

撮影時のカメラの傾きから、画像自体が傾いて撮られる事が良くある
そのような場合、ハフ変換で直線を得た後に、その傾きの角度から画像を補正する事ができる
文字認識の前処理としてよく使われる

二値化 -> エッジ検出 -> ハフ変換 -> 傾き補正 -> 文字認識 の流れか?
回転させながら行検出するアルゴリズムもあるみたいですね。

傾いている対象が長方形の場合、輪郭を走査して、最小二乗法の直線近似で、誤差のある点を除きながら直線を求めることもできる。反復法で誤差を収束させるので、速度に難がある

補正する対象が何かや、求めるパフォーマンスによって、採用するアルゴリズムが変わってくるというのは面白い
OpenCVと機械学習はかなり繋がっていますね。

ハフ(Hough)変換

ハフ変換(Hough)は、画像から直線や曲線を抽出し、それを数式で表現したい時に用いられるアルゴリズム
通常はエッジ検出を行った後の画像に対してハフ変換を行う(二値化した後にゴミを除去し、細線化処理を行う)
OpenCVには、直線を検出するcvHoughLine2や、円を検出するcvHoughCirclesが用意されている

### ハフ変換のアルゴリズム
– 座標軸を変換する
– ρ=x∗cosθ+y∗sinθとしてρとθで表す。ρかθのどちらかの値が決まれば、直線を求めることができる
– θは0≦θ<π
– 元画像に存在する点の数の中で、多く交差する箇所が求めたい直線になる

– 円を検出したい場合は(x−p)^2+(y−q)^2=r^2を使用する

エッジ検出した点それぞれのρ、θをプロットした曲線のうち、多くの線が重なり合っている点(ρ、θが同じ)の中から、最も直線が存在する可能性が高い組み合わせを探す処理を行っている

なるほど、θが同じだから、直線とみなすわけですね。
角度が同じものを直線とみなすので、抽出する直線の数が多ければ、実態の直線よりも幾何学的なアウトプットになりそうです。

エッジ検出

画像からモノの輪郭だけを抽出することをエッジ検出という
エッジとは、ピクセル値が極端に変わった箇所を強調して抽出するが、より高度な処理が必要
その中でも特にCannyアルゴリズムが性能が高いと言われている

imagefilter ( $image , IMG_FILTER_EDGEDETECT );
imagefilter ( $image , IMG_FILTER_BRIGHTNESS , 20 );
imagefilter ( $image , IMG_FILTER_CONTRAST , -255 );

### measure of overall sharpness and generating a score
imagecolorat — ピクセルの色のインデックスを取得

chicks.jpg

cherry.jpg

function getBlurAmount($image){
	$size = getimagesize($image);
	$image = ImageCreateFromJPEG($image);
	imagefilter($image, IMG_FILTER_EDGEDETECT);
	$blur = 0;
	for ($x = 0; $x < $size&#91;0&#93;; $x++){
		for ($y =0; $y< $size&#91;1&#93;; $y++){
			$blur += imagecolorat($image, $x, $y) & 0xFF;
		}
		return $blur;
	}
}

$e1 = getBlurAmount("chicks.jpg");
$e2 = getBlurAmount("cherry.jpg");
echo "relative blur of first image is" . $e1 / min($e1, $e2) .", and relative blur of second image is" . $e2 / min($e1, $e2) . ".<br>";
echo $e1. "<br>";
echo $e2;

relative blur of first image is1.0578699268003, and relative blur of second image is1.
55206
52186

### Cannyアルゴリズム
1. ノイズ削減
-> 画像を平滑化してノイズ削減
2. 画像の輝度勾配を見つける
-> 平滑化された画像からSobelフィルタを使って縦方向(G_y)と横方向(G_x)の1次微分を取得、2つの微分画像からにエッジの勾配と方向を求める
3. 非極大値の抑制
 -> エッジと関係ない画素を取り除く(勾配方向に対して極大値であるか確認)
4. Hysteresisを使った閾値処理
 -> minVal と maxVal を使って、正しいエッジとそうでないエッジを区分する
OpenCVではcv2.Canny() を使う

エッジ検出単体でというより、組み合わせて使うイメージか・・・

2値化

2値化とは、画像のある範囲のピクセル値を0か1など2つの値に変換することを指す
物体の輪郭を明確にしたい時などに使用する
2値のどちらに振り分けるかを決定する値を閾値といいう

例:
モノクロモデルで色が0〜255までの256階調の画像を0〜127の値は0に、128〜255の値は255に変換する

OpenCVおよびPythonはUbuntuで開発したいので、18.04を起動してlampを構築し、php-gdを入れます。

$ vagrant init ubuntu/bionic64
$ vagrant up
$ vagrant ssh
$ uname -a
Linux ubuntu-bionic 4.15.0-96-generic #97-Ubuntu SMP Wed Apr 1 03:25:46 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

// install tasksel
$ sudo apt install tasksel
// lamp install
$ sudo tasksel install lamp-server
$ apachectl -v
Server version: Apache/2.4.29 (Ubuntu)
$ mysql --version
mysql  Ver 14.14 Distrib 5.7.29, for Linux (x86_64) using  EditLine wrapper
$ php --version
PHP 7.2.24-0ubuntu0.18.04.3 (cli) (built: Feb 11 2020 15:55:52) ( NTS )
$ sudo service apache2 start

// gd install
$ apt-cache search gd | grep php
$ sudo apt-get install php7.2-gd
header ("content-type: image/png");

$filename = "chicks.jpg";
$image = ImageCreateFromJPEG ( $filename );

imagefilter ( $image , IMG_FILTER_EDGEDETECT );
imagefilter ( $image , IMG_FILTER_GRAYSCALE );
imagefilter ( $image , IMG_FILTER_SMOOTH , 8 );
imagefilter ( $image , IMG_FILTER_BRIGHTNESS , 20 );
imagefilter ( $image , IMG_FILTER_CONTRAST , -255 );

imagepng ( $image );
imagedestroy ( $image );

IMG_FILTER_EDGEDETECT: 画像の輪郭抽出
IMG_FILTER_GRAYSCALE:REC.601 luma (Y’) の計算と同じ係数を使い、 重み付けを赤、緑、青のコンポーネントごとに変えることで、 画像を白黒
IMG_FILTER_SMOOTH:画像を滑らかにする
IMG_FILTER_BRIGHTNESS:画像の輝度
IMG_FILTER_CONTRAST:画像のコントラスト

EDGEDETECTをなくすと、こうなる

BRIGHTNESSとCONTRASTで2値化している。

grayscaleのアルゴリズム

線形RGB空間において重み合計(英語版)を計算しなければならない。それはつまり、ガンマ圧縮関数は最初にガンマ拡張によって取り除かれるということである
...
光度は3つの線形的な光の強さの値の重み合計として計算

REC.601 luma

The Rec. 601 signal can be regarded as if it is a digitally encoded analog component video signal, and thus the sampling includes data for the horizontal and vertical sync and blanking intervals. Regardless of the frame rate, the luminance sampling frequency is 13.5 MHz. The samples are uniformly quantized using 8 or 10 bit PCM codes in the YCbCr domain.

For each 8 bit luminance sample, the nominal value to represent black is 16 and the value for white is 235. Eight-bit code values from 1 through 15 provide footroom, and can be used to accommodate transient signal content such as filter undershoots. Similarly, code values 236 through 254 provide headroom and can be used to accommodate transient signal content such as filter overshoots. The values 0 and 255 are used to encode the sync pulses and are forbidden within the visible picture area. The Cb and Cr samples are unsigned and use the value 128 to encode the neutral color difference value, as used when encoding a white, grey or black area.

REC 601は色変換の規格ってことか?

5G周波数割り当てとソケット通信の仕組み

– 5Gでは低い周波数(VHF帯)から高い周波数(ミリ波帯)の複数の周波数帯を組み合わせて利用し、場所、時間、アプリケーションなどにより最適な使い方を採用
– 10Gbps + 高速移動対応
– 電波(Hz=1秒間の振動数)とは電磁波。電波を使って通信を行う場合、変調という操作を行い、伝達したい情報を載せる

27.00GHz 〜 27.40GHz 楽天
27.40GHz 〜 27.80GHz NTTドコモ
27.80GHz 〜 28.20GHz au
29.10GHz 〜 29.50GHz ソフトバンク
※4GではドコモにはLowにあたる3,480MHz~3,520MHz、KDDIには3,520MHz~3,560MHz、ソフトバンクは3,560MHz~3,600MHz

周波数帯(バンド)は機種によって事なる
高い周波数帯の電波は回り込みにくいため、屋内やビル街で繋がりにくい可能性がある

1.周波数利用効率のさらなる向上
L Non-Orthogonal Multiple Access:電力ドメインを使って複数ユーザーの信号を重畳することで、さらなるスループットを向上させる
L Massive MIMO: 100以上のアンテナ素子を使い指向性の高いアクティブアンテナを用いて、ビームフォーミングによる干渉回避と、多数のユーザーの同時接続を可能にするMIMO技術であり、20GHz帯など、高い周波数と相性がよく、容量不足の解消につなげる

2. ネットワークの高密度化
L HetNet (Heterogeneous Network):セル半径の異なるシステムを同一エリア内に混在させ、これらを協調して動作させ、ネットワーク全体のキャパシティを大幅に改善する技術
L デュアルコネクティビティ(C/U分離): 端末と基地局は、接続を制御する「C-plane」(制御信号)と、実際のデータが流れる「U-plane」(ユーザーデータ信号)の2つの信号を送受している。広範囲をカバーするマクロセルでC-Planeを、速度を稼ぎやすいスモールセルでU-planeを別々に通信する「C/U分離」方式により、ネットワークを高密度化

パケット制御技術を使っている。パケット通信では、1本の回線で同時に複数の通信が可能(回線交換方式は回線を占有してしまう)
1パケットは128バイト
Packet Assembly and Disassemblyとはパケットの組立/分解装置の事
データはTCPヘッダ、IPヘッダと共に送信される
通信データはOSのTCP処理で行う

TCP/IP階層: プロトコル
アプリケーション層: HTTP, SMTP, POP, FTP
トランスポート層: TCP, UDP
インターネット層: IP
ネットワークインターフェイス層: イーサネット、無線LAN, PPP…

IPアドレスとはネットワークアドレスとホストアドレスに別れる
16.42.0.9で、16.42をネットワークアドレス、0.9をホストアドレス(サブネットとホストアドレスに分割できる)とする
IPアドレスの変換は/etc/hostsで行うか、DNSサーバで変換
IPパケットはgatewayに送信される

Ethernet Frame(イーサネット規格に従って通信する時のデータ): Destination Ethernet address, Source ethernet address, Protocol, Data, Checksum
IP Packet: Length, Protocol, Checksum, Source IP address, Destination IP address, Data
TCP Packet: Source TCP address, Destination TCP address, SEQ, ACK, Data

登録済みのポートは/etc/servicesにある
$ sudo cat /etc/services

http            80/tcp          www www-http    # WorldWideWeb HTTP
http            80/udp          www www-http    # HyperText Transfer Protocol
http            80/sctp                         # HyperText Transfer Protocol

ネットワーク接続一覧の確認
$ netstat -a

パケット送信の流れ
1. Raw Socket作成
2. IPヘッダー作成
3. UDPヘッダー作成
4. 送信

payloadとはデータ送信における正味のデータ部分
Linuxでは、socket()関数を利用してソケットを作成できる
サーバ側はソケットを作成し、接続待ちをするIPアドレスとポートを設定し、接続を受け付け通信を行う
クライアント側はソケットを作成し、接続相手を設定し通信を行う

socket()-> bind() -> listen() -> accept() -> read()/write() -> close()
apacheの場合、不特定多数のクライアントとやり取りするので、子プロセスで複数のaccept()の状態を作る

つまり様々なデータはsocket化して基本的にTCP/IPで、変調して電磁波で送受信して、クライアントとサーバでやり取りしてるってことね。
そして1パケットは128バイトってことは、リクエストに応じたパケットを作成しているのね。
この辺、義務教育で勉強したかったな。しかし、subnetやgatewayはawsの概念と一緒だな。Linux研究せなあかん。

OpenCVの機能と構成

OpenCV : https://opencv.org/
Github: opencv/opencv

### OpenCVの画像処理アルゴリズム
– GUI(Graphical User Interface)と入出力(画像、ビデオファイル、カメラ映像など)
– 画像の基本構造(構造体)と操作(配列操作、統計、数学関数など)
– 画像処理(エッジ抽出、空間フィルタリング、ヒストグラムなど)
– 構造解析(輪郭抽出、特徴点抽出、矩形領域抽出など)
– 動き解析と物体追跡(オプティカルフロー、モーションテンプレートなど)
– パターン認識(訓練データに基づく物体検出)
– カメラ校正と3次元再構築(カメラキャリブレーション、姿勢推定、エピポーラ幾何など)

### 画像処理関数には様々なものがある
– 空間フィルタリング ぼかし、Prewitt, Sobel, Laplacian, 2D、中央値フィルタ、最大値・最小値フィルタ
– カラーモデル変換 カラー、グレースケール、白黒2値、アルファチャンネル、HLS, HSV、CIELab(XYZ), CIELUV, YUVm YCrCb, カラーツイスト、ビット深度、DIB
– 変換 DCT、DFT
– ジオメトリ計算 ズーム、間引き、回転、ミラーリング、シアー、アフィン変換、投影変換、理マッピング、サブピクセル
– モーフィング モルフォロジー変換、トップハット変換、ブラックハット変換
– ポイント処理 T閾値、コントラスト強調、ヒストグラムのイコライズ計算
– 画像統計 モーメント、ノルム、MSE
– 算術演算、論理演算 加乗、減算、シフト、二乗、スケーリング、論理積、論理和、排他的論理和、Alpha合成、IsGreater、IsEqual、IsLess、ベクトル集合の主成分分析、透視投影変換、線形代数
– 図形・テキスト描画 線分、矩形、円、楕円、ポリゴン、テキスト

対象範囲が広く感じるな。
ある程度作りたいものを明確にして、それから逆算して必要な分野から勉強していくって方が良さそうだな。ジェスチャ認識、物体追跡などカメラなどのハードウェアが必要なものもはハードルが上がるから、最初は顔認識、画像認識から始めた方が良さそうか。

モバイルロボティクス(AGV)

配送、配達など自動搬送するロボット
– 自分で最適なルートを考え、障害物も避ける
– AGV(Automatic Guided Vehicle)
– 従来は、床面に貼られた磁気テープなどで誘導を行い無人走行していた
– 現在はセンサーを使って自由に動ける
– 物流業界を中心に活用されている
– 産業用ロボット(部品組み立てなど)も同じ分野

### 仕組み
SLAM(Simultaneous Localization and Mapping)
レーザースキャナ、ジャイロセンサー、カメラなどの入力装置と組み合わせる

### 対象範囲
回路設計、ディジタル信号処理、組込みシステム、計測工学、アナログ電子回路、計算機制御、知能ロボット、統計的機械学習、群知能、画像情報処理、人工知能、メカトロニクス、ロボット工学など

ハードウェア側の知識も大分求められますね

物体追跡・エゴモーション

物体追跡とは?
-> 与えられた動画像から、指定した対象が画像上でどのように移動するかをステイする
-> デジカメで、被写体が移動しても自動的にフォーカスを合わせ続ける
 –> 顔検出と肌色追跡を組み合わせた人間の追跡やカラー情報による物体の追跡
-> 被写体の対象が初期位置x0から移動量Δxを順方向に探索する
-> フレーム処理が高速であれば、リアルタイムに被写体の追跡処理が可能となる

探索領域
– テンプレートマッチングは全探索するため、計算量が多くなる欠点がある
– アクティブ探索法、Mean Shift、確率的に次の物体位置を推定するParticle Filterなどがある

物体追跡はカメラと連動して動く標的を追跡したいときに有効そうですね。
合わせて、カメラや映像検知の基礎知識も絶対的に必要そう。