void iter_landweber(iter_conf* _conf, const struct operator_s* normaleq_op, const struct operator_p_s* thresh_prox, long size, float* image, const float* image_adj, const float* image_truth, void* objval_data, float (*obj_eval)(const void*, const float*)) { struct iter_landweber_conf* conf = CONTAINER_OF(_conf, struct iter_landweber_conf, base); float eps = md_norm(1, MD_DIMS(size), image_adj); if (checkeps(eps)) goto cleanup; assert(NULL == thresh_prox); UNUSED(obj_eval); UNUSED(objval_data); UNUSED(image_truth); landweber_sym(conf->maxiter, 1.E-3 * eps, conf->step, size, (void*)normaleq_op, select_vecops(image_adj), operator_iter, image, image_adj); cleanup: ; }
void iter_landweber(iter_conf* _conf, const struct operator_s* normaleq_op, const struct operator_p_s* thresh_prox, long size, float* image, const float* image_adj, struct iter_monitor_s* monitor) { struct iter_landweber_conf* conf = CAST_DOWN(iter_landweber_conf, _conf); float eps = md_norm(1, MD_DIMS(size), image_adj); if (checkeps(eps)) goto cleanup; assert(NULL == thresh_prox); landweber_sym(conf->maxiter, 1.E-3 * eps, conf->step, size, select_vecops(image_adj), OPERATOR2ITOP(normaleq_op), image, image_adj, monitor); cleanup: ; }