45 lines
1.8 KiB
Python
45 lines
1.8 KiB
Python
import cupy as cp
|
|
|
|
from beamformer.das import TFM
|
|
from utils.Config import ImagingConfig
|
|
from utils.ScanData import ScanData
|
|
|
|
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()
|
|
)
|