| 143 | } |
| 144 | |
| 145 | static void CPUBilateralFilterTensor(std::vector<uint8_t> &vIn, std::vector<uint8_t> &vOut, int columns, int rows, |
| 146 | int batch, int rowStride, int channels, int sampleStride, int diameter, |
| 147 | float sigmaColor, float sigmaSpace) |
| 148 | { |
| 149 | if (sigmaColor <= 0) |
| 150 | { |
| 151 | sigmaColor = 1; |
| 152 | } |
| 153 | if (sigmaSpace <= 0) |
| 154 | { |
| 155 | sigmaSpace = 1; |
| 156 | } |
| 157 | |
| 158 | int radius; |
| 159 | if (diameter <= 0) |
| 160 | { |
| 161 | radius = std::roundf(sigmaSpace * 1.5f); |
| 162 | } |
| 163 | else |
| 164 | { |
| 165 | radius = diameter / 2; |
| 166 | } |
| 167 | if (radius < 1) |
| 168 | { |
| 169 | radius = 1; |
| 170 | } |
| 171 | |
| 172 | float spaceCoefficient = -1 / (2 * sigmaSpace * sigmaSpace); |
| 173 | float colorCoefficient = -1 / (2 * sigmaColor * sigmaColor); |
| 174 | for (int i = 0; i < batch; i++) |
| 175 | { |
| 176 | uint8_t *pIn = vIn.data() + i * sampleStride; |
| 177 | uint8_t *pOut = vOut.data() + i * sampleStride; |
| 178 | CPUBilateralFilter(pIn, pOut, columns, rows, rowStride, channels, radius, colorCoefficient, spaceCoefficient); |
| 179 | } |
| 180 | } |
| 181 | |
| 182 | static void CPUBilateralFilterVarShape(std::vector<std::vector<uint8_t>> &vIn, std::vector<std::vector<uint8_t>> &vOut, |
| 183 | std::vector<int> &vColumns, std::vector<int> &vRows, |
no test coverage detected