教育用GM管開発を振り返って(13)

www.radi-edu.jp
apgmman.hatenablog.com

放射線教育支援サイト「らでぃ」の実験集に掲載した「Pythonでクルックス管の微弱X線を計数」のPythonプログラムについて解説する。Pythonやライブラリーのインストール方法や注意点、Pythonの文法の特徴などは「教育用GM管開発を振り返って(9)」に記載した。


Pythonでクルックス管の微弱X線を計数」のプログラム例


これまでとは違って検出器はGM管ではなくウエブカメラなので、PyAudioは使用しない。この例は計数を目的としているので演算の部分はGM管の場合に似ているが、データの取り込み方はまったく異なっている。必要なライブラリーはOpenCvだけである。PyAudioを使用しない分、プログラムが簡単になっている。

まず。ライブラリーとしてOpenCvをインポートする。

import cv2 #画像処理ライブラリーをインポート

次に、ウエブカメラをデフォルトに指定する。タブレットなど既設のカメラがある場合には、引数の0を1にするとよい場合もあるが、まったく受け付けない場合もあるので、パソコンとウエブカメラの組み合わせの方が無難と思う。最初に初期値としてframe1に画像を読み込み、さらにカラー画像からモノクロ画像に変換したものをimg1とする。

cap = cv2.VideoCapture(0) #カメラ指定
ret, frame1 = cap.read() #初期画像入力
img1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY) #カラー画像をモノクロ画像に変換

img1は演算の途中で改変されるので、img0として保存しておく。

img0 = img1 #画像初期値

画素の強度(輝度)は、0から255までとなっている。計数の閾値thresholdを適宜決めておくが、経験的には100でよい。

threshold = input('Threshold(0<255)? ') #計数の閾値
count = 0 #計数
m = 0 #10秒用コマ数カウンタ
n = 0 #0.1秒用コマ数カウンタ
k = 1 #繰り返し数

画像を取り込み、モノクロ画像に変換してimg2に保存する。

while k <= 6: #6回繰り返し
    ret, frame2 = cap.read() #画像入力
    img2 = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY) #カラー画像をモノクロ画像に変換

10秒経過後、画像の端の部分を除いて、画面上の輝度がthreshold以上の画素の数をカウントして10秒率として画面に出力する。ファイルに残したい場合は、ほかのプログラムをまねれば、簡単に作ることができる。ここで、画像の端の部分を除くのは試作で使用したウエブカメラではノイズらしい輝点があったためで、一般的なのかどうかは分からない。ノイズが出なければ全画面の方が良い。

    if m == 300: #10秒ならば
        m = 0 #10秒用コマ数カウンタをクリア
        for a in range(60, 419): #画像の縦範囲を制限
            for b in range(80, 559): #画像の横範囲を制限
                px = img1[a, b] #画素(a,b)の輝度
                if px > int(threshold): #輝度が閾値以上
                    count += 1 #計数を1増やす
        print('CP10/3S= ' + str(count)) #10秒率を出力
        k += 1 #繰り返し数を1増やす
        count = 0 #計数をリセット
        img1 = img0 #画像をリセット

実はこの間、0.1秒ごとに画像を蓄積している。動画として取り込んでいるが、コマ数は毎秒30コマとなっている。したがって、画像は1/30秒ごとなので、n=3で0.1秒となる。

    if n == 3: #0.1秒ならば
        n = 0 #0.1秒用コマ数カウンタカウンタをクリア
        img = img1 + img2 #画像を加算
        img1 = img #加算した画像を次に送る

    m += 1 #10秒用コマ数カウンタを1増やす
    n += 1 #0.1秒用コマ数カウンタを1増やす

カメラを開放して終わる。

cap.release() #カメラをリリース

簡単なので、つい、ウエブカメラがγ線にも使えないだろうかと思ってしまうが、実はできない。ウエブカメラは可視光線向けの素子を使用している。そのため、低エネルギーのX線までは何とか検知できるが、それでも25keV以上は難しい。クルックス管の微弱X線についても低エネルギーほど感度が高く、無理にインダクションコイルの高電圧を上げる必要はない。むしろ15keV程度で十分なので、陰極線の実験よりは低い電圧で済む。


実は、α線β線でも極めて少数だが輝点は観測されている。しかし、計数実験に使えるような数ではないので無理である。また、α線β線で輝点に何か大きさとか輝度とかに違いがあるかというとはっきり言えない。ウエブカメラは、クルックス管からの微弱X線の観測に最適の機器と言える。


(※id:TJOid:apgmmanから受領したWord原稿を元に再構成、代理投稿したものです)