« 2009年2月 | トップページ | 2009年4月 »

設備投資

不況なので・・・

自炊率を上げよう、ということで

ホームベーカリーを買いました。

SANYO の、小窓が付いて中が見えるタイプ。

こねてる時から焼き上げまで、中が見えるってのは良いですね。



ドライイーストは(日清製粉の場合)分包タイプと徳用タイプがあるんですね。
(1箱の値段はほぼ同じ)
分包タイプ
(3g x 10袋)
・毎回 3g キッチリの単位でしか使わなくて、計量が面倒なら。
・滅多に使わなくて、50g もあると、しけらせてダメにしてしまうぐらいなら。
徳用タイプ
(50g x 1袋)
・とにかく、お得(分包タイプに比べ66%増量)
・分包の単位とは違う使い方(2g とか 4g)をするのなら。

焼き上げてみると、市販の食パンに比べ、もっさり重たい感じ。
トースターで焼くとサクサク(中はふんわり)になるので、
水分の飛ばし方が少ないだけなのでしょう。

あらためてパン工場で作ったパンの原材料を見てみると
いろんな物を入れているんですねぇ。
中にはわけのわからない物もあったり。

原材料がわかる事もホームベーカリーの利点ですかね。


個人的には、
水の量を減らして玉子を2個
砂糖の半分をハチミツ
にすると、半分ケーキのような風味になって、気に入ってます。

| | コメント (0) | トラックバック (0)

RGB⇔YCbCr変換 その2


リンク
画像の変換(目次ページ)
YCbCr関連
Video 信号の「RGB⇔YCbCr変換」
今度は画像フォーマットにおける YCbCr の方を

JPEG
JPEG の規格書(ISO/IEC 10918)には規定が無かったような気がします。
「気がします。」と書いたのは、私にとっては遠く昔の事なので、
10918がどこかに行っちゃいましたし、記憶の範囲で語る事しかできないから。


JPEGに関しては IJG (Independent JPEG Group)という団体がフリーのソースコードを書いてばらまき、 今ではソフト、ハードのほとんどがそれを元にしていると考えてよいでしょう。

この JIG のソースコードによって JPEG の RGB⇔YCbCr 変換が 世の中の JPEG の事実上の標準(デファクト)になったのだと思います。

JPEG (by IJG)
変換式
Y=0.29900R+ 0.58700G+ 0.11400B
Cb=-0.16874R- 0.33126G+ 0.50000B+ 128
Cr=0.50000R- 0.41869G- 0.08131B+ 128
R=Y+ 1.40200(Cr-128)
G=Y- 0.34414(Cb-128)- 0.71414(Cr-128)
B=Y+ 1.77200(Cb-128)
 
Range
Y,R,G,B の Range = 0~255
Cb,Cr の Range = 0~255 (Center=128)
という変換式が使われています。
ソースコードのコメントによると
「TIFF 6.0 section 21 でこの変換式だったからそれを使った」
と書かれています。
※ TIFF というのは JPEG とは別の静止画像フォーマットです。

MPEG2
MPEG2 は規格書 ISO/IEC 13818-2 の中で規定されています。
sequence_display_extension ( ) の中に matrix_coefficients というコードがあり、その値で判別するとの事。
MPEG2 (ISO/IEC 13818-2)
matrix_coefficients=0
(使用禁止)
matrix_coefficients=1
BT.709
EY = 0.7154EG + 0.0721EB + 0.2125ER
EPB = -0.386EG + 0.500EB - 0.115ER
EPR = -0.454EG - 0.046EB + 0.500ER
matrix_coefficients=2
(未使用)
matrix_coefficients=3
(予約)
matrix_coefficients=4
FCC
EY = 0.59EG + 0.11EB + 0.30ER
EPB = -0.331EG + 0.500EB - 0.169ER
EPR = -0.421EG - 0.079EB + 0.500ER
matrix_coefficients=5
BT.470-2 System B,G
EY = 0.587EG + 0.114EB + 0.299ER
EPB = -0.331EG + 0.500EB - 0.169ER
EPR = -0.419EG - 0.081EB + 0.500ER
matrix_coefficients=6
SMPTE 170M
EY = 0.587EG + 0.114EB + 0.299ER
EPB = -0.331EG + 0.500EB - 0.169ER
EPR = -0.419EG - 0.081EB + 0.500ER
matrix_coefficients=7
SMPTE 240M(1987)
EY = 0.701EG + 0.087EB + 0.212ER
EPB = -0.384EG + 0.500EB - 0.116ER
EPR = -0.445EG - 0.055EB + 0.500ER
matrix_coefficients=8~255
(予約)
 
Range とアナログ→デジタル変換
EY,EG,EB,ER の Range = 0 ~ 1 (アナログ値)
EPB,EPR の Range = -0.5 ~ 0.5 (アナログ値)
Y = (219×EY) + 16
Cb = (224×EPB) + 128
Cr = (224×EPR) + 128
BT.709は正確には ITU-T Recommendation BT.709
FCCUnited States Federal Communications Commission
SMPTESociety of Motion Picture and Television Engineers

なお、ISO/IEC 13818-2 には「matrix_coefficients が無い時」の事を次のように書いています。
『sequence_display_extension ( ) が無いなど、matrix_coefficients が存在しない時は、アプリケーションで実装を決める』

たとえば DVB (ヨーロッパなどで使われるデジタルテレビ規格)では
『matrix_coefficients が存在しない時は、SDTV は 5、HDTV は 1 とみなす』
と書かれています。(DVB BlueBook A001,ETSI TS 101 154)
ARIB (日本のデジタルテレビ規格)では
『matrix_coefficients が存在しない時は、SDTV、HDTV ともに 1 とみなす』
と書かれています。(ARIB STD-B21,STD-B24他)

しっかし、なぜこんなに沢山の色空間をサポートしなければならないのだろう。


MPEG4
MPEG4 は規格書 ISO/IEC 14496-2 の中で規定されています。
video_plane_with_short_header ( ) の中に matrix_coefficients というコードがあり、その値で判別するとの事。
MPEG4 (ISO/IEC 14496-2)
matrix_coefficients=0
(使用禁止)
matrix_coefficients=1
BT.709
EY = 0.7154EG + 0.0721EB + 0.2125ER
EPB = -0.386EG + 0.500EB - 0.115ER
EPR = -0.454EG - 0.046EB + 0.500ER
matrix_coefficients=2
(未使用)
matrix_coefficients=3
(予約)
matrix_coefficients=4
FCC
EY = 0.59EG + 0.11EB + 0.30ER
EPB = -0.331EG + 0.500EB - 0.169ER
EPR = -0.421EG - 0.079EB + 0.500ER
matrix_coefficients=5
BT.470-2 System B,G
EY = 0.587EG + 0.114EB + 0.299ER
EPB = -0.331EG + 0.500EB - 0.169ER
EPR = -0.419EG - 0.081EB + 0.500ER
matrix_coefficients=6
SMPTE 170M
EY = 0.587EG + 0.114EB + 0.299ER
EPB = -0.331EG + 0.500EB - 0.169ER
EPR = -0.419EG - 0.081EB + 0.500ER
matrix_coefficients=7
SMPTE 240M(1987)
EY = 0.701EG + 0.087EB + 0.212ER
EPB = -0.384EG + 0.500EB - 0.116ER
EPR = -0.445EG - 0.055EB + 0.500ER
matrix_coefficients=8~255
(予約)
 
Range とアナログ→デジタル変換
EY,EG,EB,ER の Range = 0 ~ 1 (アナログ値)
EPB,EPR の Range = -0.5 ~ 0.5 (アナログ値)
video_range = 0 のとき
Y = (219×EY) + 16
Cb = (224×EPB) + 128
Cr = (224×EPR) + 128
video_range = 1 のとき
Y = 255×EY
Cb = (255×EPB) + 128
Cr = (255×EPR) + 128
video_range = 0 のとき
Y の Range = 16 ~ 235
Cb,Cr の Range = 16 ~ 240
video_range = 1 のとき
Y,Cb,Cr の Range = 0 ~ 255
matrix_coefficients の表は MPEG2 と MPEG4 で全く一緒なのですが、
video_range というコードが MPEG4 で新たに追加されています。


H.264
下記の表で
KR, KB というのは、
EY = KG×EG + KB×EB + KR×ER
の係数部分の事です。KG は次の式で求められます。
KG = 1.0 - KB - KR
つまり、 KR = 0.2126; KB = 0.0722 なら
EY = 0.7152×EG + 0.0722×EB + 0.2126×ER
という事になります。
ITU-T Rec. H.264
matrix_coefficients=0
GBR
matrix_coefficients=1
BT.709-5
SMPTE RP177(1993)
KR = 0.2126; KB = 0.0722
matrix_coefficients=2
(未使用)
matrix_coefficients=3
(予約)
matrix_coefficients=4
FCC Title 47 Code of Federal Regulations (2003) 73.682 (a) (20)
KR = 0.30; KB = 0.11
matrix_coefficients=5
BT.470-6 System B,G
KR = 0.299; KB = 0.114
matrix_coefficients=6
SMPTE 170M(1999)
KR = 0.299; KB = 0.114
matrix_coefficients=7
SMPTE 240M(1999)
KR = 0.212; KB = 0.087
matrix_coefficients=8
YCgCo
matrix_coefficients=9~255
(予約)
 
Range とアナログ→デジタル変換
EY,EG,EB,ER の Range = 0 ~ 1 (アナログ値)
EPB,EPR の Range = -0.5 ~ 0.5 (アナログ値)
video_full_range_flag = 0 で YCbCr のとき
Y = (219×EY) + 16
Cb = (224×EPB) + 128
Cr = (224×EPR) + 128
video_full_range_flag = 1 で YCbCr のとき
Y = 255×EY
Cb = (255×EPB) + 128
Cr = (255×EPR) + 128
video_full_range_flag = 0 で GBR,YCgCo のとき
R = (219×ER) + 16
G = (224×EG) + 16
B = (224×EB) + 16
video_full_range_flag = 1 で GBR,YCgCo のとき
R = 255×ER
G = 255×EG
B = 255×EB
GBR のとき
Y = Round(G)
Cb = Round(B)
Cr = Round(R)
YCgCo のとき
Y = Round(0.5G + 0.25(R+B))
Cb = Round(0.5G - 0.25(R+B))
Cr = Round(0.5(R-B))

おや、BT.709 に関する係数値が MPEG2,MPEG4 と H.264 では異なります。
規格書が数値を間違えたのでしょうか。
それとも故意に数値を変えたのでしょうか。
どうやら BT.709 の古い規格では係数値が異なるようです。(←未確認)
こんな所からも混乱が始まるのかもしれません。

それにしても、MPEG2,MPEG4,H.264 の流れで見ると機能が増えすぎです。
とかく規格というのは膨らむ方向に進んでしまうので困ったものです。

| | コメント (1) | トラックバック (0)

RGB⇔YCbCr変換


リンク
画像の変換(目次ページ)
YCbCr関連
画像フォーマットの「RGB⇔YCbCr変換」
久しぶりに画像ネタを


世の中には RGB だとか、YCbCr だとかという色空間があって、
その相互変換について。

変換式については ITU-T BT.601 や BT.709 という規格書で定義されています。
(色空間については、これ以外にも規格があります。)

正確には、画像フォーマットの YCbCr ではなく、ビデオ信号の YCbCr の話です。
D端子ケーブルとか、Composite(NTSC)ケーブルとかを流れるデータ信号の事です。


その Bt.601には次のように書かれています。
ITU-R BT.609
Y = 0.299R + 0.587G + 0.114B
CB = 0.564(B - Y)
CR = 0.713(R - Y)

CB = 0.564(B - Y)
= 0.564(B - (0.299R + 0.587G + 0.114B))
= -0.169R - 0.331G + 0.500B
の様に計算すると RGB→YCbCr行列式が得られる。
  Y     0.2990.5870.114   ×   R  
CB -0.169-0.3310.500 G
CR 0.500-0.4190.081 B

実は、この CB = 0.564(B - Y) の 0.564という数値、
次の計算式により与えられます。
0.564 ≒ 0.500
(1.000 - 0.114)
  0.2990.5870.114  
-0.169-0.3310.500
0.500-0.4190.081
つまり、0.564 は計算誤差を含んだ値です。

この

Y = 0.299R + 0.587G + 0.114B

という式、0.299 などの係数値がどこから来たのかよく知りませんが、
仮に、0.299 が 0.29900000 のように、小数点第4位以下がゼロだと仮定すると
以下の行列 A と A-1青文字は理論的に小数点第4位以下がゼロとなる部分です。
A =   0.2990.5870.114  
-0.169-0.3310.500
0.500-0.4190.081
A-1  1.0000.0001.402  
1.000-0.344-0.714
1.0001.7720.000

実際には、BT.601 規格の中に (R,G,B)→(Y,Cb,Cr) の変換係数が
小数点第3位までの値として明記されていますから、
(※逆変換(Y,Cb,Cr)→(R,G,B)は書かれていない。)
A =   0.2990.5870.114  
-0.169-0.3310.500
0.500-0.4190.081
A-1  1.0000.0001.402  
1.000-0.344-0.714
1.0001.7720.000
青文字緑文字: BT.601 に記述がある(or 自明な)係数値
赤文字: BT.601 に記述が無い係数値
となります。
たとえば A-1 の 1.402 は次の式から計算できます。
Cr=(0.5/(1-0.299))(R-Y)

赤文字の係数は小数第3位で切ってしまうと、誤差があるかもしれない部分です。
とは言え『記述の係数値が第3位なら、記述が無い数値も第3位』と考えるのが普通でしょう。

実際、A-1×A の値を計算すると、
  1.0000.0001.402   ×   0.2990.5870.114  
1.000-0.344-0.714 -0.169-0.3310.500
1.0001.7720.000 0.500-0.4190.081
  1.000-0.000440.000438  
0.0001361.00003-0.00017
-0.000470.0004681.000
となるので、これらの係数値を用いても、
行列の積は小数第3位の計算精度が得られる事になります。
(一般に、有効桁数は掛け算によって少なくなりますから、
 この係数は、たまたま良い値だった、と言えるでしょう。)


別の規格書 BT.709 には次のような RGB→YCbCr 計算式が載っています。
ITU-R BT.709
1250/50/2:1
Y = 0.299R + 0.587G + 0.114B
CB = 0.564(B - Y)
CR = 0.713(R - Y)
 
1125/60/2:1
Y = 0.2126R + 0.7152G + 0.0722B
CB = 0.5389(B - Y)
CR = 0.6350(R - Y)
上側の計算式は BT.601と同じ係数です。
下側の計算式はそれとは違います。
係数値が違いますが、桁数も3桁から4桁になっています。

SDサイズは上側の係数
HDサイズは下側の係数
と考えて良いです。
SD(Standard Definition)というのは720x480や720x576サイズ、
HD(High Definision)は1280x720,1920x1080サイズ、
と考えて良いです。

ここでは次のように書くことにしましょう。

(SD)Y = 0.299R + 0.587G + 0.114B

(HD)Y = 0.2126R + 0.7152G + 0.0722B

困った事に、BT.709 にはこの計算式しか記述がありません。
(HD)A =   0.21260.71520.0722  
??0.5000
0.5000??
(HD)A-1  1.00000.00001.5748  
1.0000??
1.00001.85560.0000
赤文字?は行間を読むしかありません。

BT.601と同じ考え方で RGB→(HD)YCbCrの係数値を計算すると、
(HD)A =   0.21260.71520.0722  
-0.1146-0.38540.5000
0.5000-0.4542-0.0458
となります。(小数第4位までで四捨五入しています。)

では、逆行列はどう計算すればよいのでしょうか?
そのまま計算すると期待値と違う結果になります。
  0.21260.71520.0722   -1
-0.1146-0.38540.5000
0.5000-0.4542-0.0458
  1-0.0001515011.574765276  
1-0.187280216-0.468124625
11.8556096860.00010574
※Microsoft Excel の "MINVERSE" という機能で計算した逆行列です。

なので、BT.601の時に計算した様に、
0.5389 ≒ 0.5000
(1.0000 - 0.0722)
0.6350 ≒ 0.5000
(1.0000 - 0.2126)
という所に立ち戻って逆行列を計算しなければなりません。

Microsoft Excel で逆行列を計算すると次のようになりました。
  1-2.28E-171.5748  
1-0.187324273-0.468124273
11.85560
小数第4位まで四捨五入して次の逆行列を得ます。
(HD)A-1  1.00000.00001.5748  
1.0000-0.1873-0.4681
1.00001.85560.0000

念のため、(HD)A-1×(HD)A の値を計算すると、
  1.00000.00001.5748   ×   0.21260.71520.0722  
1.0000-0.1873-0.4681 -0.1146-0.38540.5000
1.00001.85560.0000 0.5000-0.4542-0.0458
  1-7.42E-57.42E-5  
1.46E-50.99999644-1.10E-5
-5.18E-55.18E-51
と小数第4位までの精度が保たれているので、この係数で確定して良さそうです。

さて、ここで1つお知らせがあります。
BT.601BT.709には、上記の変換式の他に
次の様な記述があります。
8-bit coding時の Range
Y 16~235
CB,CR 16~240
これは「8bitのフルレンジ(0~255)ではなく上記の値に縮小しなさい」と言っています。

BT.601やBT.709はビデオ信号の規格なので、
ブランキング区間などの関係でフルレンジは使えないのです。

これを加味した計算式は次のようになります。
(SD)Y = (0.299R + 0.587G + 0.114B)×219.0 / 255.0 + 16.0;
(SD)Cb = (-0.169R - 0.331G + 0.500B)×224.0 / 255.0 + 128.0;
(SD)Cr = (0.500R - 0.419G - 0.081B)×224.0 / 255.0 + 128.0;

ただし、Y,Cb,Crが Range に納まるように飽和演算(丸め処理)すること。

Y' = ((SD)Y - 16.0)×255.0 / 219.0;
Cb' = ((SD)Cb - 128.0)×255.0 / 224.0;
Cr' = ((SD)Cr - 128.0)×255.0 / 224.0;
R = 1.000Y' + 1.402Cr';
G = 1.000Y' - 0.344Cb' - 0.714Cr';
B = 1.000Y' + 1.772Cb';

ただし、R,G,Bが 1~255 のRange に納まるように飽和演算すること。


(HD)Y = (0.2126R + 0.7152G + 0.0722B)×219.0 / 255.0 + 16.0;
(HD)Cb = (-0.1146R - 0.3854G + 0.5000B)×224.0 / 255.0 + 128.0;
(HD)Cr = (0.5000R - 0.4542G - 0.0458B)×224.0 / 255.0 + 128.0;

ただし、Y,Cb,Crが Range に納まるように飽和演算すること。

Y' = ((HD)Y - 16.0)×255.0 / 219.0;
Cb' = ((HD)Cb - 128.0)×255.0 / 224.0;
Cr' = ((HD)Cr - 128.0)×255.0 / 224.0;
R = 1.0000Y' + 1.5748Cr';
G = 1.0000Y' - 0.1873Cb' - 0.4681Cr';
B = 1.0000Y' + 1.8556Cb';

ただし、R,G,Bが 1~255 のRange に納まるように飽和演算すること。


さて、世の中には YCbCr の他に YPbPr という色空間の呼び方があります。
この違いは何でしょうか?

とあるウィキペディアに「SDTVがYCbCrでHDTVはYPbPr」と書かれていました。

BT.709にはそんな事は書かれていません。
別の規格でしょうか?

世の中には諸説飛び交っています。
Tektronix の "A Guide to Standard and High-Definition Digital Video Measurements"
という資料によれば、
デジタル信号は YCbCr で、アナログComponent信号が YPbPr のようです。
1125/60/2:1 (SMPTE 240M)
Y = 0.212R + 0.701G + 0.087B
 
1920x1080 (SMPTE 274M)
1280x720 (SMPTE 296M)
Y = 0.2126R + 0.7152G + 0.0722B
 
525/59.94/2:1
625/50/2:1
1250/50/2:1
Y = 0.299R + 0.587G + 0.114B

| | コメント (2) | トラックバック (0)

フィルター交換

レンジフィルターが約1年経ったので交換。

左が使い古し。右が交換する新品。

思ったより汚れてない。

大して料理しないのもあるけど
「油モノはそんなに好きじゃないしなぁ」
なんて言ってみたり。

けど、フィルターがあまり役に立ってなくて、
フィルターの隙間をそのまま抜けていっている、
という可能性もあるなぁ。

| | コメント (0) | トラックバック (0)

韓国が「独島」教科書

韓国慶尚北道教育庁が「独島」という教科書を発行し、
小学校を対象に「竹島が韓国領であるという思想教育」を行うそうだ。

韓国人とは友達になれそうもないな。

| | コメント (0) | トラックバック (0)

« 2009年2月 | トップページ | 2009年4月 »