電気電子情報工学専攻 岩橋政宏
iwahashi@vos.nagaokaut.ac.jp

２．基本的な画像処理

2.1 ニ値化、モルフォロジー、エッジ検出
2.2 輝度補正、コントラスト調整、トーンマッピング
2.3 拡大、縮小、回転、歪み補正

2.1 ニ値化、モルフォロジー、エッジ検出

T=64

T=64二値化（T=64）

2.1 ニ値化、モルフォロジー、エッジ検出

T=128

T=128

二値化（T=128）

2.1 ニ値化、モルフォロジー、エッジ検出
背景差分

原画

二値化

原画ー背景平滑化

背景T=128↑画素＞T ならば 255画素≦T ならば 0ヒストグラム

2.1 ニ値化、モルフォロジー、エッジ検出
背景差分

原画

二値化

原画ー背景平滑化

T=128↑
画素＞T ならば 255画素≦T ならば 0ヒストグラム

背景2.1 ニ値化、モルフォロジー、エッジ検出
適応的二値化

原画

適応的二値化

原画MATLAB: I2=imbinarize(I0,'adaptive','ForegroundPolarity','dark','Sensitivity',0.5);

２．基本的な画像処理

2.1 ニ値化、モルフォロジー、エッジ検出
2.2 輝度補正、コントラスト調整、トーンマッピング
2.3 拡大、縮小、回転、歪み補正

収縮

収縮

2.1 ニ値化、モルフォロジー、エッジ検出

小さな白い点が消滅した
白い線が細すぎる

MATLABe = strel('square',3)y = imerode(x,e)

「収縮」の演算
0100000

1

1

100001

1

100

101110111010001000000000100000110000001000100000000

構造化要素
Structuring Element
MATLABe = strel('diamond',1)

収縮 Erosion
・構造化要素の中に０が１つでもあれば，０を出力する
MATLABy = imerode(x,e)

膨張

膨張2.1 ニ値化、モルフォロジー、エッジ検出

小さな黒い穴が塞がった
白い線が太すぎる

MATLABe = strel('square',3)y = imdilate(x,e)

「膨張」の演算
00

0

00000

1

0000001000000

1000

10000000001000001

1

10000111001011101110100010

構造化要素
Structuring Element
MATLABe = strel('diamond',1)

膨張 Dilation
・構造化要素の中に１が１つでもあれば，１を出力する
MATLABy = imdilate(x,e)

収縮

膨張2.1 ニ値化、モルフォロジー、エッジ検出

クロージング

MATLABe = strel('square',3)y = imdilate(x,e)
y = imerode(y,e)

小さな黒い穴が減少した
白い線の太さは同じ

膨張

収縮

2.1 ニ値化、モルフォロジー、エッジ検出

オープニング
小さな白い点が消滅した

MATLABe = strel('square',3)y = imerode(x,e)
y = imdilate(y,e)

白い線の太さは同じ

2.1 ニ値化、モルフォロジー、エッジ検出
closingmorphology

適応二値化
e=strel(.) 構造化要素
y=imclose(x,e)

原画

strel('line',5,0)

strel('line',5,90)

strel('diamond',3)

strel('line',7,90)

2.1 ニ値化、モルフォロジー、エッジ検出
openingmorphology

適応二値化
e=strel(.) 構造化要素
y=imopen(x,e)

原画

strel('square',3)

strel('diamond',3)

strel('square',5)'rectangle',[3 9]構造化要素のバリエーション

strel('diamond',1)

strel('diamond',2)strel('line',3,45)

strel('line',3,0)

strel('square',3)

strel('rectangle',[3 2])

2.1 ニ値化、モルフォロジー、エッジ検出
色々なmorphology

適応二値化bwskel骨格化

bwperim(I1,4)
周囲検出

原画

strel('line',3,00)
膨張

strel('line',3,90)膨張

多値のモルフォロジー（二値化しない）

closingopening

erosionclosing

opening

erosion

膨張(dilation)：構造化要素の中の最大値を出力する収縮(erosion )：構造化要素の中の最小値を出力する

I0=imread('image.jpg');
SE = strel('diamond',5) ;I1 = imclose(I0,SE);I2 = imopen( I0,SE);
I3 = imerode(I0,SE);montage({I0,I1,I2,I3});

２．基本的な画像処理

2.1 ニ値化、モルフォロジー、エッジ検出
2.2 輝度補正、コントラスト調整、トーンマッピング
2.3 拡大、縮小、回転、歪み補正

2.1 ニ値化、モルフォロジー、エッジ検出
横の１階微分
,,−=,横の2階微分,,=− ,2階微分の絶対値, =| , |上段の画像を →二値化した二値化↑ 原画像, は画素値∈[0,255]
iは縦の位置、jは横の位置↑

縦線と斜線が抽出された

2.1 ニ値化、モルフォロジー、エッジ検出
横の１階微分,, −=,横の2階微分,,=− ,2階微分の絶対値, =| , |↑ 原画像

上段の画像を →二値化した

二値化

＋ノイズ

↑ このままではノイズに弱い2.1 ニ値化、モルフォロジー、エッジ検出
縦の平均値フィルタ=, + , +3,,

横の１階微分

横の２階微分,,−,=,,2階微分の絶対値, =| , |=− ,二値化↑ ノイズに強くなった

原画像＋ノイズ2.1 ニ値化、モルフォロジー、エッジ検出
横の１階微分,, −=−横の２階微分

=,,,,

=代入

,−

=− ,,,=−,=横の１階微分,,−+,,−,,,

横の２階微分,,,,,,要素の和→−

⊙

,,−

⊙

↑

,,,,,,,,,

アダマール積（同じ位置の要素毎の積）補足
横の１階微分
, =−

−,,,

←

横の２階微分
,代入

, =−

−

,

→重心が左へ1/2画素分だけズレる,,,,=,重心が右へ
1/2画素分だけズレる

,−,,−

↑

重心がズレない

フィルタのサイズと位置ズレ

=
=
=−

−

= −
← 2 →ﾌｨﾙﾀｻｲｽﾞ
−= −
← 2 →
ﾌｨﾙﾀｻｲｽﾞ+= −← 3 →ﾌｨﾙﾀｻｲｽﾞ

変化点の位置変化点の位置,,,

2.1 ニ値化、モルフォロジー、エッジ検出
横の１階微分

縦の平均(=,13+, =, +,,横の２階微分, =, −,, )/3

=,,,

−,,

=

=
− ,,−,

縦の平均 ＆ 横の２階微分
−
−−

13,

⊙,,,,,,,,

補足
横の２階微分

縦の平均
13,,,, =

=−,

13
1
3

=

1
3,,,,

縦の平均 ＆
横の２階微分

,,,

=,,

1, =
3

1+1+1

1
3=,

−,+,,,,,,,+,,−,,,,−2−2−2,,,,,,−−−=+1+1+1

1−2+1

13,,,,,,+1−2+1,,,+1−2+1,,,

2.1 ニ値化、モルフォロジー、エッジ検出
微分0 0 0−1 0 10 0 0Prewitt−1 0 1−1 0 1−1 0 1Sobel−1 0 1−2 0 2−1 0 1

原画像＋ノイズ
二値化

ノイズに弱い2.1 ニ値化、モルフォロジー、エッジ検出
微分+Prewitt+Sobel+

原画像＋ノイズ
二値化

ノイズに弱い

2.1 ニ値化、モルフォロジー、エッジ検出
MATLAB の関数を使った場合
edge(x,'Canny')edge(x,'Prewitt')edge(x,'Sobel')

エッ ジ検出
エッ ジ検出

2.1 ハフ変換（線の検出）
エッ ジ検出ハフ 変換（ 線 ）edge(x,'canny')hough(x)↑緑：検出された線分
黄：線分の始点
赤：線分の終点←

パラメータの投票結果

2.1 ハフ変換（線の検出）
エッ ジ検出ハフ 変換（ 線 ）hough(x)↑緑：検出された線分←パラメータの投票結果

2.1 ハフ変換（円の検出）↓赤：検出された円

ハフ 変換（ 円 ）二値化
imbinarize(x,'adaptive')

imfindcircles(x)半径 と 中心座標47
153 22555451 361
51
220 430
50372 956596 123
他、10個

I=imread('貨幣重畳.jpg'); % 画像を読み込む
I=rgb2gray(I);% カラーを白黒へ
imshow(I);% 画像を表示[centers,radii,metric] = imfindcircles(I,[40 400],'Sensitivity',0.9);viscircles(centers, radii);% 画像上に円を表示[radii centers]% 円の半径と中心座標関連する MATLAB の関数(1/3)

関連する MATLAB の関数(2/3)

関連する MATLAB の関数(3/3)

２．基本的な画像処理

2.1 ニ値化、モルフォロジー、エッジ検出
2.2 輝度補正、コントラスト調整、トーンマッピング
2.3 拡大、縮小、回転、歪み補正

Photoshopによる例

2.2 Photoshop による現像（例）2.2 Photoshop による現像（例）2.2 Photoshop による現像（例）現像の手順 1/2（lightroom）
現像前(撮って出し)ヒストグラム

色温度 5100
色かぶり +20

露光量+1.36

色温度 3600
色かぶり +30

現像の例 2/2（lightroom）

明瞭度+60

カスミ除去+41

白レベル+45

２．基本的な画像処理

2.1 ニ値化、モルフォロジー、エッジ検出
2.2 輝度補正、コントラスト調整、トーンマッピング
2.3 拡大、縮小、回転、歪み補正

明るくする（定数倍で）白飛び↓

トーンマッピング
min(1.2x, 255)

ヒストグラム（補正後）白飛びに注意→元の画像定数倍== 1.2

ヒストグラム（補正前）暗くする（定数倍で）トーンマッピング
max(1.2x－51, 0)

黒潰れ↓

ヒストグラム（補正後）

黒潰れに注意

定数倍
=+

元の画像

= 1.2,= −51

ヒストグラム（補正前）明るくする（ガンマ補正で）ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

明るくした
（補正後）

255

255

元の画像

ﾄｰﾝﾏｯﾋﾟﾝｸﾞ/

ヒストグラム
（補正後）

ガンマ補正
= /
=2

255

255

/

ヒストグラム（補正前）暗くする（ガンマ補正で）ﾄｰﾝﾏｯﾋﾟﾝｸﾞ
255

ﾄｰﾝﾏｯﾋﾟﾝｸﾞ
255

255

暗くした
（補正後）

255

ヒストグラム
（補正後）

元の画像

ガンマ補正
= /
= 1/2

ヒストグラム（補正前）

トーンマッピング（R,G,B 別々に）ｻｲｹﾃﾞﾘｯｸ?!

赤くなった

元の画像

元の画像

２．基本的な画像処理

2.1 ニ値化、モルフォロジー、エッジ検出
2.2 輝度補正、コントラスト調整、トーンマッピング
2.3 拡大、縮小、回転、歪み補正ダイナミックレンジを拡大（定数倍で）ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

黒潰れ↓

ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

白飛び
↓

調整後

白飛びと黒潰れに注意

ヒストグラム（補正後）

調整前

ヒストグラム（補正前）ダイナミックレンジを縮小（定数倍で）ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

調整後

ヒストグラム
（補正後）

調整前

255

= 0.7, = 1/2

255

−

+

ヒストグラム（補正前）ﾀﾞｲﾅﾐｯｸﾚﾝｼﾞを拡大（シグモイド関数で）ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

調整後

ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

ヒストグラム（補正後）

調整前= 10, = 1/2

255

1 + exp −255−

ヒストグラム（補正前）ﾀﾞｲﾅﾐｯｸﾚﾝｼﾞを拡大（シグモイド関数で）ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

調整後

ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

ヒストグラム（補正後）

調整前= 10, = 1/4

255

1 + exp −255−

ヒストグラム（補正前）

ｺﾝﾄﾗｽﾄ調整（ヒストグラム均等化）
ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

調整後

ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

ヒストグラム（補正後）

調整前

ヒストグラム（補正前）ｺﾝﾄﾗｽﾄ調整（ヒストグラム均等化）
ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

調整後

ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

ヒストグラム（補正後）

調整前

ヒストグラム（補正前）

ｺﾝﾄﾗｽﾄ調整（ヒストグラム均等化）
ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

調整後

ﾄｰﾝﾏｯﾋﾟﾝｸﾞ

ヒストグラム（補正後）

調整前

ヒストグラム（補正前）ヒストグラム均等化（MATLABによる）↑ 元の画像↓ ヒストグラム均等化の適用後

MATLAB: histeq(X)２．基本的な画像処理

2.1 ニ値化、モルフォロジー、エッジ検出
2.2 輝度補正、コントラスト調整、トーンマッピング
2.3 拡大、縮小、回転、歪み補正

ヒストグラム
均等化の数理ヒストグラム均等化の数理
ﾄｰﾝﾏｯﾋﾟﾝｸﾞ= ( )出力のﾋｽﾄｸﾞﾗﾑ
Q(y)

出力画像

入力画像

問１

P(x)

ﾄｰﾝﾏｯﾋﾟﾝｸﾞの関数 f(x) をどう決める？

入力のﾋｽﾄｸﾞﾗﾑ

Q(y) を f(x) と P(x) で表したい
tone mapping→ ← dyy = f(x)出力画像
histogram P(x)histogram Q(y)ヒント→ ← dxQ(y) dy = P(x) dx

入力画像(図中のの面積)

解より

( )

= ( )

( )

= ( )

ここで= ( ),なので( ) =問２102( )

ﾄｰﾝﾏｯﾋﾟﾝｸﾞ後のﾋｽﾄｸﾞﾗﾑ Q(y) をf(x) と P(x) で表せた

Q(y) を均等にする f(x) は？

4

6000

ヒストグラムtone
mappingP(x)1.5(12 ビン)

1

y＝f(x)

0.50( )
( )

==( )

5000
4000

均等化されたヒストグラム

3000
2000

Q(y)

1000
050

100

150

200

0250

0

輝度値
2000

P(x)

(256 ビン)

1000
500
00100

輝度値

200

輝度値

ヒストグラム

1500

100

200

2000

tone
mappingy＝f(x)

15001000

ヒストグラム

500
0Q(y)

0100

輝度値200解 f(x) を P(x) から決める
Q( y )P( x)f ' ( x)Q ( y )dy P ( x )dx
dy / dx f ' ( x )Const.

なので、
f ' ( x)よりP( x)Const.

従って、f ( x)xminP (u )
duConst.

←

結果は累積度数

ﾄｰﾝﾏｯﾋﾟﾝｸﾞ後のﾋｽﾄｸﾞﾗﾑ Q(y) が均等となる様にトーンマッピングの関数 f(x) が決定された

２．基本的な画像処理

2.1 ニ値化、モルフォロジー、エッジ検出
2.2 輝度補正、コントラスト調整、トーンマッピング
2.3 拡大、縮小、回転、歪み補正

ヒストグラム
均等化の欠点トーンマッピングによるノイズの増減増幅／低減の度合いは低減
される

関数 f(x) の微係数
( )

f(x)
ﾄｰﾝﾏｯﾋﾟﾝｸﾞ関数増幅されるで決まる

増幅もせず
→ ←
ノイズ

低減もしないのは
f(x) = x

トーンマッピング前のノイズ（大きさは同じ）

ﾄｰﾝﾏｯﾋﾟﾝｸﾞ関数の微係数

出力d f(x) / dx

出力の誤差

( )

6420
image y = f(x + e)

→ ←
ノイズ

0100
x

200
noise in y

入力

入力の誤差

image x + e

noise in x

微係数が最も大きい
ノイズが最も大きく増幅される→xﾄｰﾝﾏｯﾋﾟﾝｸﾞ関数の微係数

出力

( )

6d f(x) / dx

出力の誤差

4200100x

image y = f(x + e)

200
noise in y

入力

入力の誤差

image x + e

noise in x

ﾄｰﾝﾏｯﾋﾟﾝｸﾞ関数の微係数

出力の誤差

微係数が最も大きい
ノイズが最も大きく増幅される

出力( )d f(x) / dx

1086420
image y = f(x + e)

0100
x200
noise in y

入力

入力の誤差

image x + e

noise in x

ヒストグラム均等化の場合
トーンマッピング関数の微係数は入力画像のヒストグラムに等しいﾄｰﾝﾏｯﾋﾟﾝｸﾞ関数の微係数

出力( )5d f(x) / dx

出力の誤差

43210

image y = f(x + e)

0100
x200
noise in y

入力

入力の誤差

image x + e

noise in x

２．基本的な画像処理

2.1 ニ値化、モルフォロジー、エッジ検出
2.2 輝度補正、コントラスト調整、トーンマッピング
2.3 拡大、縮小、回転、歪み補正

2.3 拡大、縮小、回転、歪み補正

imresize(x,s,'box');

1つの値を3カ所にコピー

2.3 拡大、縮小、回転、歪み補正

imresize(x,s,'cubic');% 'box'% 'triangle'% 'cubic'% 'lanczos2'% 'lanczos3'→

箱型のカーネル
三角カーネル ('bilinear')
3 次カーネル ('bicubic')
Lanczos-2 カーネル
Lanczos-3 カーネル

超解像
super resolution

補間による拡大
元の信号左隣と同じ値で補間して解像度を２倍にした
両側の値の平均値で補間して解像度を２倍にした

2.3 拡大、縮小、回転、歪み補正

エイリアスを除去しないと...

2.3 拡大、縮小、回転、歪み補正

エイリアスを除去した

エリアス除去とは？
元の信号エリアスを除去せずに解像度を1/2倍にしたフィルタ [1 2 1]/4 をかけてエリアスを除去してから解像度を1/2倍にした

2.3 拡大、縮小、回転、歪み補正

imrotate(x,20,'nearest','crop')

imrotate(x,20,'bilinear','crop')2.3 拡大、縮小、回転、歪み補正

出典：MATLAB

変換イメージのギャラリーの作成

関連する MATLAB 関数

その他～ 比較明合成
LightroomとPhotoshopの比較明合成で印象的なホタル・星景写真作成
https://life-with-photo.com/lightsynthesis

比較明合成で花火を仕上げよう
https://silkypix.isl.co.jp/how-to/method/lighten-composite_fire-works/

星の軌跡をきれいに撮影できる
比較明合成のやり方とは？
https://capa.getnavi.jp/special/259316/
ライブコンポジット（比較明合成）による撮影
OM-D E-M1, ISO 16000, F2.8, 10sec
2021.6.13 長岡市