たけのこブログ

凡人が頑張って背伸びするブログ

SAR画像の見た目を基本的な画像処理で一瞬に改善する方法

背景

はい、久しぶりの投稿です。 最近、様々なところからお声が掛かっており、ブログを書く暇がありませんでした(汗)

自分は、趣味の延長で衛星画像の一つであるSAR画像と呼ばれるレーダ画像について解析を行なっていて、解析記事の執筆なども行なっております。このSAR画像ですが、Google Earthなどで見られる光学画像と異なる部分としては、スペックルノイズと呼ばれる白黒のゴマ状のノイズが大きな問題になっております。そしてこのSAR画像、頑張ってデータのバイナリ情報を取り出して可視化しても、最低限の処理をしないと見栄えがあまり良くないです(何もせずにマニュアル通りのキャリブレーションをかけても白っぽく映ってしまう)。今回は、この対策をご説明したいと思います(単純な画像処理です)。ちなみに、最終的に以下の見栄えになります。

f:id:YuKR:20200803004849p:plain

さて、上記の問題ですが、「コントラスト強調」を行うことで簡単に解決できます。

今回はopencvのように自動でコントラスト変調を行わずに手動での調整を行いたいので、以下のサイトを参考にしてコントラスト強調の処理を加えました(余談:話が逸れますが、opencvの平坦化ヒストグラムは便利ですが使い所を間違えると潜在的な情報を見失う場合があるので注意が必要です)。

www.blog.umentu.work

今回は、衛星画像を無料で公開しているプラットフォームであるTellusから取得した霞ヶ浦周辺の画像を使って解析してみます。TellusでのSAR画像の取得方法については、以下のサイトなどにTellusでSAR画像を取得するソースコードがまとまっているので参考にしてください。

sorabatake.jp

HH = np.load('/SHH.npy')
HV = np.load('/SHV.npy')
VV = np.load('/SVV.npy')

import cv2
import matplotlib.pyplot as plt
from numpy import inf

sigma = HH
sigma = 10*np.log10(sigma) -83.0 -32.0
sigma = np.array(255*(sigma-np.amin(sigma))/(np.amax(sigma)-np.amin(sigma)),dtype="uint8")
HH = sigma


sigma = HV
sigma = 10*np.log10(sigma) -83.0 -32.0
sigma = np.array(255*(sigma-np.amin(sigma))/(np.amax(sigma)-np.amin(sigma)),dtype="uint8") # opencvなどの処理に対応できるように8ビットに正規化してあります。
HV = sigma

sigma = VV
sigma = 10*np.log10(sigma) -83.0 -32.0
sigma = np.array(255*(sigma-np.amin(sigma))/(np.amax(sigma)-np.amin(sigma)),dtype="uint8")
VV = sigma


img=np.zeros((2000, 2000, 3), np.uint8) # 画像サイズは切り出したサイズを指定してください
img[:,:,0]=HH
img[:,:,1]=HV
img[:,:,2]=VV

# コントラスト強調
min_table = 90
max_table = 252
diff_table = max_table - min_table
look_up_table = np.arange(256, dtype = 'uint8')
for i in range(0, min_table):
    look_up_table[i] = 0
for i in range(min_table, max_table):
    look_up_table[i] = 255 * (i - min_table) / diff_table
for i in range(max_table, 255):
    look_up_table[i] = 255

img = cv2.LUT(img, look_up_table)

plt.figure()
plt.imshow(img)
plt.imsave('sample.png', img)

結果がこちらになります。実際にコントラスト強調を行わずに疑似カラーにしたSAR画像と比較して見ましょう。

Before

f:id:YuKR:20200803003717p:plain

After

f:id:YuKR:20200803003723p:plain

...全然見た目が違いますね。コントラスト強調を行うだけで、見違うくらい見た目が良くなります。

ちなみに、これをパワー(値の複素共役を掛け合わせる)で表示してコントラスト強調を行うと以下の見た目にできます。専門ソフト並みの綺麗なSAR画像の見栄えを、コード一つで簡単に表現できるのは嬉しいですね。

Before

f:id:YuKR:20200803004827p:plain

After

f:id:YuKR:20200803004849p:plain

まとめ

今回は、SAR画像を使ってコントラスト強調を行い、コントラストを強調して見た目をよくする事を行なって見ました。 普段なこのような画像のコントラストや画質の調整はENVIなどの専門ソフトを使って行うことが専門家だと多いと思いますが、専門ソフトがなくてもちょっとした工夫次第で様々な解析ができます。 光学画像に飽きてSAR画像を綺麗に表示してみたい方がいましたら、ぜひ参考にしてください。

参考文献

www.blog.umentu.work