Metadata-Version: 2.4
Name: isdreader
Version: 0.0.5
Summary: Isd Reader Library for parsing ISD folder and loading binary images
Author-email: ikk Maintainer <maintainer@insightkk.net>
License-Expression: MIT
Project-URL: Homepage, https://insightkk.net/isdreader/
Project-URL: Documentation, https://insightkk.net/isdreader/
Project-URL: Issues, https://github.com/Insight-kk/isdreader/issues
Project-URL: Source, https://github.com/Insight-kk/isdreader
Keywords: isd,ultrasound,inspection,imaging,numpy
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Image Processing
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.20.0
Provides-Extra: test
Requires-Dist: pytest>=7.0; extra == "test"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: build>=0.10.0; extra == "dev"
Requires-Dist: twine>=4.0.0; extra == "dev"
Requires-Dist: opencv-python>=5.0.0.93; extra == "dev"
Requires-Dist: pillow>=12.3.0; extra == "dev"
Dynamic: license-file

<p align="center">
	<img src="Images/logo/isdreader-full.svg" alt="isdreader" width="480">
</p>


[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![PyPI version](https://img.shields.io/pypi/v/isdreader.svg)](https://pypi.org/project/isdreader/) ![Python Versions](https://img.shields.io/pypi/pyversions/isdreader) ![Wheel](https://img.shields.io/pypi/wheel/isdreader)


# isdreader


`isdreader` is a Python library for parsing ISD folders and loading binary inspection image data as NumPy arrays.

## Installation

```sh
pip install isdreader
```

## Documentation

<https://insightkk.net/isdreader/>

## Data structure
`InsightScanData`は多数のC-imageデータを含んでおり、1つのCイメージデータを取り出すためにはツリー構造になっているオブジェクトを辿ってアクセスする必要があります。
![DataStruct](doc/DataStruct.dio.svg)

次のソースコードは`InsightScanData`オブジェクトの中にあるCイメージデータを表示する例です
```python 
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配列形式の画像データの提供と付加情報を提供します。
次のソースコードは画像のサイズおよびデータを確認する例です。

```python
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を示すデータも特別な扱いになることに注意してください。

![](doc/DataArray.dio.svg)

多くのデータ解析ではRawDataを利用しません。　-1～+1の範囲に正規化された`Normlized`データを利用してください。
また、Nodataの画素を解析対象から除外したい場合は、　EchoDataメソッドを利用してデータを取得することで、Nodata画素が np.nanに置き換わった配列を取得することを利用してください。


## 画像データの表示
取得したNumpy形式のデータ配列を可視化する方法は様々です。
`isdreader`パッケージには,可視化を手助けする`ImageBlender`クラスを含んでいます。

`ImageBlender`クラスにC-imageオブジェクトを渡してインスタンスすることで手軽に画像の確認ができます。
`ImageBlender`に渡されたデータはグレースケールのPbsPeakと同様に着色されます。

![alt text](image.png)

```python
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つのパラメータを含むタプルを用意します。
タプルは先頭から`左上起点の水平画素位置`、`左上起点の垂直画素位置`、`画素数での幅`、`画素数での高さ`を整数で指定してください。
次のソースコードはトリムの例です。

```python
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()
```

![alt text](image-1.png)
