Skip to main content

apply_chisep_operator

Function apply_chisep_operator 

Source
fn apply_chisep_operator(
    ws: &mut ChiSepWorkspace,
    d_kernel: &[f32],
    mx: &[f32],
    my: &[f32],
    mz: &[f32],
    vr_pos: &[f32],
    vr_neg: &[f32],
    vr_sum: &[f32],
    lambda_para: f32,
    lambda_dia: f32,
    lambda_sum: f32,
    lambda_cpl: f32,
    dr_p: f32,
    dr_q: f32,
    mask: &[u8],
    dx: &[f32],
    out: &mut [f32],
)
Expand description

Apply chi-sep Hessian operator A to doubled vector dx = [d_pos; d_neg].

A_pos = λ_para * TV_hess(d_pos) + λ_sum * TV_hess_sum(d_pos+d_neg) + λ_cpl * D²(d_pos + d_neg) + λ_cpl * dr_p * (dr_p * d_pos - dr_q * d_neg) A_neg = λ_dia * TV_hess(d_neg) + λ_sum * TV_hess_sum(d_pos+d_neg) + λ_cpl * D²(d_pos + d_neg) - λ_cpl * dr_q * (dr_p * d_pos - dr_q * d_neg)

TV_hessian uses IRLS: bdiv(wGVrwG*fgrad(.)), positive semi-definite. Field fidelity: D², same for both, positive semi-definite. R2’: rank-1 structure [dr_p, -dr_q]^T * [dr_p, -dr_q], positive semi-definite.