flandre/src/beamformer/process.py

45 lines
1.8 KiB
Python
Raw Normal View History

2025-01-13 14:20:54 +08:00
import cupy as cp
2025-01-13 14:21:01 +08:00
from beamformer.das import TFM
from utils.Config import ImagingConfig
from utils.ScanData import ScanData
2025-01-13 14:20:54 +08:00
tfm_cache = [None]
def pwi_process(s: ScanData, icfg: ImagingConfig, pwi):
return (s
.filter_max_persent(icfg.bscan_max/1000, bid=True)
.sum(cond=s.d == 3)
.dct(icfg.dct_start, icfg.dct_end)
.call(lambda m: m.astype(cp.int16))
.call(pwi)
.call(cp.asarray, order='C')
.argrelextrema()
.conv_guass(b=icfg.beta * 0.01)
.clip(icfg.focus_start, icfg.focus_end)
.filter_max_persent(icfg.focus_max/100, mmax=icfg.focus_mmax if icfg.uafm else None)
.time_gain_compensation_linear_max(icfg.tgcl, mmax=icfg.focus_mmax if icfg.uafm else None)
.cpu()
.get()
)
def tfm_process(s: ScanData, icfg: ImagingConfig, disable_cache: bool, tfm: TFM):
# print(icfg.changed_field, icfg.changed_field in ['dct_start', 'dct_end', 'bscan_max'], disable_cache)
if icfg.changed_field in ['dct_start', 'dct_end', 'bscan_max'] or tfm_cache[0] is None or disable_cache:
tfm_cache[0] = (s.dct(icfg.dct_start, icfg.dct_end)
.filter_max_persent(icfg.bscan_max/1000, bid=True)
.call(lambda m: m.astype(cp.int16))
.call(tfm))
return (tfm_cache[0]
.call(cp.asarray, order='C')
.argrelextrema(axis=1)
.conv_guass(b=icfg.beta * 0.01, axis=1)
.clip(icfg.focus_start, icfg.focus_end)
.filter_max_persent(icfg.focus_max, mmax=icfg.focus_mmax if icfg.uafm else None)
.time_gain_compensation_linear_max(icfg.tgcl, mmax=icfg.focus_mmax if icfg.uafm else None)
.cpu()
.get()
)