isdreader
isdreader is a Python library for parsing ISD folders and loading binary inspection image data as NumPy arrays.
Installation
pip install isdreader
Documentation
https://insightkk.net/isdreader/
Data structure
InsightScanDataは多数のC-imageデータを含んでおり、1つのCイメージデータを取り出すためにはツリー構造になっているオブジェクトを辿ってアクセスする必要があります。
次のソースコードはInsightScanDataオブジェクトの中にあるCイメージデータを表示する例です
if __name__ == "__main__":
from isdreader import InsightScanData
from isdreader import ImageBlender
your_isd_path = r"C:\XXXX\XXXX\sample.isd"
isd = InsightScanData(your_isd_path)
print(isd)
for ch in isd.AdcChannels:
print(f"<Channel>: {ch.Name}")
for gate in ch.Gates:
print(f" |--<Gate>: {gate.Name}, Type: {gate.Type}")
for img in gate.Cimages:
print(f" | |---: {img}")
C-image
Cイメージオブジェクトは、Numpy配列形式の画像データの提供と付加情報を提供します。 次のソースコードは画像のサイズおよびデータを確認する例です。
if __name__ == "__main__":
from isdreader import InsightScanData
your_isd_path = r"C:\XXXX\XXXX\sample.isd"
#isd object instance
isd = InsightScanData(your_isd_path)
#get terget C-image
cimage = isd.Channel1.DATA1_01.AbsPeak
print(f"Name={cimage.Name}")
print(f"PhysicalSize={cimage.Size}")
print(f"PixelSize={cimage.PixelSize}")
print(cimage.RawData()) #Binary data
print(cimage.EchoData()) #Normalized data(include NoData)
画像データ形式
CイメージのRawDataとして保存されているBinaryデータはMSBが符号で,その他のbitが振幅を表現します。 ただし、Allゼロのデータは特別でNodata(FSFを検出しない画素)を表現します。Outlineオプションを利用している場合は1を示すデータも特別な扱いになることに注意してください。
多くのデータ解析ではRawDataを利用しません。 -1~+1の範囲に正規化されたNormlizedデータを利用してください。
また、Nodataの画素を解析対象から除外したい場合は、 EchoDataメソッドを利用してデータを取得することで、Nodata画素が np.nanに置き換わった配列を取得することを利用してください。
画像データの表示
取得したNumpy形式のデータ配列を可視化する方法は様々です。
isdreaderパッケージには,可視化を手助けするImageBlenderクラスを含んでいます。
ImageBlenderクラスにC-imageオブジェクトを渡してインスタンスすることで手軽に画像の確認ができます。
ImageBlenderに渡されたデータはグレースケールのPbsPeakと同様に着色されます。

if __name__ == "__main__":
from isdreader import InsightScanData, ImageBlender
your_isd_path = r"C:\XXXX\XXXX\sample.isd"
isd = InsightScanData(your_isd_path)
cimage = isd.Channel1.DATA1_01.AbsPeak
echo_data = cimage.EchoData(Outline=False)
blender = ImageBlender(base_image=echo_data)
blender.show()
画像データのトリミング
データ取得メソッドには,トリミング範囲の指定をするオプション引数があります。
トリミング範囲の指定には、4つのパラメータを含むタプルを用意します。
タプルは先頭から左上起点の水平画素位置、左上起点の垂直画素位置、画素数での幅、画素数での高さを整数で指定してください。
次のソースコードはトリムの例です。
from isdreader import InsightScanData,ImageBlender
your_isd_path = r"C:\XXXX\XXXX\sample.isd"
isd = InsightScanData(your_isd_path)
cimage = isd.Channel1.DATA1_01.AbsPeak
range = (400, 400, 500, 500) #Trimming range : x,y,width,hight
echo_data = cimage.EchoData(range,Outline=False)
blender = ImageBlender(base_image=echo_data)
blender.show()
