QGISでプールを検出する5つの方法
公開日 更新日


QGISでプールを検出するには、まずOpenStreetMapを確認します。Vector > QuickOSM > QuickOSM…を開き、キーにleisure、値にswimming_poolを指定します。地図が薄い地域では、セグメンテーションモデルを実行するか、ラスタ計算機で青のしきい値を取ります。どちらを使うかは、地上解像度で決まります。
| 入力 | 手法 | コスト |
|---|---|---|
| OSMマッパーが活発な地域 | 方法1、QuickOSMでleisure=swimming_pool | 無料、1クエリ |
| オルソ画像(RGB)と数百のプール | 方法2、セグメンテーションモデル | 無料のプラグインは自作モデルかGPUが必要。クラウド型のプラグインは無料枠の後にサブスクリプション |
| 5〜30cmのオルソ画像(RGB) | 方法3、ラスタ計算機での色しきい値 | 無料、コアQGIS内 |
| 近赤外またはSWIRバンド付き画像 | 方法4、水指数の後にしきい値 | 無料、衛星画像では庭のプールを検出できない |
| マルチスペクトル画像と半日 | 方法5、SCPまたはdzetsaka | 無料のプラグイン、訓練エリアを描く時間 |
ここに載せたバージョン、価格、メニューパスは、2026年9月3日にQGIS 3.44のマニュアルと各ツールのドキュメントで確認しました。
方法1:すでに描かれたプールを取ってくる
OpenStreetMapにはleisure=swimming_poolのタグが付いたオブジェクトが3,036,801件あり、そのうち2,731,704件は実際のジオメトリを持つウェイです(2026年9月3日時点のtaginfo)。
QuickOSMを開いて検索する
Vector > QuickOSM > QuickOSM…を開くと、Overpass APIに問い合わせます。キーにleisure、値にswimming_poolを指定し、範囲はマップキャンバスの表示範囲か、地名で指定した行政区域にします。
ポリゴンだけを残し、庭のプールに絞る
ノードとして描かれたプールには面積がないので、ポリゴンのレイヤを使います。これらのプールのうち1,808,809件にはaccess=privateも付いており、裏庭のプールを絞り込むフィルタになります。
leisure=swimming_areaは別物です。湖や海で泳ぐために指定された場所を指します。

**使う場合:**公共・商業プールが必要なとき。
**使わない場合:**誰も申告しなかったものを見つける仕事のとき。
方法2:セグメンテーションモデル
セグメンテーションモデルは形と文脈を読むので、同じ色の防水シートとプールを見分けられます。私たちはその1つとしてAI Segmentationを作っています。この節は自社ツールの紹介です。
インストールしてログインする
プラグインマネージャからインストールします。QGIS 3.22以降が必要で、GPUもモデルの重みも不要です。アカウントを作ると無料枠が使え、その後は月€39(税別)です。
範囲を描き、語を入力して絞り込む
swimming poolと入力して実行します。ポリゴンはプロジェクトのCRSで返り、面積、周長、信頼度が付いています。並べ替えてから、誤りを削除します。
実行時に読み込む調整テーブルから、2つの数値を紹介します。プールの実行では、タイルは最大300mで、約0.13m/画素を求めます。それより粗いと、プールがテラスににじむためです。レビューはswimming poolの信頼度0.20から始まり、buildingの0.30より低く設定されています。プールのマスクは屋根よりスコアが低く出るためです。

1つ制限があります。カバー付きプールはモデルに届かず、見逃されます。どちらのクラウドモードも、画像をEU内の当社サーバーに送ります。

同じ用途のツールはほかに4つあります(2026年9月3日時点)。
| ツール | インストールするもの | GPU | アカウント | 画像がお使いのコンピュータの外に出るか | プール対応 | コスト |
|---|---|---|---|---|---|---|
| Deepness | プラグインマネージャ、必要なPythonパッケージ、ONNXモデル | 任意、CPUで動く | 不要 | いいえ | 渡したモデルの通り | 無料 |
| Geo-SAM | プラグインマネージャ、依存パッケージ、モデルの重み | 任意 | 不要 | いいえ | クリックまたは矩形で1オブジェクト | 無料 |
| samgeo | Pythonパッケージ、QGISパネルなし | 推奨 | 不要 | いいえ | スクリプト可、プールクラスなし | 無料 |
| Mapflow | プラグインマネージャ | 不要 | 要 | クラウドサービスでははい、エンタープライズ向けにオンプレミスも提供 | Swimming poolsモデル、オンデマンド | クレジット、有料 |
| AI Segmentation(当社製) | プラグインマネージャ | 不要 | 要 | 両クラウドモードではい、ローカルモデルではいいえ | swimming poolと入力 | 無料枠、その後は月€39(税別) |
**使う場合:**手で囲むには多すぎるプール数があるとき。
**使わない場合:**画像をお使いのコンピュータから出せないとき。DeepnessかGeo-SAMを使ってください。
公表する精度の数字に誰かが署名する一斉調査には、Mapflowが専用のSwimming poolsモデルをオンデマンドで提供しており、F1は0.95超と添えられています。当社はプールについて精度の数字を公表していません。
方法3:ラスタ計算機で青のしきい値を取る
以下の3つの手順はレイヤの単位で面積をフィルタするため、投影座標系で作業してください。
コアQGISだけでできる、最も近い方法です。Raster > Raster Calculator…を開くと、バンドはlayer_name@band_numberで指定します。オルソ画像(RGB)では、明るく彩度の高い青が残ります。
("ortho@3" > 90) AND ("ortho@3" - "ortho@1" > 25) AND ("ortho@3" - "ortho@2" > 10)
これらの数値は私が解像度20cmのオルソ画像から決めたものです。プールの画素を20個、屋根の画素を20個サンプルしてから、値を調整してください。
Raster > Conversion > Polygonize (Raster to Vector)でポリゴン化し、native:extractbyexpressionでフィルタします。サイズは$area > 6 AND $area < 400、形状はQGISにコンパクトネスの関数がないため、自作の比4 * pi() * $area / ($perimeter ^ 2) > 0.5を使います。

RGB値は太陽の角度と露出で変わるため、1つのフライトラインで調整したしきい値は、次のラインでは通用しなくなります。色相と彩度のほうが安定しており、プロセシングツールボックスのモジュールi.rgb.hisで使えます。このモジュールは「transforms raster maps from RGB (Red-Green-Blue) color space to HIS (Hue-Intensity-Saturation) color space」、つまりRGB色空間をHIS(色相・強度・彩度)色空間に変換します。
どちらのルールも、その青いものが何なのかを知りません。
- **影。**日陰の屋根の斜面は暗い青に見えます。下限を上げると、木の下のプールを取り逃します。
- **青い屋根と防水シート。**明るく青く、形もプールに近いことがよくあります。
- **底が暗いプールと緑色のプール。**黒いライナーはアスファルトに、藻は芝生に見えてしまいます。私のルールは両方を取り逃しました。
- **カバー付きプール。**そもそも画像に写っていません。

**使う場合:**手で確認する、均一な1枚のオルソ画像のとき。
**使わない場合:**複数フライトのモザイクのとき。
方法4:バンドがある画像での水指数
解像度を確認します。フランスのプール連盟によれば、新設の埋め込み式プールは29〜30m²で、解像度10cmのオルソ画像では3,000画素、10mのSentinel-2バンドでは1画素の3分の1です。
水は近赤外をほぼ完全に吸収するので、NIRでは黒くなり、青い屋根は明るいまま残ります。
- NDWI、McFeeters 1996:
(Green - NIR) / (Green + NIR)。Sentinel-2では(B3 - B8) / (B3 + B8)。 - MNDWI、Xu 2006:
(Green - SWIR) / (Green + SWIR)。Sentinel-2では(B3 - B11) / (B3 + B11)。NIRをSWIRに替えると市街地が抑えられ、住宅地ではこれが狙いどころです。
0を超える値でしきい値を取り、ポリゴン化して、方法3と同様にフィルタします。Rodríguez-CuencaとAlonsoは2014年に、この用途向けにNormalized Difference Swimming Pools Indexを調整しました。
Sentinel-2はB3とB8が10m、B11が20mなので、30m²のプールは庭から分離できません。住宅街にMNDWIを適用しても、返るのは町外れの貯水池だけで、ほかは何も返りません。

**使う場合:**オルソ画像に解像度50cm以下のNIRバンドがあるとき。色のしきい値より明らかに優れています。
**使わない場合:**3バンドのRGBのとき、またはSentinel-2で庭のプールを検出したいとき。
方法5:自分の画像で分類器を訓練する
分類器は、描いた例からプールの画素を学習します。そのため、固定のしきい値が通用しないモザイクでも使えます。
Luca Congedoが開発したSemi-Automatic Classification Pluginが定番です。SCPドックで訓練入力(.scpx)を作成し、ROIを描いてから、メインウィンドウでSCP > Band processing > Classificationを実行します。Minimum DistanceからRandom Forestまで、6つのアルゴリズムがあります。バージョン9.0.4は2026年7月11日に公開されましたが、QGISの最低バージョンを3.99と宣言しているため、QGIS 3.xにはバージョン8.5.0がインストールされます。
Nicolas Karasiakが開発したdzetsaka 5.0.11は軽量です。分類器は11種類あり、Gaussian Mixture Modelはscikit-learnなしで動きます。
青い屋根のクラスと影のクラスも描いてください。分類器は、見せたものしか除外できません。

**使う場合:**複数フライトや季節で、ワークフローを再利用するとき。
**使わない場合:**1枚のオルソ画像を1回処理するだけのとき。どちらも画素を分類するだけでオブジェクトではないため、ポリゴン化とフィルタは結局必要です。
5手法を並べる
| 手持ち | 手法 |
|---|---|
| よく描かれた町、公共プールで足りる | 方法1、QuickOSM |
| 数百のプールと誤検出に付き合う気がない | 方法2、セグメンテーションモデル |
| 解像度30cmより細かいオルソ画像(RGB)1枚 | 方法3、色しきい値の後にフィルタ |
| NIRバンド付きのオルソ画像 | 方法4、NDWI |
| Sentinel-2など10mのもの | 庭のプールにはどれも不向き。より解像度の高い画像を入手してください |
| 複数フライト、繰り返すワークフロー | 方法5、SCPまたはdzetsaka |
覚えること
最初に解像度、次にバンド、最後に手作業で確認できる量によって、使える方法が決まります。
30m²のプールは10mの解像度では庭から分離できないため、裏庭のプールにはどの指数を使ってもSentinel-2は不向きなセンサーです。
色のしきい値は、街区にある青いものをすべて返します。結果を確認する前に、面積とコンパクトネスでフィルタしてください。
カバー付きプールは画像に写っていないため、このページのどの方法でも見つけられず、費用をかけても変わりません。
検出結果は候補です。何を実行しても、誰かがレイヤを使う前に、信頼度の低い10個のポリゴンを開いて確認してください。
よくある質問
QGISだけでプールを検出できますか?
機能としてはありません。コアQGISにあるのはラスタ計算機、ポリゴン化、ベクタのフィルタで、これが方法3です。プールをオブジェクトとして認識するには、プラグインが必要です。
Sentinel-2の画像で裏庭のプールを見つけられますか?
いいえ。グリーンとNIRは10mバンド、SWIRは20mなので、30m²のプールは1画素の3分の1にしかなりません。解像度30cm以下の航空写真を使ってください。
青い屋根がプールとして返され続けるのはなぜですか?
塗装した金属屋根はプールの水より明るく青く、色のルールは色しか見ないためです。面積とコンパクトネスでフィルタするか、NDWIに切り替えるか、モデルを使ってください。
航空写真からプールを検出するのは合法ですか?
検出結果を区画と所有者名に結合すると個人データになり、EUではGDPRに基づく法的根拠が必要です。税務当局には、法律に定められた根拠があります。民間企業は通常持っていないため、結合の前にデータ保護責任者に確認してください。モデルの出力を、請求前の最終手順にしてはいけません。
どのくらいの精度を見込めばよいですか?
1つの数字では誤解を招きます。画像と季節によって変わるためです。解像度20cmで開放されたプールはよく検出されます。カバー付きプールはここにあるどの方法でも見逃され、青い屋根は手作業で消す必要があります。
検出結果は、そのまま対応できるプールの一覧になりますか?
フランスの税務当局はIGNの航空写真を使ってこの作業を行いましたが、それでも全所有者に書簡を送りました。「Foncier innovant」のパイロットでは、2022年分として9県で20,356件のプールに課税し、金額は980万ユーロに上りました。2023年の全国調査では、課税台帳に載っていない課税対象のプールが150,000件見つかりました。検出結果は候補であり、区画や氏名と結合すると個人データになります。
フィルタ手順の詳細は、QGISで建物フットプリントを検出する方法をご覧ください。マスクの後処理については、QGISでラスタをベクタに変換する方法があります。市区町村全体の画像で同じ「検出してフィルタ」を実行する場合は、QGIS内で1回の指示から手順を実行するAI Agentが使えます。そのほかはQGIS AIハブにまとめています。
でプールを検出するには、まずOpenStreetMapを確認します。

