dsj541kghのアイコン画像
dsj541kgh 2026年02月19日作成 (2026年02月19日更新)
セットアップや使用方法 セットアップや使用方法 Lチカ Lチカ 閲覧数 53
dsj541kgh 2026年02月19日作成 (2026年02月19日更新) セットアップや使用方法 セットアップや使用方法 Lチカ Lチカ 閲覧数 53

ローリングシャッターについて調べてみた

はじめに

スマホカメラとSpresense HDRカメラのローリングシャッターの速度についていろいろ調べてみました。

ローリングシャッターとは

ローリングシャッター(RS)は、撮像センサが画面全体を同時刻に露光せず、走査(scan)しながら行ごとに順番に露光・読み出しすることです。撮影中にカメラまたは被写体が動くと、同一フレーム内で行ごとに撮影時刻が異なるため、直線が曲がったり、物体が傾いたりして、これをローリングシャッター歪みとか言います。
一方で、撮像センサを一度にすべて露光・読み出しするグローバルシャッターというものもあります。これはローリングシャッター歪みが原理的に発生しない非常に良いものではあるのですが、価格が高いです。
ローリングシャッターによる歪みには以下のようなものがある気がします。

  • 高速パン(ヨー回転が大):角速度or並進速度 が大 → 縦線が斜め
  • 振動(角速度が時間変動):姿勢角が揺れる → jello(ゼリー)
  • プロペラ等(被写体側の高速運動):相対運動が大 → バナナ状・波打ち
    諸説あるかと思いますが、以下にローリングシャッターカメラの撮影時のざっくりした流れを示します。
    キャプションを入力できます
    画像の上から下に向かって読み出しを行っていくものとします。ローリングシャッターでは、行 yy の読み出しの代表時刻が

t(y)=t0+yτt(y) = t_0 + y \, \tau

で表されます。

  • t0t_0:フレームの先頭行の時刻 [s]
  • τ\tau:1行あたりの読み出し時間 [s]
  • yy:行インデックス
  • HH:画像全体の高さ [pixel]

全行の走査にかかる時間(1フレームの読み出し時間)は

Tf=HτT_{f} = H \, \tau

で表されます。このTfT_{\text{f}} がローリングシャッター歪みの原因であり、これが短い画像ほどローリングシャッター歪みが少ないと思います。これについて色々考えてると、τ\tauを計測したくなってきました。

計測方法

ローリングシャッター速度の計測方法は、点滅LED(Lチカ)を写し込んで縦縞を読む方法で行いました。
以下のように縞1周期分の縦方向ピクセル数をカウントすると、これがLED点滅周期で読み込んだライン数になるという仕組みです。
読み取り箇所
上記画像ですと、画像の1行当たり読み込み時間は1/60 [s] ÷2374 [px] = 7.02... [us]みたいな感じになります。
今回は以下の文献を参考に計測をしました。
Sheinin et al., “Rolling Shutter Imaging on The Electric Grid” (ICCP 2018)
先ほどの図で説明します。

  • LL:縞の長さ [pixel]
  • TT:LEDの点滅周期 [s]
  • TLT_{L}:縞の長さ分の読み出し時間 [s]
  • τ\tau:1行あたりの読み出し時間 [s]

既知の周期TTで点滅するLEDを写したときに現れる縞模様の長さLLTTを割ることで1行あたりの読み出し時間推定値 τ\tauが計算されます。なので1行あたりの読み出し時間の推定値はτ=T/L\tau=T/Lで表されます。
ここで推定値と言ったのは、実際の縞の長さLLの読み出し時間TLT_L\simeqTTであり、最大で1行あたりの読み出し時間分の誤差TLT|T_{L}-T|を含むからです。
縞模様の読み方にはいろいろ方法があると思いますが、今回は少しでも点灯していれば点灯画素と判断し、点灯画素と完全に消灯した画素の境界を読み取ることにしました。

撮影結果

以下に、Pixel8a、Pixel4a、Spresense HDRカメラの結果を示します。
全てデューティー比50%の点滅LEDによって計測したものになります。

Pixel8a

50 Hz

1/50 [s] ÷2842[px] = 7.037... [us]
解像度:4624x3472
1フレームの読み込み時間:3472 [px] x 7.037 [us] = 24.43... [ms]
Pixel8a 50Hz

60 Hz

1/60 [s] ÷2374 [px] = 7.020... [us]
解像度:4624x3472
1フレームの読み込み時間:3472 [px] x 7.020 [us] = 24.38... [ms]
Pixel8a 60Hz

70Hz

1/70 [s] ÷2032 [px] = 7.030... [us]
解像度:4624x3472
1フレームの読み込み時間:3472 [px] x 7.030 [us] = 24.41... [ms]
Pixel8a 70Hz

80 Hz

1/80 [s] ÷1778 [px] = 7.030... [us]
解像度:4624x3472
1フレームの読み込み時間:3472 [px] x 7.030 [us] = 24.41... [ms]
Pixel8a 80Hz

90 Hz

1/90 [s] ÷1578 [px] = 7.041... [us]
解像度:4624x3472
1フレームの読み込み時間:3472 [px] x 7.041 [us] = 24.45... [ms]
Pixel8a 90Hz

100 Hz

1/100 [s] ÷1422 [px] = 7.032... [us]
解像度:4624x3472
1フレームの読み込み時間:3472 [px] x 7.032 [us] = 24.42... [ms]
Pixel8a 100Hz

150Hz

1/150 [s] ÷951 [px] = 7.010... [us]
解像度:4624x3472
1フレームの読み込み時間:3472 [px] x 7.010 [us] = 24.34... [ms]
Pixel8a 150Hz

200 Hz

1/200[s] ÷711 [px] = 7.032... [us]
解像度:4624x3472
1フレームの読み込み時間:3472 [px] x 7.032 [us] = 24.42... [ms]
Pixel8a 200Hz

250 Hz

この画像は点滅周期に対して露光時間が長いので完全な消灯期間が見られません。なので、明暗差を何となく判別して縞の長さを計測します。
1/250 [s] ÷568 [px] = 7.042... [us]
解像度:4624x3472
1フレームの読み込み時間:3472 [px] x 7.042 [us] = 24.45... [ms]
Pixel8a 250Hz

Pixel4a

1/60 [s] ÷1567[px] = 10.64... [us]
解像度:4032x3024
1フレームの読み込み時間:3024 [px] x 10.64 [us] = 32.16... [ms]
Pixel4a

Spresense HDRカメラ

1280x960 デフォルト

この画像も先ほどと同様点滅周期に対して露光時間が長いので完全な消灯期間が見られません。しかも縞が単純な明暗ではなく三段階に分かれているように見えます。
とりあえず、明暗差を何となく判別して縞の長さを計測します。
1/60 [s] ÷580[px] = 28.74... [us]
解像度:1280x960
1フレームの読み込み時間:960[px] x 28.74 [us] = 27.59... [ms]
Spresense HDRカメラ 1280x960 デフォルト

1280x960 HDR ON 露光2000us

1/60 [s] ÷577[px] = 28.89... [us]
解像度:1280x960
1フレームの読み込み時間:960[px] x 28.89 [us] = 27.73... [ms]

Spresense HDRカメラ 1280x960 HDR ON 露光2000us

1280x960 HDR OFF 露光2000us

1/60 [s] ÷577[px] = 28.89... [us]
解像度:1280x960
1フレームの読み込み時間:960[px] x 28.89 [us] = 27.73... [ms]
Spresense HDRカメラ 1280x960 HDR OFF 露光2000us

320x240 HDR OFF 露光2000us

1/60 [s] ÷144[px] = 115.7... [us]
解像度:320x240
1フレームの読み込み時間:240[px] x 115.7[us] = 27.78... [ms]
Spresense HDRカメラ 320x240 HDR OFF 露光2000us

まとめ

スマホカメラとSpresense HDRカメラは、1フレームの読み込み時間が20~30msくらいでした。
pixel8aについて、LED点滅周期の変化で1フレームの読み込み時間に大きな変化は見られませんでした。
Spresense HDRカメラについて、HDR機能の有無や解像度で読み込み時間に大きな変化は見られませんでした。

ログインしてコメントを投稿する