#pragma once namespace kel { namespace lbm { template void blur_mask(saw::data>& p_mask){ saw::data mid{2.0/3.0}; saw::data edge{1.0/6.0}; // saw::data,2u> blur_weights{{2.0/3.0},{1.0/6.0}}; auto meta = p_mask.dims(); saw::data> blurred_mask{meta}; for(saw::data i{0u}; i < saw::data{D}; ++i){ iterator::apply([&](const auto& index){ blurred_mask.at(index) = p_mask.at(index) * mid; if(index.at({i}).get() > 0u){ auto l_ind = index; l_ind.at({i}) = ind.at({i}) - 1u; blurred_mask.at(index) = blurred_mask.at(index) + p_mask.at(l_ind) * edge; } if((index.at({i}).get() + 1u) < meta.at({i})){ auto r_ind = index; r_ind.at({i}) = ind.at({i}) + 1u; blurred_mask.at(index) = blurred_mask.at(index) + p_mask.at(r_ind) * edge; } },{},meta); p_mask = blurred_mask; } } } }