狠狠撸

狠狠撸Share a Scribd company logo
第31回 (2015/7/11) MPS 定例ミーティング
Python で画像処理をやってみよう!
第1回 - ヒストグラムと濃度変換 -
金子純也
(Morning Project Samurai 代表)
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
目次
? Morning Project Samurai (MPS) とは
? 画像認識とは
? ディジタル画像の基礎知識
? ヒストグラム
? 濃度変換
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
Morning Project Samurai (MPS)
? Morning?
- 土曜の朝を有意義に
? Project?
- プロジェクト指向
? Samurai?
- 謙虚に学習?
- プロジェクトをバッサバッサ?
と斬りまくる
プロジェクト
リーダー
シップ
メンバー
シップ
成果
人脈
UP!
UP!
UP!
キャリア
知識?技術
UP!
UP!
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
これまでに行った活動
? 勉強会 (プレゼン)?
- Webアプリの安全性について(XSS実習)?
- コンピュータが動くメカニズム(論理回路基礎)?
- プログラムテストについて?
- JavaScript 入門 (実習)?
- Python を用いた Youtube 動画リストの作成?
(プログラム基礎、オブジェクト指向、サーバーからのデータ取得、?
?ドキュメントの検索と読み方、UML基礎)?
- Python で OAuth を使ってみよう!
? プロジェクト?
- MPS HP?
- ぶらさぼり(東京メトロオープンデータ活用コンテスト)?
- 企業内研修講師?
- 世田谷まちづくりファンド (MPS Setagaya 設立)?
- エジソンカー作成
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
ぶらサボり
(東京メトロオプンデータコンテスト出展作品)
Python + Django で開発
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
Be Active, Be Creative!!
MPS
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
目次
? Morning Project Samurai (MPS) とは
? 画像認識とは
? ディジタル画像の基礎知識
? ヒストグラム
? 濃度変換
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
目標
画像認識 (+α) を用いて?
ミニチュア半自立運転車を作る!
(MPS Setagaya のイベントでの発表を目標)
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
画像認識 (Image Recognition)
Recognition:?
The act of accepting that something is true or
important or that it exists
(出典: http://www.merriam-webster.com/)
?
?
物事の真偽や重要性、またはその存在を認める行動
?
Image Recognition:
画像や画像中にあるものが
一体何を意味しているかを理解する
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
画像認識の流れ
サンプリング 前処理 認識
濃度調整
ひずみ補正
雑音除去
etc.
特徴?
抽出
エッジ検出
線分検出
領域分割
etc.
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
必要となる (学べる) 知識と技術
? コンピュータ内での基本的な画像の扱い方
? 数学 ?
(行列演算、フーリエ変換、etc.)
? パターン認識、学習アルゴリズム ?
(ニューラルネット、ベイジアンネットワーク、etc.)
? 上記を統合して実際にプログラミングできる技術
(コンピュータサイエンスに所属する大学3年生程度の知識)
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
画像認識の流れ
サンプリング 前処理 認識
濃度調整
ひずみ補正
雑音除去
etc.
特徴?
抽出
エッジ検出
線分検出
領域分割
etc.
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
必要となる (学べる) 知識と技術
? コンピュータ内での基本的な画像の扱い方
? 数学 ?
(フーリエ変換、行列による座標変換、etc.)
? 学習アルゴリズム ?
(ニューラルネット、ベイジアンネットワーク、etc.)
? 上記を統合して実際にプログラミングできる技術
(コンピュータサイエンスに所属する大学3年生程度の知識)
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
使用するライブラリ
? Pillow
? OpenCV
? numpy
? matplotlib
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
目次
? Morning Project Samurai (MPS) とは
? 画像認識とは
? ディジタル画像の基礎知識
? ヒストグラム
? 濃度変換
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
ディジタル画像
ピクセル?
(r, g, b) = (255, 0, 0)
ピクセルの集合で表現される画像
- ピクセルは離散点
- 各ピクセルにおけるカラーや濃淡の情報も離散値
ピクセル?
(r, g, b) = (255, 255, 255)
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
配列による画像の表現
多くの場合、画像は配列で表現される
例: 2D画像の2次元配列表現
(0, 0) (12, 0)
(12, 12)
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
カラーモデルによる色の表現
? RGB :?
- 適切に選ばれた3つの原刺激の組みで表現?
- コンピュータが主に使用
? HSV:?
- (色相, 彩度, 明度) の組みで表現?
- 人間が色を選ぶときに直感的に使いやすい
? YCbCr:?
- 明度と色差の組みで表現?
- ビデオやストリーミングで主に使用?
- 人間の視覚特性に注目した効率の良い表現方法
(参考: http://cs.brown.edu/courses/cs092/VA10/HTML/ColorModels.html)
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
RGB カラーモデルの原理
? 適切な3色を選べば、その混色で任意の色が表現
可能であることに基づく
? S = RR0 + GG0 + BB0?
?
S: 任意の色?
R0, G0, B0: 原刺激?
R, G, B: 重み
? 色空間: (R, G, B) の組みで表される3次元空間
(出典: https://msdn.microsoft.com/)
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
ピクセルとその情報を?
Python で取得してみよう! (下準備編)
? Pillow のインストール?
pip install Pillow または pip3 install Pillow
? プログラムを置くフォルダを1つ作成
? JPEG 画像を1つ上で作成したフォルダに用意
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
ピクセルとその情報を
Pythonで取得してみよう! (実装編)
# 画像を表現するクラスをロード?
from PIL import Image
# 画像 sample.jpg をオープン
img = Image.open(‘sample.jpg’)
# ピクセル情報を取り出し
pxls = img.load()
# 座標 (1,1) のピクセルの色情報を取得し表示
print(pxls[1, 1])
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
練習問題
用意したJPEG画像の適当な位置から
100 * 100 ピクセル の正方形領域を
黒で塗りつぶして、結果を保存してみよう。?
ヒント:
- ピクセル情報の更新: pxls[i, j] = (r, g, b)
- 画像の保存: img.save(‘?lename.jpg’)
- 公式ドキュメント: pillow.readthedocs.org
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
目次
? Morning Project Samurai (MPS) とは
? 画像認識とは
? ディジタル画像の基礎知識
? ヒストグラム
? 濃度変換
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
ヒストグラム
? 画像を濃度値の頻度分布という観点から見る?
- 各濃度値に対し同じ値を持つピクセルを計数
? 空間情報は失われる?
- 同じヒストグラムを持つ異なる画像が存在
Rが200であるピクセルが
画像全体に占める割合
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
比べてみよう! (問題編)
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
削除
比べてみよう! (回答編)
? 露出不足の画像はヒストグラムが左より
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
ヒストグラムを作ってみよう!
(前準備: matplotlib)
pip install matplotlib
または
pip3 install matplotlib
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
ランダムに生成された0から5までの整数
1000個の列のヒストグラムを描画
import matplotlib.pyplot as plt
import random
rnums = [random.randint(0, 4) for i in range(0, 1000)]
rand_hist = [0] * 5
for i in range(0, 1000):
rand_hist[rnums[i]] += 1
rand_hist = [i/1000 for i in rand_hist]
plt.bar(range(0, 5), rand_hist, 1, color="blue")
plt.show()
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
ヒストグラムを作ってみよう!
(実装編)
ヒント:
Rに関するヒストグラムは、
Rが i であるピクセルの数 x を
画像の全ピクセル数で割って正規化し、
それらを i が小さいものから並べたリスト。
ここで、 i は 0 から 255 の値をとる。
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
目次
? Morning Project Samurai (MPS) とは
? 画像認識とは
? ディジタル画像の基礎知識
? ヒストグラム
? 濃度変換
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
画像を見やすくする方法を
考えてみよう! (問題編)
使用している濃度レンジ
使用可能な濃度レンジ
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
画像を見やすくする方法を
考えてみよう! (回答編)
使用する濃度レンジを拡大すると
コントラストが強調されて見やすくなるのでは?第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
使用濃度レンジを拡大する関数を考える!
Q. ところで関数ってどんなもの?
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
使用濃度レンジを拡大する関数を考える!
Q. ところで関数ってどんなもの?
A. ある入力に対して1つ値が定まるもの
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
使用濃度レンジを拡大する関数を
デザインする
c d
a
b
(参考: [1])
拡大前濃度
拡大後濃度
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
使用濃度レンジを拡大する関数を
デザインする
c d
a
b
(参考: [1])
拡大前濃度
拡大後濃度
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
使用濃度レンジを拡大する関数を
デザインする
c d
0
255
(参考: [1])
拡大前濃度
拡大後濃度
今回は
0から255
に拡大
この折れ線を
プログラムで
表現できれば良い
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
使用濃度レンジを拡大する関数を
デザインする
c d
0
255
(参考: [1])
拡大前濃度
拡大後濃度
今回は
0から255
に拡大 ①
② ③
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
使用濃度レンジを拡大する関数を
デザインする
c d
0
255
(参考: [1])
拡大前濃度
拡大後濃度
今回は
0から255
に拡大 ①
② ③
①②③
はそれぞれ直線!
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
使用濃度レンジを拡大する関数を
デザインする
c d
0
255
(参考: [1])
拡大前濃度
拡大後濃度
今回は
0から255
に拡大 ①
② ③
①②③
はそれぞれ直線!
一次式
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
使用濃度レンジを拡大する関数を
デザインする
c d
0
255
(参考: [1])
拡大前濃度
拡大後濃度
今回は
0から255
に拡大 ①
② ③
①②③
はそれぞれ直線!
一次式
プログラムで
記述可能
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
使用濃度レンジを拡大する関数を
デザインする
c d
0
255
(参考: [1])
拡大前濃度 (x)
拡大後濃度 (y)
x < c のとき
y = 0
b-a
d-c x >= d のとき
y = 255
(x-c)
c <= x < dのとき
y=
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
実行結果
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko
参考図書
1. 田村 秀行: コンピュータ画像処理. オーム社. 2002.
2. P.H.リンゼイ: 情報処理心理学入門1 感覚と知覚. ?
サイエンス社. 1983.
3. Richard Szeliski : Computer Vision: Algorithms and
Applications. Springer. 2010.
第30回 MPS ミーティング資料 (2015/07/11) (c) Junya Kaneko

More Related Content

Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -