クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

コンピュータビジョンの基本

レッスン全文をここで読めます。無料アカウントを作成すると、実際のラボで実践できます。

コンテナラボ読了目安 13分コマンド6個

画像の中にコインは何枚あるでしょう

人は写真の中のコインを1秒で数えます。コンピュータに渡されるのは長い数字の列だけで、それを「コイン9枚」に変える方法を教えなければなりません。それを一歩ずつ行うのが、コンピュータビジョンです。

このレッスンが終わると

メモ

画像のピクセルを読み、しきい値を使って、その中の物の数を数えることができる。

キーワード

  • ピクセル:画像の1つの点。数字で保存される。
  • モード:数字の並べ方。たとえば RGB(赤、緑、青)や L(灰色の1つの段階)。
  • グレーレベル:0(黒)から 255(白)までの数。
  • しきい値:暗いピクセルと明るいピクセルを分けるグレーレベル。
  • フィルター:まわりのピクセルを使って各ピクセルを変えるきまり。ぼかしなど。
  • ラベル:画像の中で見つかった、別々の物ひとつひとつにつける番号。

はじめに:もう知っていること

メモ

頭の中で答えてください。1. 画面のすべての色は、どの3色を混ぜてつくられますか。2. 0 から 255 の目盛りで、40 と 200 ではどちらが明るいですか。3. 比較の中の > は何をしますか。答え: 赤、緑、青。200。左が右より大きいかどうかを調べる。

始める前に

メモ

レッスンの上のバーにある ラボを開始 を押し、動いていると表示されるまで待ちます。コンテナはひとつ、jupyter だけで、ターミナルからは docker exec jupyter でその中の Python を使います。これはコンテナの中でコマンドをひとつ実行する命令です。JupyterLab のリンクを押すと、ポート 8888 の画面が開き、画像を開いて見ることができます。下の 実行 ボタンは、それぞれのコマンドをラボのターミナルに、同じセッションの中で順番に入力します。様子を見たいときや自分で入力したいときは、バーの ターミナルを開く(新しいタブ) を押します。

画像は数字の格子

ls images は、ラボが描いた5枚の画像を一覧にします。最初のスクリプトは coins.png を開き、中身を表示します。答えは、画像が幅 320 ピクセル、高さ 240 ピクセルで、モードは RGB だと言っています。10, 10 のピクセルは (35, 35, 35) で、ほとんど黒です。これは背景です。50, 50 のピクセルは (197, 157, 62) で、金色です。これはコインの一部です。画像全体の平均グレーレベルは 57.6 で、暗めです。大部分が背景だからです。

コマンド
docker exec jupyter ls images

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
docker exec jupyter python3 steps/look.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

グレーは明るさを残し、色を捨てる

convert("L") は、各ピクセルを1つの数にします。コインのピクセル (197, 157, 62) は 158 になります。次にスクリプトは、グレーを4つの帯に分けてピクセルを数えます。0 から 63 の暗い帯が 63231、真ん中はゼロ、128 から 191 が 13566 です。背景とコインという、はっきりした2つのグループです。coins_grey.png も保存するので、JupyterLab で開けます。

コマンド
docker exec jupyter python3 steps/grey.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

しきい値は暗いものと明るいものを分ける

しきい値は、グレーの画像を、各ピクセルについての「はい」か「いいえ」に変えます。この段階より明るいか、という問いです。スクリプトは 76800 ピクセルに3つの段階を試します。30 では 58806 が残り、画像のほとんど全部です。背景が多くの場所で 30 より明るいからです。100 では 13569 が残り、これがコインです。160 では 10062 が残り、コインの中まで切ってしまいます。段階 100 の結果は coins_mask.png に保存され、コインのある場所が白になります。

コマンド
docker exec jupyter python3 steps/threshold.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

確かめよう

ヒント

3つの段階のうち、コインと背景を分けられたのはどれですか。30 はなぜうまくいかなかったのですか。答え: 100。暗い背景と明るいコインのあいだの空いた部分にあるからです。30 は背景そのもののノイズの中にあるので、背景の多くも残ってしまいます。

ぼかしはノイズをおさえる

ページのスキャン scan.png には、汚れたコピーのように細かい点があります。ぼかしは、各ピクセルをまわりのピクセルの平均に置きかえます。スクリプトは、文字のないページの空いた部分が、どれだけばらつくかを測ります。ぼかす前は 25.3 グレーレベルのばらつきがあり、ぼかした後は 4.9 だけです。ノイズはほとんど消え、文字もやわらかく見えます。比べられるように scan_blurred.png も保存します。

コマンド
docker exec jupyter python3 steps/blur.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

物の数を数える

コインを数えるには、うまくいった段階でマスクをつくり、scikit-image にラベルをつけてもらいます。くっついている白いピクセルのまとまりごとに、それぞれ番号がつきます。答えは 9 個で、ラボが描いた9枚のコインです。面積は3種類で、657 ピクセルが3つ、1313 が3つ、2553 が3つ。小さい、中くらい、大きいコインです。

コマンド
docker exec jupyter python3 steps/count.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくあるまちがい

注意

コンピュータが正しいしきい値を自分で見つけると思っている人がたくさんいます。そうではありません。100 を選んだのは、あなたが2つのグレーレベルのグループを見たからです。scan.png のように光がむらな画像では、左でうまくいく段階が、右ではうまくいかないことがあります。数えた結果を信じる前に、必ず目でマスクを確かめましょう。

ノートブックで同じ作業

バーから JupyterLab を開き、start.ipynb をダブルクリックします。スクリプトがしたことを、1セルずつ行います。セルをクリックして Shift と Enter を押すと実行されます。画像はセルの下に表示されます。最後のセルは、あなた自身の問いのための場所です。road.png か scan.png を開いて、何か尋ねてみましょう。

最後の確認

ヒント

見返さずに答えてください。1. グレーレベルは、どんな範囲の数を使いますか。2. しきい値は、各ピクセルについて何を決めますか。3. ぼかしは、なぜ空いた部分のばらつきを小さくしましたか。4. ラベルづけはコインをいくつ見つけ、正しいとどうしてわかりましたか。答え: 0 から 255。その段階より明るいかどうか。各ピクセルがまわりの平均になり、ぽつんと明るい点や暗い点が真ん中へ引き寄せられたから。9 個。描いた数と同じだったから。

先生方へ

ヒント

このレッスンは、ラボの中で進めるレッスンの小さな例です。手順と「実行」ボタンがレッスンで、ラボは生徒ひとりひとりの自分用のコピーです。ラボはひとつのサービス、Pillow、NumPy、scikit-image の入った JupyterLab で、ここには自動で採点されるものはありません。生徒は、画像のどれかについて自分で作ったノートブックを JupyterLab からダウンロードして提出し、それが何を示したかを一文で添えます。要点:1. 画像は数字の格子である。2. しきい値はピクセルを2つに分ける。3. フィルターはまわりのピクセルを使って1つのピクセルを変える。よくあるまちがい:マスクを見ずに、しきい値や数えた結果を信じてしまうこと。用意するもの:ラボとブラウザー。ヒント:実行を押す前に、それぞれの数を予想させましょう。画像は決まった種から描かれるので、どのコピーも同じ数になります。ラボにはニューラルネットワークも OpenCV もありません。ご自分のモジュールにコピーして変更するか、レッスンビルダーの ラボ メニューからゼロでつくってください。

このラボとソースについて: コンピュータビジョンラボ:JupyterLab でピクセル、しきい値、物の数え方

授業で教えていますか?これらのレッスンを生徒に割り当て、採点と生徒ごとのラボを使えます。