RaspberryPiで黄砂の色を調べてみた

黄砂とは

環境省によると、中国大陸内陸部のタクラマカン砂漠、ゴビ砂漠や黄土高原など、乾燥・半乾燥地域で、風によって数千メートルの高度にまで巻き上げられた土壌・鉱物粒子が偏西風に乗って日本に飛来し、大気中に浮遊あるいは降下する現象を指します。

車が黄色になって、洗車しないといけないとかありますよね(泣)

本記事では、RaspberryPiでタイムラプスを撮影し、黄砂が観測された日とそうでない日で比較して、どれほど視程(色)が変化するのか調べました。

RGBとHSVで比較します。

RaspberryPiでカメラで撮影し、タイムラプスを作る方法は別記事で紹介します。

黄砂が観測された日

気象庁が黄砂を観測している地点は、北から札幌、仙台、新潟、東京、愛知、大阪、広島、高松、福岡、鹿児島、沖縄の11地点です。

RaspberryPiで撮影している場所は、富山県ですので、気象庁が黄砂をより多く観測した地点の日を抽出します。

2021年は、気象庁によると3/29に仙台、新潟、名古屋、広島、大阪、福岡、鹿児島、高松の8地点、3/30に札幌、仙台、新潟、名古屋、東京、広島、大阪、福岡、鹿児島、高松の10地点、5/8に札幌、新潟、東京、福岡、高松の5地点、5/9に仙台、新潟、名古屋、広島、大阪、福岡、鹿児島、高松の8地点で黄砂が観測されており、この4つの日を黄砂が観測された日としました。

黄砂の日のタイムラプス

3/29は、どんよりとした日で、霞んでいる様子が分かります。全体的に赤っぽいです。

3/30は、3/29より更に霞んで見え、奥の山々が完全に見えなくなっています。

5/8は、霞んではいますが、全体的に白っぽい色をしています。

5/9は、5/8とさして変わりません。

黄砂の色は、黄土色、黄褐色、赤褐色などに近いとされています。

粒径が小さい・濃度が低いときはミー散乱により白っぽく霞み、粒径が大きい・濃度が高いときは太陽光が黄砂粒子を透過・屈折することでおおむね黄褐色 – 赤褐色に見えるそうです。

3月の2つの日は、黄砂の粒径が大きく、濃度が高く、5月の2つの日は、黄砂の粒径が小さく、濃度が低いだろうと考えられます。

なお、3/30は、富山市の記事にも黄砂の内容が記載されていました。

そこで、黄砂が特にひどかったとされる3/30と黄砂が観測されなかった日を比較します。

比較条件

快晴や雨によって、色が変化することを防ぐため、3/30と同じ天気の日を比較します。

3/30の近場だと6/6,6/8,6/20がありました。

タイムラプス

3/30は、その他の日と比べて、圧倒的に霞んでいる様子がわかると思います。

次に、定量的に示したいと思います。

比較(RGB)

RGBとは、色の表現形式の一つで、赤(Red)、緑(Green)、青(Blue)の配合比率を変化させて、すべての色を表現する方法です。

そして、今回は、建物など空以外のRGBが混入することを防ぐため、画像サイズ(480,640)から(200,400)を抜き出します。

PythonでRGBの値を取得します。その領域で平均してその時間のRGB値とします。

AM10時~PM6時までの時系列で確認します。

データの取得

import cv2
import numpy as np
import matplotlib.pyplot as plt

data=[]
for num in range(478):
    if num < 10 :
        num="00"+str(num)
    elif num < 100:
        num="0"+str(num)

    fpath="/media/pi/ESD-USB/20210620/20210620_"+str(num)+".jpg"
    img = cv2.imread(fpath)
    img=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img_array=np.asarray(img)
   
    R=0;G=0;B=0
    for x in range(201):
        for y in range(401):
            R=R+img_array[x,y,0]/(200*400)
            G=G+img_array[x,y,1]/(200*400)
            B=B+img_array[x,y,2]/(200*400)
    data.append([R,G,B])


np.savetxt("RGB_20210620.txt",data)

実際に用いたコードです。画像は、1分ごとあり、連番になっているので、それを利用した繰り返し処理をしています。

13行目で画像ファイルを読み込んでいます。

14行目で画像ファイルのRGB値を取得しています。

16行目から画像サイズ(200,400)の中でRGB値の平均を出しています。

23行目でデータを追加して、次の時間の処理をしていく流れです。

最後にデータをテキストファイルに保存しています。

データの描画

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

month="06"
day="20"
rdata=np.zeros((4,3),dtype="float")
rdata=np.loadtxt("RGB_2021"+month+day+".txt")
num=len(rdata)
xx=pd.date_range(month+"/"+day+"/2021 10:00:00",periods=num,freq="min")
plt.plot(xx,rdata[:,0],color="r")
plt.plot(xx,rdata[:,1],color="g")
plt.plot(xx,rdata[:,2],color="b")
plt.title(month+day+" HSV")
plt.xticks(rotation=30)
plt.ylim(80,250)
plt.grid()
plt.savefig("RGB"+month+day+".png")
plt.show()

結果(RGB)

青線がBlue、赤線がRed、緑線がGreenです。

黄砂の色は、黄土色Red: 184 Green : 136 Blue : 59 ,赤褐色Red:124 Green:64 Blue:46 ,

黄褐色Red:198 Green:158 Blue:110であり、いずれもRed>Green>blue という値をとります。

RGBともに200前後で同じような値だと灰色になります。

3/30の日中は、Red約210 Green約200 Blue 約190を推移

差があまりないため、RGBでは灰色っぽい色だが、 Red>Green>blue という値 をとりました。

その他の日では、Red Green Blueともに同じような値であるため、灰色でした。

比較(HSV)

HSVとは、色の表現形式の一つで、色相(Hue) 、彩度(Saturation) 、明度(Value・Brightness)の3要素で表現する方式です。

色相(Hue)とは、赤や緑といった具体的な色を定義する要素です。

色が環状に並んでいるため、0°~360°の範囲の値で表されることが多いです。

0°            360°

彩度(Saturation)とは、色相で定義された色の鮮やかさ・濃さを表す要素で、0%~100%の範囲で表されることが多いです。

100%が最も鮮やかで、彩度の減少に合わせて色が薄くなっていき、0%になると灰色になります。

明度(Value)とは、色相で定義された色の明るさ・暗さを表す要素で、0%~100%の範囲で表されることが多いです。


100%が最も明るく、明度の減少に合わせて暗くなっていき、0%で真っ黒になります。

コードは、 データの取得は、14行目で画像ファイルのRGB値をHSV値変更するだけです。

img=cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

データの描画の部分は、少し変えただけです。

結果(HSV)

青線が明度、赤線が色相、緑線が彩度です。

明度(Value)にとくに大きな違いは見られませんでした。

3/30は、その他の日より、色相が低く、彩度が高いことから、

3/30は、その他の日より、全体的に赤っぽく、色が鮮やかであることがいえます。

まとめ

今年一番多く飛来したと思われる3/30と飛来していない日でどの程度、視程(色)が変わるのか調べたました。

3/30は、遠いものの黄砂の代表する色(黄土色、赤褐色、黄褐色)に近い色を示しました。

色相から飛来していない日より赤っぽい色をしていました。

RGBの結果の通り飛来していない日より彩度の値も大きい結果となりました。