分析: 代码中RO、E1、E2分别表示读方向,第一个相位编码方向,第二个相位编码方向。 因此,滤波函数apply_kspace_filter_RO,apply_kspace_filter_ROE1就分别表示沿对应方向的一维、二维滤波。 因此函数apply_kspace_filter_E2表示沿第二个相位编码方向(层方向)的一维滤波: 代码理解: template <typename T> void apply_kspace_filter_E2(const hoNDArray<T>& data, const hoNDArray<T>& fE2, hoNDArray<T>& dataFiltered) { try { GADGET_CHECK_THROW(data.get_size(2) == fE2.get_number_of_elements()); hoNDArray<T> fRO(data.get_size(0)); fRO.fill(T(1.0)); //将第一个维度的滤波器取值全为1. hoNDArray<T> fE1(data.get_size(1)); fE1.fill(T(1.0)); //将第二个维度的滤波器取值全为1. hoNDArray<T> fxyz; compute_3d_filter(fRO, fE1, fE2, fxyz); //由于有了前面的两步,这里虽然采用的是3d滤波,实际效果只是用到第三个维度的滤波器。将其组合起来,只有第三个维度的滤波器有滤波效果。 Gadgetron::multiply(data, fxyz, dataFiltered); //简单的点对点相乘,实现滤波效果。 } catch (...) { GADGET_THROW("Errors in apply_kspace_filter_E2(...) ... "); } }