| 18 | namespace kernel { |
| 19 | template<typename T> |
| 20 | void getOffsets(std::vector<dim_t>& offsets, const af::dim4& strides, |
| 21 | const CParam<T>& mask) { |
| 22 | const af::dim4 fstrides = mask.strides(); |
| 23 | const T* filter = mask.get(); |
| 24 | const dim_t dim0 = mask.dims()[0], dim1 = mask.dims()[1]; |
| 25 | const dim_t R0 = dim0 / 2; |
| 26 | const dim_t R1 = dim1 / 2; |
| 27 | |
| 28 | offsets.reserve(mask.dims().elements()); |
| 29 | for (dim_t j = 0; j < dim1; ++j) { |
| 30 | for (dim_t i = 0; i < dim0; ++i) { |
| 31 | if (filter[getIdx(fstrides, i, j)] > (T)0) { |
| 32 | dim_t offset = (j - R1) * strides[1] + (i - R0) * strides[0]; |
| 33 | offsets.push_back(offset); |
| 34 | } |
| 35 | } |
| 36 | } |
| 37 | } |
| 38 | |
| 39 | template<typename T, bool IsDilation> |
| 40 | struct MorphFilterOp { |