コンテンツへスキップ
ブログに戻る
AI Segmentation
QGIS
Tutorial

QGISでプールを検出する5つの方法

同じ郊外ブロックの航空写真3パネル:素の画像、プールと青い屋根をともに照らす色しきい値、プールのみを囲んだsegmentation結果。

でプールを検出するには、まずOpenStreetMapを確認する:Vector > QuickOSM > QuickOSM…、キーleisure、値swimming_pool。地図が薄い地域では、raster計算機で青のしきい値を取るか、segmentationモデルを実行する。地上解像度がどれを使うかを決める。

ネット上の解説が間違っている点

フォーラムやチュートリアルで繰り返される3つの回答があり、それぞれが1日の無駄になる。

**「Sentinel-2にNDWIをかけてプールを数える。」**グリーンとNIRは10m、SWIRは20mで来るが、新設の埋め込み式プールは29〜30m²だ。画素の3分の1である。郊外にMNDWIをかけると、町の端の貯水池だけが返り、庭のプールは何も出ない。

**「青でしきい値を取ればプールが取れる。」**色のルールは色しか読まない。青い金属屋根も薪の上の防水シートも通るし、暗いライナーのプールも藻で緑のプールも落ちるし、カバー付きプールは画像にそもそも写らない。

**「検出結果がリストになる。」**フランス税務当局はIGNの航空写真でこれを実行しても、なお全所有者に書簡を送った。検出結果は候補であり、それを区画と氏名に結合すると個人データになる。

短い答え

入力手法コスト
OSMマッパーが活発な地域方法1、QuickOSMでleisure=swimming_pool無料、1クエリ
5〜30cmのRGBオルソフォト方法2、raster計算機での色しきい値無料、コアQGIS内
近赤外またはSWIRバンド付き画像方法3、水指数の後にしきい値無料、衛星では庭プールに盲目
マルチスペクトル画像と半日方法4、SCPまたはdzetsaka無料のplugin、訓練エリアを描く時間
RGBオルソフォトと数百のプール方法5、segmentationモデル無料のpluginは自作モデルかGPUが必要。クラウドのpluginは無料枠の後にサブスクリプション

比較方法

5つの基準:入力、画像が自分のマシンを離れるか、手で確認する出力の量、コスト、導入の手間。すべてのバージョン、価格、メニューパスは2026年9月3日にQGIS 3.44マニュアルと各ツールの文書に当たった。無料の手法はフランス郊外のオルソフォトと同ブロックのSentinel-2シーンで実行した。

私たちはこの5つのうち1つを作っている。それが方法5だ。公表精度の数字に誰かが署名する一斉調査には、代わりにMapflowを使うこと。専用のSwimming poolsモデルがあり、オンデマンドで、F1が0.95超と添えられている。私たちはプールの数字を公表していない。

始める前に

面積でフィルタする3つの手順があるので、投影CRSで作業すること。それから解像度を確認する。フランスのプール連盟によれば新設の埋め込み式プールは29〜30m²で、10cmオルソフォトでは3,000画素、10mのSentinel-2バンドでは1画素の3分の1だ。

フランス税務当局はIGNの航空写真でこれを運用している。Foncier innovantパイロットは2022年分として9県で20,356件のプールに課税し、9.8百万ユーロになり、2023年の全国パスでは課税台帳にない課税対象プールが150,000件見つかった。それぞれが所有者への書簡を経ている。

方法1:すでに描かれたプールを取ってくる

OpenStreetMapにはleisure=swimming_poolとタグされた3,036,801オブジェクトがあり、そのうち2,731,704件は実ジオメトリを持つウェイである(2026年9月3日のtaginfo)。

Open QuickOSM and query

Vector > QuickOSM > QuickOSM…、これはOverpass APIに問い合わせる。キーleisure、値swimming_pool、キャンバスの範囲または地名の管理区域で。

Keep polygons, filter to gardens

ノードとして描かれたプールには面積がないので、ポリゴンのlayerを取る。これらのプールのうち1,808,809件にはaccess=privateも付いており、裏庭プールのフィルタになる。

leisure=swimming_areaは別物である:湖や海で泳ぐために指定された場所だ。

A suburban block on satellite imagery with OSM swimming pool polygons in blue over three pools, and seven other visible pools with no polygon at all.
Three pools mapped, seven not. Mappers draw public and hotel pools. Private garden pools are the ones nobody bothers with, and the ones a tax office is looking for.

**使う場合:**公共・商業プールが必要なとき。

**使わない場合:**誰も申告しなかったものを見つける仕事のとき。

方法2:raster計算機で青のしきい値を取る

コア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

A suburban orthophoto with a red mask from the raster calculator covering every swimming pool, a blue metal roof, and a blue tarpaulin over a woodpile.
The rule above, over 20 cm imagery. It finds every open pool. It also finds a blue metal roof and a tarpaulin.

RGB値は日射角と露出で動くので、1つのフライトラインで調整したしきい値は次のラインで壊れる。色相と彩度の方が持ちが良く、Processing Toolboxのモジュールi.rgb.his経由で使う。これは「transforms raster maps from RGB (Red-Green-Blue) color space to HIS (Hue-Intensity-Saturation) color space」を行う。

どちらのルールも青い物の何かを知らない。

  • **影。**日陰の屋根斜面は暗い青に読める。下限を上げると木の下のプールを失う。
  • **青い屋根と防水シート。**明るく、青く、しばしば形も合っている。
  • **暗底と緑のプール。**黒いライナーはアスファルトに、藻は芝生に読める。私のルールは両方を逃した。
  • **カバー付きプール。**画像にそもそもない。
Four tight crops side by side: a blue tarpaulin, a shaded roof slope, a dark-bottom pool and a pool under a grey winter cover, with the threshold mask overlaid on the first two only.
The tarp and the shadow pass the rule and should not. The dark-bottom pool and the covered pool fail it and should not.

**使う場合:**手で確認する単一で均一なオルソフォトのとき。

**使わない場合:**複数フライトのモザイクのとき。

方法3:バンドがある画像での水指数

水は近赤外をほぼ完全に吸収するので、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に替えると市街地が抑えられ、郊外ではそれが要点になる。

ゼロ超でしきい値を取り、ポリゴン化し、方法2と同様にフィルタする。Rodríguez-CuencaとAlonsoは2014年にこの仕事向けのNormalized Difference Swimming Pools Indexを調整した。

Sentinel-2はB3とB8が10m、B11が20mなので、30m²のプールは庭から分離しない。住宅ブロックへのMNDWIは町の端の貯水池だけを返し、他は何も返さない。

Two panels of the same suburb: a 20 cm orthophoto with eleven visible pools, and the Sentinel-2 MNDWI of the same extent showing a uniform grey with no pool visible.
Eleven pools on the left, none on the right. Same extent, same week. A 30 m² pool never reaches a 10 m sensor as an object.

**使う場合:**オルソフォトに50cmかそれより細かいNIRバンドがあるとき。色より明らかに勝る。

**使わない場合:**3バンドRGBのとき、またはSentinel-2で庭プールが欲しいとき。

方法4:自分の画像で分類器を訓練する

分類器は描いた例からプール画素を学ぶので、固定しきい値が壊れるモザイクでも持つ。

Semi-Automatic Classification Plugin by Luca Congedoが通常の選択肢だ。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が入る。

dzetsaka 5.0.11、by Nicolas Karasiakは軽い:11分類器があり、そのGaussian Mixture Modelはscikit-learnなしで動く。

青屋根クラスと影クラスも描くこと。分類器は見せたものしか除外しない。

The SCP dock in QGIS with a training input listing pool, roof, shadow and vegetation classes, and the classified raster behind it with pool pixels in cyan.
Three classes and a Random Forest over the same 20 cm orthophoto. The blue-roof class does more work than the pool class.

**使う場合:**複数フライトや季節で、ワークフローを再利用するとき。

**使わない場合:**1枚のオルソフォトの1回きり。どちらも画素を分類するだけで物体ではないので、やはりポリゴン化とフィルタが必要だ。

方法5:segmentationモデル

segmentationモデルは形と文脈を読むので、同色の防水シートとプールを分けられる。私たちはその1つを作っている、AI Segmentation。この節は自社ツールについてだ。

Install and sign in

Plugin manager、QGIS 3.22以降。GPUもモデル重みも不要。アカウント、無料枠、その後は月39ユーロ(税別)。

Draw a zone, type the word, filter

Type swimming pool and run. Polygons come back in the project CRS with area, perimeter and a confidence score. Sort, then delete what is wrong.

実行時に読む調整テーブルからの2つの数値。プールの実行はタイル最大300mで約0.13m/画素を求める。それより粗いとプールがテラスに滲むからだ。レビューはswimming poolで信頼度0.20から開き、buildingの0.30より低い。プールのマスクは屋根より点が低く出るからだ。

A residential block on aerial imagery in QGIS, every backyard swimming pool filled with its own colour, roofs and gardens untouched.
One zone, one word, over 20 cm imagery. Each pool is its own polygon with an area, editable like any vector feature.

1つの限界:カバー付きプールはモデルに届かないので、取り逃す。両クラウドモードはEU内の当社サーバーに画像を送る。

Two neighbouring gardens: the open pool on the left outlined in the detection layer, the pool under a grey winter cover on the right with no polygon.
Left, detected. Right, a pool under a cover. Nothing in the image says it is there, and no method on this page finds it.

この仕事をする他の4つ(2026年9月3日読み)。

ツール導入物GPUアカウント画像がマシンを離れるかプール対応コスト
DeepnessPlugin manager、そのPythonパッケージ、ONNXモデル任意、CPUで動く不要いいえ渡したモデルの通り無料
Geo-SAMPlugin manager、依存関係、モデル重み任意不要いいえ1クリックまたはボックスで1物体無料
samgeoPythonパッケージ、QGISパネルなし推奨不要いいえスクリプト可、プールクラスなし無料
MapflowPlugin manager不要はいSwimming poolsモデル、オンデマンドクレジット、有料
AI Segmentation (ours)Plugin manager不要両クラウドモードではい、ローカルモデルではいいえType swimming pool無料枠、その後は月39ユーロ(税別)

**使う場合:**手で囲むには多すぎるプール数があるとき。

**使わない場合:**画像をマシンから出せないとき。DeepnessまたはGeo-SAMを使うこと。

5手法を並べる

手持ち手法
よく描かれた町、公共プールで足りる方法1、QuickOSM
30cmより細かいRGBオルソフォト1枚方法2、色しきい値の後にフィルタ
NIRバンド付きオルソフォト方法3、NDWI
Sentinel-2など10mのもの庭プールにはどれも不可。より細かい画像を取ること
複数フライト、繰り返すワークフロー方法4、SCPまたはdzetsaka
数百のプールと誤検出に付き合う気がない方法5、segmentationモデル

覚えること

最初に解像度が決め、次にバンド、次に吸収できる手確認の量が決める。

30m²のプールは10mでは庭から分離しないので、裏庭プールにSentinel-2は指数を問わず違うセンサーだ。

色しきい値は街区の青い物を全部返すので、結果を見る前に面積とコンパクトネスでフィルタすること。

カバー付きプールは画像にないので、このページのどの手法も見つけられず、価格もそれを変えない。

検出結果は候補だ。何を実行しても、layerに誰かが動く前に信頼度の低い10ポリゴンを開くこと。

Try it free in QGIS, no card needed

よくある質問

QGIS単体でプールを検出できるか?

機能としてはない。コアQGISが出せるのはraster計算機、ポリゴン化、ベクトルフィルタであり、方法2のことだ。物体としてプールを認めるにはpluginが要る。

Sentinel-2画像で裏庭プールを見つけられるか?

いいえ。グリーンとNIRは10mバンド、SWIRは20mなので、30m²のプールは画素の3分の1だ。30cmかそれより良い航空画像を使うこと。

青い屋根がプールとして戻り続けるのはなぜか?

塗装金属屋根はプールの水より明るく青く、色ルールは色しか読まない。面積とコンパクトネスでフィルタし、NDWIに移るか、モデルを使うこと。

航空画像からプールを検出するのは合法か?

検出結果を区画と所有者名に結合すると個人データになり、EUではGDPRの下で法的根拠が要る。税務当局は法律に書かれた根拠を持つ。民間企業は通常持たないので、結合の前にデータ保護責任者に聞くこと。モデルの出力を請求前の最終手順にしないこと。

どの精度を見込むべきか?

1つの数字は嘘になる。画像と季節で動くからだ。20cmの開いたプールはよく返り、カバー付きプールはここにある全手法が逃し、青い屋根は手で消すものだ。

フィルタ手順の全文はdetecting building footprints in QGISを読むこと。マスク裏の掃除はraster to vector in QGIS。残りはQGIS AI hubにある。