Computer Vision

Python, Computer Vision, AI, Transhumanism 関連

【低画質】衛星画像から竹藪を探す

今回は人工衛星の画像から竹藪を探してみる。

まずは竹林の名所をあたってみるが、意外とまとまった規模で生えている竹林がみあたらなかった。しかしいくつか探していったところ、栃木県「若竹の杜 若山農場」というのを見つけた。

 

www.wakayamafarm.com

 

では早速画像を取得

sentinelshare.page.link

 

取得画像としては以下を用意する。とってくるのはいつも通り、上記サイトで、Sentinel-2 の衛星画像を取ってきて使う。

1)バンド設定、NDVIで緑地とそうでない部分を判定できそうな画像を取得

2)竹藪が枯れた頃を見計った衛星画像を取得

3)竹藪が緑に戻った時を見計って取得した衛星画像

 

順番に説明すると、

1)竹は植物なので、植物じゃなさそうなエリアはさっっさと除外したほうが話が早いだろう。

 

2)これは、今回の一番のポイントである。竹には、「竹の秋」という言葉のように、竹は、1年に一度葉が黄ばんでくる時期があるようだ。これは、他の植物にあまりない特徴なので、絞り込みのヒントになりそうだ。

で、「竹の秋」の時期としては5月〜6月のようだが、実際色づいて見えるのは、短期間なので、雲の入っていないきれいな画像をピンポイントで探すのは結構難しい。

個人的な目安は5/15近辺の画像を探した。

 

さらに調べたところでは、どうも2年に一度ぐらい濃く現れるような情報もあったので、今年で良い画像がなければ昨年も探してみるとよいかもしれない。

 

3)今回は竹藪は「竹の秋」により、色が変わるがその他の部分はあまり変わらないという点を抽出の条件としたいので、比較用の画像を探す。

目安としては2の画像から1ヶ月ぐらい後に、こんどは竹藪が青々とするので、そこを狙って画像をとってくる。

 

そんなこんなで、検出プログラムをなんとなく書いて実行。

検出結果がこちら。

竹林判定した部分を赤く示している。

 

 

f:id:tsubute:20210710115422p:plain

赤い部分が本当に竹林かどうかはGoogleMapの航空写真でズームして確認。

もちろん完全ではないが、それほど悪くない結果である。

 ただ、上部の帯部分も検出しているのは謎である。

 

元の画像Bはこんな感じ。

こんなぼけぼけの写真、人がみてもぱっと見どこが竹林で、どこは違うのか、わかりにくい。すくなくとも専門家ではない私には難しいし、おそらく機械学習でも難しいレベルだと思う。

f:id:tsubute:20210710140939p:plain


たしかに、初めからGoogleマップ(高解像度の航空写真)を使えば、ディープラーニングで判定させ、そこそこの精度で竹藪を判定できそうな気はする。

 

ただし今回は、低画質・広範囲地図から、特定の植物を検出できたという点で評価いただけると幸いです。

 

プログラムに興味がある方は下記をご参照ください。

https://github.com/skyfish2019/satellite-vision

ループ部分はもう少しわかりやすく書いたらよいのですが、そのままですいません。

熱海・伊豆山の土石流災害とソーラーパネル

7月3日に発生した熱海市伊豆山地区の土石流災害に関連して「盛り土」「ソーラーパネル」などがキーワードとして上がっている。

 

たしかに、田舎でよく見るソーラーパネル群は、エコロジーという表向きのイメージと裏腹に、これが本当にエコロジストが求めてきた、地球にやさしい、環境に優しい発電のありようなのか?というと、微妙な景観ではある。

 

だからといって、土砂崩れの近くにソーラーパネルがあれば、十分な検証が進んでない状況でそれを叩いて良いのかというとそれはどうかと思う。

 

ということで、まずは、もう少しソースを確認してみることにした。

 

まずは場所。これはすでにGoogleMapにも示されている。

goo.gl

木を見て森を見ず

とりあえず上記Googleマップで「地形」「航空写真」を見てみると、この辺りソーラーと関係なく、そもそも上流の山にあまり木がない事がわかる。

 

静岡 熱海の土石流 上流側の開発現場 盛り土含む斜面が崩落 | NHK政治マガジン

 

上記によると

土石流が発生した熱海市の現場付近の雨の降り方は短時間に集中して降る雨ではなく、長い時間降り続き、土の中に水分が蓄積される「長雨蓄積型」だったことが特徴

という分析が行われている。

 

ここで「蓄積型」という状況から、考えると、「ソーラーパネルがなければ、土砂崩れは起きない地形だ」と少なくとも素人が断言できるような環境ではなさそう。ということが判った。

 

 

今回、これを、もう少し調べてみようと思ったのは、現在、静岡県が「水問題」を理由に「リニア着工」に反対している。 しかしこれは、科学的な見地に基づいているかという点で、他県を含め国民からやや疑いの眼差しを向けられていると思われるのだ。

 

重要なのは、事実を科学的な検証の積み重ねであり、それをすっ飛ばして犯人を祭りあげると、 これまでの積み重ねを一気に失いかねないとつくづく思う。

景観を数値で考える

景観を数値化できたら、景観の向上につながるのではないかと、ふと思った。

 

日本の街並みって、ヨーロッパに比べると、ごみごみしているイメージがある。

ヨーロッパの古い街並みは、景観上一定のカラーを揃える決まりがあったりするので、それが景観をよく見せている理由のひとつだと思う。

 

もちろん日本でも、観光地を中心に、一定の配慮により、街並みが整っている場所は、いくつか存在する。

 

話はもどって、景観の数値化だが、ネットで他にもそんな試みがないのか調べてみた所、こんなページを見つけた。

 

 

要は複雑さがゴミゴミ感をもたらしているという話で、まあそれは一理ある。

冒頭の話は、色調の話だが、これは輪郭の要素である。

 

上記のサイトだと、「ボックスカウント法」という方法がとられているようだ。しかし、私には、あまり理解できなかったので、まあエッジを検出してそれをカウントできれば、まあいっか思い、次の方法を試してみることにした。

 

まずは、参考サイトと同様に電線が映った画像(フリー素材)を探してきて、電線部分をPhotoshopで適当に消してやる。

Photoshopといっても、Adobe CCではなく、Photoshop Elementsなので、ブラシでゴシゴシしただけです。なので、塗り残しとかは気にしないでください。

 

nponpc.net

f:id:tsubute:20210429235036p:plain

景観を数値化

そんなこんなで、できたのがこちら(左下が電線を消した画像、右下がそれを、OpenCVでエッジ検出したもの。)

 

続いて、それを数値化。

エッジ検出されたピクセルの数をカウントして画像全体の割合を出した。

 

結果、元画像が 10.85% に対し

電線を消した画像は、6.32% と大幅にエッジが減少しました。

 

edge.py

import cv2
import numpy as np

#入力画像
img = cv2.imread('input.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)

cnt = np.count_nonzero(edges)
a,b = edges.shape
bunbo=int(a*b)
kekka=format((int(cnt)/bunbo)*100,'.2f')
print("結果:"+str(kekka)+"%")

#出力
cv2.imwrite('out.png',edges)

 使用したプログラムはこんな感じ。

(数値が合ってるかはよく検証してないので、なんとなく不安があるが、それっぽい数字がでているということで、よしとさせていただきます。)

 

やろうとしているのは、エッジ検出した部分(白ピクセル)をカウントして、ピクセルの総数で割って100を掛けるというごくシンプルな方法です。

 

たしかに、電線はない方がスッキリするし、それを数値化もできる。

とはいえ、エッジは少なければ景観が整っていると言えるかというとそれは別問題。

エッジが複雑でも、色調が整っていれば、きれいな景観になる場合もあるだろう。

あとは視界に入る対象が何かにもよる。

 

で、感想。

エッジを減らすと、景観がスッキリするという話は、目から鱗というか、

なかなか面白い発想だと思いました。

 

空からソーラーパネルを見てみよう

最近、やまあい(山間)に藤の花とか咲いてて、あれ人工衛星から見えないかなと思っていたのだが、見てみるとこれはちょっと無理そうだなと思い、最近よく見るソーラーパネルを探してみることに。

 

場所はどこでも良かったが、メガソーラーで検索して、そのあたりを探してみた。

衛生画像でも、この灰色の敷地は、駐車場か、ソーラーパネルあたりだろうというぐらいの感じでは確認できた。

 

ではそれを検出に挑戦ということで、試してみた。

機械学習を用いてもよいのだろうが、今回は色と、単調さに着目して、実行。

 

結論からするとうまくいかなかったので、今回はソースの記載はなしです。

流れとしては、まず画像をグレースケールにして、5pxのブロックに分割。

画像の最大値から、最小値をを引いて差が少ないブロックだけピックアップ。

さらにRGBをそれぞれ、取り出していずれも80未満40以上のものに限定。

これにより大体灰色っぽい画像を指定。

 

さらにそれを2ブロック以上続いているものとか、別の日付の画像も使って、

2重チェックなどを実施して、該当箇所を赤で印しました。

 

まあ一部は当たってる感じですが、それ以外も結構検出しちゃっている感じがします。

 

f:id:tsubute:20210428211536p:plain

 

f:id:tsubute:20210428211546p:plain

sentinelshare.page.link

 

 

ということで今回は失敗でしたが、良さそうなアルゴリズムを思いついたら試してみたいと思います。

 

空から見るロングビーチ

コロナの影響で、コンテナが不足しているというニュースをみて、空からコンテナを探してみることに。

 

どこでもよかったが、今回は、カルフォルニアロングビーチ沖にいた、コンテナ船。

 

Sentinel Hub EO Browser

f:id:tsubute:20210213165356p:plain

細かい線のようなのがコンテナ船のようだ。

f:id:tsubute:20210213165649p:plain

検出している雰囲気を出すために、小さな白い点を膨張処理を行い、赤色にしてみた。

f:id:tsubute:20210213165558p:plain

単純にやると、陸地の点とかも巻き込んでしまうので、ここは、Googleマップの海川部分を抽出してマスクとして使った。

海岸、川、船以外も一部マークしてしまっていると思うが、今回はなんとなく検出ということで、気にしないことに。

 

普段がどのぐらいの船の量なのかはわからないので、(日付を遡ればよいだけなのだが。)なんともいえないが、結構いっぱいあるというところが見えたので、今回はおしまい。

 

コンテナって、折り畳めたら、それだけまとめて運ぶのもありなのかと思うが、空箱をそのまま大量に運ぶのは、コスト的に厳しいのかもしれないなと、勝手に思っている。ただ、これもちゃんと調べた話ではないので、その辺のコンテナ事情が気になった方は、コンテナに詳しい人に聞いてみてください。

モーリシャス貨物船座礁事故【空から見る】

残念なことに、空から見える災害というのは、なかなか減らないものである。

今回は、モーリシャス沖で発生した、貨物船座礁事故を衛星画像でみてみる事に。

 

いつものようにEO-Browser

 

下記 8/16 の画像をみると、貨物船が黒く映っている。

sentinelshare.page.link

続いて、日付を少し戻して、重油流出の画像と見られるのは、8/6の画像。

船はあまり見えないが、その周辺と、黒い線が島に向かって筋になっているのが見て取れる。

 

 

f:id:tsubute:20200904005408p:plain

画像だけだと、信憑性が疑われるかと思うので、エビデンス的な情報も確認してみる。

 

船体が分裂、油のさらなる流出に懸念 モーリシャス座礁
https://www.asahi.com/articles/ASN8J3CSHN8HUHBI02V.html

 

こちらの記事によると、「8月6日にタンクから重油約千トンが流出。」

という事で、日付もあっているので、おそらくこれであろうかと思う。

 

 

事故の原因だったり、責任の所在は?補償は?という話もあるかもしれないが、美しい島で、海洋汚染が発生してしまったのは事実で、関心をもたれた方は、募金を検討してはいかがだろうか。

 

モーリシャスでの日本貨物船座礁・石油流出事故ポータルサイト – アフリカ日本協議会 -Africa Japan Forum-

 

個人的には、油吸着材の会社が行っていた募金に寄付したが、

日本政府や日本の民間団体も、もう少し、補償とか、積極的な募金活動など、もうちょっと動きがあってもよかったのではないかと思っている。

 

【空から見る】水に浸かる前には、何があったのか

この度、熊本・鹿児島を襲った大雨による被害に遭われた方々へ、心よりお見舞い申し上げます。

 

以前の台風被害では、人工衛星からの映像を使った検出を取り上げたが、降水被害というのは、雲に遮られてしまい、思うように検出できない場合が多い。

 

今回も、EO Browser をチェックしてみたが、やはり雲がかかったり、ちょうどよい日付のものがなかったり、検出に良さそうな画像は取得できなかった。

 

今回はYoutubeにあがっていた産経新聞のドローン画像をみつけたので、これを使って水害の状況を検出してみようと思う。

 

まずはYoutubeの動画を、解像度高めにしてスクリーンショット

f:id:tsubute:20200707144818p:plain

続いてGoogle Mapの航空写真もスクリーショットで取得。

こっちの画像は、しばらく以前に撮影された画像だと思う。

f:id:tsubute:20200707144758p:plain

今回は差分画像を取得するわけではないので、上記2画像を、おおまかに位置をあわせて切り抜き。この作業は画像編集ソフトで行った。

 

ドローン画像(被災画像)のうち、茶色い部分を抽出。

色の指定による抽出方法は、HSVによる指定方法を使った。

 

【python/OpenCV】画像の特定の色を抽出する方法 - ソースに絡まるエスカルゴ

を参考にした。

f:id:tsubute:20200707150034p:plain

 

黒い部分は浸水していない部分なのでそうじゃない部分を、マスクとし、それをグーグルの航空写真にあててできた画像がこちら。

f:id:tsubute:20200707150014p:plain

あまりなんだかよくわからなかいかもしれないが、今回の豪雨で水に浸かってしまった部分にあったもの。正確には撮影している時間がだいぶ違うので、車とか、新しい建物とか、当てはまらない部分もあるかもしれないが、道路とか、植木など、ある程度は一致しているのではないだろうか。

 

以上、水害が発生したときは、ドローン映像を公開してくれると、水害の把握に役に立つと考えられる例として、紹介させていただきました。

 

既に災害支援の募金は始まっているので、関心をもたれた方はご検討くださいませ。

donation.yahoo.co.jp