暗い ‘Lena’
画素値(出力)
output pixel value
250
“トーンマッピング”
200
100
50
0
tone mapped
image
とは?
y  x1 / 
  1/ 2
150
0
50
100
150
200
250
input pixel value
画素値(入力)
original
image
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
元の ‘Lena’
明るい‘Lena’
200
yx
 1
150
100
1/ 
50
0
tone mapped
image
250
画素値(出力)
output pixel value
画素値(出力)
output pixel value
250
0
50
100
150
200
input pixel value
tone mapped
image
画素値(入力)
y  x1 / 
 2
150
100
50
0
250
original
image
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
200
0
50
100
150
200
input pixel value
250
画素値(入力)
original
image
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
赤い ‘Lena’
ソラリゼーション
y  x1 / 
200
150
100
50
0
tone mapped
image
250
0
50
100
150
200
input pixel value
250
画素値(入力)
output pixel value
画素値(出力)
output pixel value
250
 R  3

 G  1
  0.9
 B
200
150
100
50
0
tone mapped
image
0
50
100
150
200
input pixel value
original
image
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
250
original
image
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
出現回数 H(x)
ヒストグラム (8 個のビン)
ヒストグラム
5000
0
100
200
画素値 x
原画像
確率密度 P(x)
1
0.8
0.6
0.4
0.2
0
0
100
200
画素値 x
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
ヒストグラム
H(x)
10000
0
累積度数 F(x)
確率密度と累積度数
15000
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
確率密度
P(x)
0.2
0.15
0.1
0.05
0
0
100
200
画素値 x
確率密度 と 累積度数
4 階調の ‘Lena’
Max

H (x)  画素の総数
出現回数 H(x)
x 10
ヒストグラム
H(x)
x=Min,・・・,Max
x  Min
ヒストグラム
H(x)
2
1.5
1
0.5
0
画素の総数で割る
4
0
100
200
画素値 x
原画像
x

F ( x) 
Max

P (u )
u  Min
P( x)  1
x  Min
確率密度
P(x)
x=Min,・・・,Max
確率密度 P(x)
累積度数
累積度数 F(x)
1
0.8
0.6
0.4
0.2
0
0
100
0.2
0.1
0
200
確率密度
P(x)
0.3
0
100
画素値 x
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
トーンマッピングによる確率密度の変化
50
0
0.01
100
50
0
0.02
yx
  1/ 2
150
確率密度 P(x)
50
0
100
200
0.008
0.006
と P(x)
で表せ
50
100 150 200
画素値 x
50
0
100
ヒント Q(y) dy = P(x) dx
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
200
→ ← dx
0.01
0.008
0.006
0.004
0.002
0
0.002
0
100
入力 x
画像 y
0.004
y  f (x)
150
0
0.02
を f(x)
確率密度
P(x)
0.01
0.01
200
確率密度 Q(y)
入力 x
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
100
0
確率密度 Q(y)
画像 y
Q(y)
150
出力 y = f (x)
100
1/ 
200
確率密度 P(x)
画素値 y
150
250
確率密度
200
画素値 y
出力 y = f (x)
250
200
→ ← dy
暗い ‘Lena’
f(x) に依って
どう変わるか
200
画素値 x
50
100 150 200
画素値 x
確率密度
P(x)
トーンマッピングによる確率密度の変化
Q( y )dy  P ( x)dx
より、
Q( y )  P( x)
dx
dy

トーンマッピングが
P( x)
dy
dx
誤差
ここで、
y  f ( x),
dy
 f ' ( x)
dx
に及ぼす影響
なので、
Q( y ) 
確率密度 Q(y) を
f(x) と P(x) で表せた
P( x)
f ' ( x)
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
テスト画像 + 誤差
トーンマッピングの後
MATLAB
clear all; close all;
トーンマッピング関数
250
% Fn1='C:¥Users¥iwa¥岩橋¥ソフトウェア¥標準画像¥mono¥';
% Fn2='lena.bmp';
% X=imread(strcat(Fn1,Fn2),'bmp');
y = f(x)
200
yx
 3
150
100
1/ 
50
0
暗い
領域
0
50
100
150
200
X=zeros(256,256);
for i=1:256;for j=1:256;
X(i,j)=double(j-1);
end;end;
x=0:255;
X=double(X);
Xd=X+(rand(size(X))-0.5)*64;
G=3;
y =x .^(1/G);
Y =X .^(1/G);
Yd=Xd.^(1/G);
250
x
Mx=max(y);
y =y /Mx*255;
Y =Y /Mx*255; Y =flipud(Y');
Yd=Yd/Mx*255; Yd=flipud(Yd');
トーンマッピングの前
信号+誤差
x + e(x)
% [Hx Bx]=hist(Xd(:),256);
% [Hy By]=hist(Yd(:),256); Hy(1)=0;
% Hx=Hx/sum(Hx);
% Hy=Hy/sum(Hy);
% subplot(2,2,1);plot(Hy,By,'.');
% xlabel('P(y)'); ylabel('y'); axis('tight');
% subplot(2,2,4);plot(Bx,Hx,'.');
% xlabel('x'); ylabel('P(x)'); axis('tight');
subplot(2,2,1);imshow(uint8(Yd));
subplot(2,2,4);imshow(uint8(Xd));
subplot(2,2,2); plot(x,y,'K','LineWidth',1.5); hold on;
axis([-1 256 -1 256]);
xlabel('x');
ylabel('y = f(x)');
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
誤差のみ
トーンマッピングの後
数理的な裏付け
トーンマッピング関数
250
f ( x  e( x ))  f ( x ) 
y = f(x)
200
yx
 3
150
100
1/ 
df ( x )
 e( x )
dx
 x  e(x) を仮定
なので
50
0
0
50
100
150
200
250
x
暗い領域の
誤差が大きい
トーンマッピングの前
誤差
e(x)
y  f ( x  e( x))  f ( x)
df ( x)
 f ( x) 
 e( x )  f ( x )
dx
df ( x)

 e( x )
dx
接線の傾き
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
まとめ
150
100
50
0.01
200
150
50
0
100
確率密度 Q(y)
接線の
傾き
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
ヒストグラムを
200
入力 x
信号+誤差
0.01
0.008
0.006
平滑化する
x + e(x)
0.004
0.002
0
画像 y
df ( x)
dx
100
0
0.02
確率密度 P(x)
0
出力 y = f (x)
→ ← Δy
200
画素値 y
y 
df ( x)
 e( x )
dx

250
出力の誤差
50
100 150 200
→ ← e(x)
↑
x
画素値 x
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
出力の誤差 Δy を
f(x) と e(x) で表せた
ヒストグラムの平滑化
ビンを 16個 に減らすと...
出力
出力
100
x
されている
0
200
0
50 100 150 200 250
y
入力
入力
40
関数 f を
30
巧く選ぶと
-3
P(x) x10
-3
100
y  f (x)
50
0
100
x
P(y) x10
150
0
確率密度
y = f(x)
200
30
20
10
0
200
入力
50 100 150 200 250
y
P(x) x10
-3
確率密度
10
0
image x
50 100 150 200 250
x
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
50 100 150 200
y
されている
-3
入力
200
100
50 100 150 200
x
トーンマッピング関数の決定法
Q( y ) 
なので、
決めよ。
f ' ( x) 
y  f (x)
P ( x)
 Const.
f ' ( x)
 Q ( y )dy  P ( x )dx
dy / dx  f ' ( x )
より
P( x)
Const.
従って、
P(x)
20
0
200
image x
確率密度 が 一定となる
Q( y )
様に f(x) を
確率密度
30
20
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
入力
40
確かに
平滑化
40
0
出力
40
60
入力
50 100 150 200 250
x
トーンマッピング関数の決定法
出力
100
x
10
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
250
0
20
0
image x
y  f (x)
image y = f(x)
確率密度
見にくい
100
P(y) x10
10
確率密度
平滑化
-3
image y = f(x)
0
20
P(x) x10
y  f (x)
200
30
y = f(x)
-3
100
50
見やすい
P(y) x10
150
出力
80
確率密度
y = f(x)
200
0
出力
40
確率密度
250
f ( x) 

x
min
P(u )
du
Const.
確率密度 Q(y) が一定となる
様に f(x) が決定された
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
← 結果は累積度数!
出力
d f(x) / dx
出力の誤差
d f(x) / dx
10
switch(SwIn);
case 1; Fn2='couple.bmp';
case 2; Fn2='girl.bmp';
case 3; Fn2='lax.bmp';
case 4; Fn2='airplane.bmp';
case 5; Fn2='bridge.bmp';
case 6; Fn2='barbara.bmp';
case 7; Fn2='lena.bmp';
case 8; Fn2='test.bmp';
end;
8
6
4
Fn1='C:¥Users¥iwa¥岩橋¥ソフトウェア¥標準画像¥mono¥';
Xs=imread(strcat(Fn1,Fn2),'bmp');
Xs=NrmImg(double(Xs))*255;
% signal
Xd=Xs+(rand(size(Xs))-0.5)*64; % signal + noise
2
0
MATLAB
clear all; close all;
%
SwTm=1;
for SwIn=1:8;
0
image y = f(x + e)
100
x
200
noise in y
入力
入力の誤差
switch(SwTm);
case 1;
[Hx Bx]=hist(Xs(:),256); Hx=Hx/sum(Hx);
f=0; for i=1:256; f=f+Hx(i); F(i)=f; end;
end;
F =F *255;
Ys=F(uint8(Xs)+1);
Yd=F(uint8(Xd)+1);
[Hy By]=hist(Ys(:),2^8); Hy(1)=0; Hy=Hy/sum(Hy); Hy=Hy*1000;
[Hx Bx]=hist(Xs(:),2^8); Hx(1)=0; Hx=Hx/sum(Hx); Hx=Hx*1000;
figure(1);%---------------------- signal
subplot(2,3,3);plot(By,Hy,'-');
xlabel('y'); ylabel('P(y) x10^{-3}'); axis('tight'); axis('square');
subplot(2,3,6);plot(Bx,Hx,'-');
xlabel('x'); ylabel('P(x) x10^{-3}'); axis('tight'); axis('square');
subplot(2,3,1);imshow(uint8(Ys)); xlabel('image y = f(x)');
subplot(2,3,5);imshow(uint8(Xs)); xlabel('image x');
x=floor(Bx);
y=F(x+1);
subplot(2,3,2); plot(x,y,'K','LineWidth',1.5); axis('square');
axis([-1 256 0 256]); xlabel('x'); ylabel('y = f(x)');
%
% figure(2);%---------------------- signal + noise
% subplot(2,3,3);imshow(uint8(Yd-Ys+128));
% xlabel('noise in y');
% subplot(2,3,6);imshow(uint8(Xd-Xs+128));
% xlabel('noise in x');
%
% subplot(2,3,1);imshow(uint8(Yd)); xlabel('image y = f(x + e)');
% subplot(2,3,5);imshow(uint8(Xd)); xlabel('image x + e');
%
% subplot(2,3,2); plot(x,Df(x,y),'-R','LineWidth',1.5);
% hold on; axis('square');
% axis('tight'); xlabel('x'); ylabel('d f(x) / dx');
image x + e
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
noise in x
pause; close all;
end;
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
トーンマッピング
出力
カラー画像の各色
-3
P(y) x10
y = f(x)
200
100
0
0
output y = f(x)
{R,G,B} それぞれを
100
x
40
20
0
200
入力
R,G,B 各色を別々に
ヒストグラム平滑化
-3
200
150
100
50
0
input x
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
50 100 150 200 250
y
確率密度
P(x) x10
ヒストグラム平滑化
平滑化の後
50 100 150 200 250
x
トーンマッピング
出力
平滑化の後
トーンマッピング
出力
平滑化の後
250
200
50 100 150 200 250
y
模様が
明瞭化
output y = f(x)
確率密度
-3
-3
P(x) x10
50 100 150 200 250
y
60
40
20
0
50 100 150 200 250
x
input x
トーンマッピング
出力
50 100 150 200 250
x
100
x
40
20
0
200
y = f(x)
-3
100
60
入力
40
150
100
0
色調は
不自然
0
output y = f(x)
-3
P(x) x10
100
x
100
30
20
10
0
200
入力
50
確率密度
60
40
20
0
50 100 150 200 250
x
input x
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
50 100 150 200 250
y
80
R,G,B 各色を別々に
ヒストグラム平滑化
150
0
input x
200
確率密度
200
R,G,B 各色を別々に
ヒストグラム平滑化
50
50
50 100 150 200 250
y
平滑化の後
250
-3
平滑化の後
P(y) x10
y = f(x)
200
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
10
入力
80
模様が
明瞭化
20
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
トーンマッピング
0
30
0
200
50
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
output y = f(x)
100
x
R,G,B 各色を別々に
ヒストグラム平滑化
100
input x
0
0
確率密度
150
0
出力
0
P(x) x10
入力
R,G,B 各色を別々に
ヒストグラム平滑化
-3
50
0
P(y) x10
output y = f(x)
100
x
100
-3
0
150
P(x) x10
0
20
P(y) x10
100
40
200
40
y = f(x)
-3
P(y) x10
y = f(x)
200
50 100 150 200 250
x
トーンマッピング
出力
-3
P(y) x10
y = f(x)
200
平滑化の後
100
0
0
output y = f(x)
100
x
40
20
0
200
入力
確率密度
P(x) x10
-3
R,G,B 各色を別々に
ヒストグラム平滑化
50 100 150 200 250
y
100
input x
for c=1:3;
Xs=X0(:,:,c);
Xs=NrmImg(double(Xs))*255;
% signal
switch(SwTm);
case 1;
[Hx Bx]=hist(Xs(:),256); Hx=Hx/sum(Hx);
f=0; for i=1:256; f=f+Hx(i); F(i)=f; end;
end;
F =F *255;
Ys=F(uint8(Xs)+1);
[Hy By]=hist(Ys(:),2^5); Hy(1)=0; Hy=Hy/sum(Hy); Hy=Hy*1000;
[Hx Bx]=hist(Xs(:),2^5); Hx(1)=0; Hx=Hx/sum(Hx); Hx=Hx*1000;
figure(1);%---------------------- signal
subplot(2,3,3);
if(c==1); plot(By,Hy,'-R'); end;
if(c==2); plot(By,Hy,'-G'); end;
if(c==3); plot(By,Hy,'-B'); end;
hold on;
xlabel('y'); ylabel('P(y) x10^{-3}'); axis('tight'); axis('square');
subplot(2,3,6);
if(c==1); plot(Bx,Hx,'-R'); end;
if(c==2); plot(Bx,Hx,'-G'); end;
if(c==3); plot(Bx,Hx,'-B'); end;
hold on;
xlabel('x'); ylabel('P(x) x10^{-3}'); axis('tight'); axis('square');
x=floor(Bx);
y=F(x+1);
subplot(2,3,2);
if(c==1); plot(x,y,'R','LineWidth',1.5); end;
if(c==2); plot(x,y,'G','LineWidth',1.5); end;
if(c==3); plot(x,y,'B','LineWidth',1.5); end;
hold on;
axis('square'); axis([-1 256 0 256]); xlabel('x'); ylabel('y = f(x)');
50
0
MATLAB
clear all; close all;
%
SwTm=1;
for SwIn=1:1;
% switch(SwIn);
%
case 1; Fn2='couple.bmp'; case 2; Fn2='girl.bmp'; case 3; Fn2='lax.bmp'; case 4; Fn2='airplane.bmp';
%
case 5; Fn2='bridge.bmp'; case 6; Fn2='barbara.bmp'; case 7; Fn2='lena.bmp'; case 8; Fn2='test.bmp';
% end;
switch(SwIn);
case 1; Fn2='couple.bmp'; case 2; Fn2='girl.bmp'; case 3; Fn2='aerial.bmp';
case 4; Fn2='airplane.bmp'; case 5; Fn2='parrots.bmp'; case 6; Fn2='mandrill.bmp';
case 7; Fn2='lena.bmp'; case 8; Fn2='earth.bmp'; case 9; Fn2='balloon.bmp';
case 10; Fn2='milkdrop.bmp'; case 11; Fn2='sailboat.bmp'; case 12; Fn2='pepper.bmp';
case 13; Fn2='tree_log.bmp';
end;
Fn1='C:¥Users¥iwa¥岩橋¥研究室¥ソフトウェア¥標準画像¥color¥';
% Fn1='C:¥Users¥iwa¥岩橋¥ソフトウェア¥標準画像¥color¥';
% Fn1='C:¥Users¥iwa¥岩橋¥ソフトウェア¥標準画像¥mono¥';
X0=imread(strcat(Fn1,Fn2),'bmp');
Y0(:,:,c)=Ys;
end;
50 100 150 200 250
x
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
subplot(2,3,1); imshow(uint8(Y0)); xlabel('output y = f(x)');
subplot(2,3,5); imshow(uint8(X0)); xlabel('input x');
pause; close all; clear X0 Y0;
end;
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
トーンマッピングする
255
6
LDR
(HDR)画像を
7
5
LDR = f (HDR)
4
3
Tone Mapping
2
1
0
ハイダイナミックレンジ
256階調, 8bit, LDR
HDR 画像から LDR 画像へ
0
0
200
400
HDR
600
0
6.5万階調, 16bit, 元のHDR
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
800
6.5万
べき関数
log(1   x )
x1 / 
1
1
0.8
0.8
0.6
0.6
LDR
LDR
対数関数
0.4
=1/2
0.2
0
0.2
0.4
0.6
0.8
=1
0.2
=2
0
0.4
=2
0
1
0
0.2
0.4
0.6
HDR
HDR
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
カラー画像のトーンマッピング
xa
x a  ba
Hill 関数
x a ( 1 + b aLDR
)/ (xa+ b a)
1
0.8
0.6
0.4
a=1.0, b=1.0
a=1.2, b=0.1
a=4.0, b=0.1
0.2
0
0
0.2
0.4
0.6
HDRinput x
normalized
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
0.8
1
R,G,B,それぞれを
別々にトーンマッピング
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
色褪せない
トーンマッピング
0.8
1
色褪せないための工夫
HDRの赤, 緑, 青 
LDRの赤, 緑, 青
x L ,c  f ( x H ,c )

xH ,R
 x L, R
x H ,G
x L,G
x L ,c 
Hill 関数 & フィルタ

x L, B 
x H ,B
f ( x H ,Y )
x H ,Y
x H ,c
&低域通過フィルタ
Hill 関数
c  {R, G , B}
HDR白黒の輝度
R,G,B,それぞれを
別々にトーンマッピング
色褪せない
トーンマッピング
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
Hill 関数& フィルタ
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
x H ,Y
All Rights Reserved / M.Iwahashi / Nagaoka University of Technology
&高域強調フィルタ