ふくふくHukuhuku Inc.
EP.38Open Data 13分公開: 2026-09-01

雲をどうするか ── 使える画像を増やす期間合成

日本は雲が多く、見たい日に晴れている保証はありません。1枚で足りないなら、期間の中から雲のない画素を選んで1枚を組み立てる。その方法と代償を扱います。

#オープンデータ#衛星#画像処理#Python
執筆 / 監修
松尾 亮合同会社ふくふく 代表社員

データ基盤・データパイプライン構築 / BI / 生成 AI 活用支援を専門とするエンジニア (28 年)。 本記事は AI 利用ポリシーに基づき、生成 AI の補助で執筆 → 人間が監修・編集して公開しています。

プロフィール詳細
シェア

衛星データを実務で使おうとすると、最初にぶつかるのが雲です。特に日本のような地域では、見たい日に晴れている保証がありません

この回は、 の扱いと、 ── 期間の中から雲のない画素を選んで1枚を組み立てる ── を扱います。

1. 雲は思っているより多い

「たまに雲がある」程度の認識だと、実務で困ります。特定の日に、特定の場所が晴れている確率は、想像より低い

  • 梅雨・秋雨の時期は、ほぼ使えない日が続く
  • 山間部は平地より雲が多い
  • 衛星が通るのは数日に1回 — その日が曇りなら次まで待つ
  • 部分的な雲でも、対象地域にかかれば使えない
  • 薄い雲は判定が難しく、見逃されることがある

3行目と組み合わさるのが厄介です。観測の機会自体が限られているうえに、その日が曇りなら次の機会まで待つ。結果として、1か月に使える画像が1枚もないということが起こります。EP.36 で扱ったとおり衛星データは無償で得られますが、得られることと、使える画像があることは別です。

薄い雲が最も危険

5行目が実務で問題になります。厚い雲は明らかに白いので判定できますが、薄い雲やもやは判定が難しい。見逃されたまま解析に入ると、その画素の値がわずかにずれます。変化検出(EP.37)では、この「わずかなずれ」が変化として検出されます。

2. 雲マスクを使う

多くの提供元は、雲の判定結果を同梱しています。まずこれを使います。自分で判定を作る必要はありません。

判定結果は、画素ごとに分類(雲、雲の影、雪、水、植生など)として提供されることが多い。どの分類を除外するかを決めます。

分類から、使えない画素を決める
Python
import numpy as np
# 提供元の分類値(実際の値は使うデータの仕様を確認すること)CLASSES = {    0: "無効",    1: "飽和・欠損",    3: "雲の影",    8: "雲(中確度)",    9: "雲(高確度)",    10: "薄い雲",    11: "雪・氷",}
# 除外する分類を、用途に応じて決めるEXCLUDE_STRICT = {0, 1, 3, 8, 9, 10, 11}   # 厳しめ(薄い雲も除く)EXCLUDE_LOOSE = {0, 1, 3, 9}                # 緩め(高確度の雲だけ)

def build_mask(scl: np.ndarray, exclude: set) -> np.ndarray:    """使えない画素を True にしたマスクを返す。"""    return np.isin(scl, list(exclude))

def mask_summary(scl: np.ndarray) -> None:    """どの分類がどれだけあるかを出す。"""    total = scl.size    for value, name in sorted(CLASSES.items()):        n = int((scl == value).sum())        if n:            print(f"  {name:12s} {n:8d} 画素 ({n / total:5.1%})")
    strict = build_mask(scl, EXCLUDE_STRICT).mean()    loose = build_mask(scl, EXCLUDE_LOOSE).mean()    print(f"\n  厳しめの除外: {strict:5.1%} を除外 → 使える {1 - strict:5.1%}")    print(f"  緩めの除外  : {loose:5.1%} を除外 → 使える {1 - loose:5.1%}")

厳しめと緩めの両方を出すのが実務的です。厳しくすると使える画素が減り、緩くすると雲が混ざる。どちらを取るかは用途で決めます。片方だけを見て「使える画素が少ない」と判断すると、緩めなら足りたかもしれないという選択肢を見落とします。

用途に応じた除外の方針
用途除外の方針理由
変化検出(EP.37)厳しめわずかな雲が変化として出る
広域の概観緩め多少の雲より、埋まることを優先
時系列の追跡厳しめ値のずれが傾向を歪める
目視での確認緩め人が見れば雲は分かる

3. 期間合成で埋める

1枚で足りないなら、期間の中から使える画素を集めて1枚を作ります。これが 期間合成 です。

期間内の観測から、使える画素を選んで合成する
Python
import numpy as np

def composite(images: list, masks: list, method: str = "median"):    """期間内の複数の観測から、1枚を組み立てる。
    images: 各時点の値の配列(同じ形)    masks:  各時点の「使えない画素」を True にした配列    """    stack = np.stack([np.where(m, np.nan, img)                      for img, m in zip(images, masks)])
    if method == "median":        # 中央値: 見逃した雲の影響を受けにくい        with np.errstate(invalid="ignore"):            result = np.nanmedian(stack, axis=0)    elif method == "first":        # 最初に見つかった有効な値(最新を優先したいときは順序を逆に)        result = np.full(stack.shape[1:], np.nan)        for layer in stack:            fill = np.isnan(result) & ~np.isnan(layer)            result[fill] = layer[fill]    else:        raise ValueError(f"未知の方法: {method}")
    # 何時点ぶんの観測から作られたか(信頼度の目安になる)    n_used = (~np.isnan(stack)).sum(axis=0)
    return result, n_used

# 使い方の例# merged, n_used = composite(images, masks, method="median")# print(f"1時点も使えなかった画素: {(n_used == 0).mean():.1%}")# print(f"平均で {n_used[n_used > 0].mean():.1f} 時点から合成")

中央値を使うのが基本です。見逃した薄い雲があっても、複数時点の中央値なら影響を受けにくい。1枚だけを選ぶ方式では、その1枚に雲が残っていると直撃します。これは 前処理の現場 EP.22 で扱った「外れ値に強い指標を使う」のと同じ発想です。

何時点から合成したか(`n_used`)を返しているのも要点です。1時点だけから作られた画素と、5時点から作られた画素では、信頼度が違います。後段でこれを使って絞れます。

4. 期間合成の代償

便利ですが、失うものがあります。ここを理解せずに使うと、誤った解釈をします。

期間合成で失うもの
失うもの影響
いつ時点かが曖昧画素ごとに撮影日が違う
短期間の変化が消える期間内に起きて戻った変化は見えない
季節の途中は平均化される植生が変化する時期は特に
時点の比較が難しくなる変化検出との相性が悪い

1行目が本質的です。「2026年9月の画像」と言っても、画素ごとに9月のどの日か違う。厳密な時点の比較には使えません。

変化検出との組み合わせに注意

EP.37 の変化検出で期間合成を使うと、「いつからいつまでの変化か」が曖昧になります。月単位の粗い比較なら許容できますが、「この日に起きた変化」を見たい用途には使えません。用途に応じて、単一時点と使い分けてください。

5. 期間の決め方

期間を長くすれば埋まりますが、時点の曖昧さが増します。この交換を、用途で決めます。

期間の長さと交換関係
期間埋まりやすさ時点の明確さ向く用途
単一時点低い(雲次第)明確厳密な時点比較
1〜2週間比較的明確短期の変化
1か月高い曖昧一般的な用途
3か月(季節)非常に高いかなり曖昧季節ごとの傾向
1年ほぼ埋まる時点の意味が薄い土地被覆の分類

1か月が一般的な落としどころです。日本の多くの地域で埋まり、月単位の比較には使える。それで埋まらない時期(梅雨など)は、期間を延ばすか、レーダー方式を検討します。ただし山間部や離島では1か月でも埋まらないことがあるため、対象地域で実際に確認してください。

埋まらなかった画素をどう扱うかも決めてください。前後の期間から補う、欠損のままにする、前年の同時期で代用する。どれも一長一短ですが、何をしたかを記録に残すことが重要です。 のような形式で配布されているデータは部分的に取り出せるため、必要な範囲だけを何度も試すことが現実的にできます。

6. 判断の整理

この回の内容を、判断の順にまとめます。

  1. 1まず単一時点で足りるか確認する — 足りるならそれが最も明確
  2. 2足りないなら期間を決める — 用途から逆算する
  3. 3除外の厳しさを決める — 変化検出なら厳しめ
  4. 4合成方法を選ぶ — 迷ったら中央値
  5. 5何時点から合成したかを保持する — 信頼度の判断に使う
  6. 6埋まらなかった画素の扱いを決めて記録する

1番目を飛ばさないでください。期間合成は便利なので、最初から使いたくなります。しかし単一時点で足りるなら、そのほうが解釈が明確です。「いつのデータですか」と問われたときに、日付を1つ答えられるというのは、思っている以上に価値があります。

ここまでのまとめ

雲は想像より多く、1か月に1枚も使えないことがある。薄い雲が最も危険(見逃されてわずかにずれる)。除外の厳しさは用途で決める(変化検出なら厳しめ)。合成は中央値が基本で、何時点から作ったかを保持する。期間を延ばすほど埋まるが時点が曖昧になる(1か月が一般的な落としどころ)。次回は、雲を透過するレーダー方式を扱います。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp