| 141 | } |
| 142 | |
| 143 | void hueSquaredMean(const HdrCreationItemContainer &data, vector<float> &HE) { |
| 144 | size_t width = data[0].frame()->getWidth(); |
| 145 | size_t height = data[0].frame()->getHeight(); |
| 146 | size_t numItems = data.size(); |
| 147 | |
| 148 | float r, g, b, h, s, l; |
| 149 | |
| 150 | BufferF hues(numItems, 0.f); |
| 151 | BufferF HS(numItems, 0.f); |
| 152 | |
| 153 | const Channel *X, *Y, *Z; |
| 154 | |
| 155 | for (size_t j = 0; j < height; j++) { |
| 156 | for (size_t i = 0; i < width; i++) { |
| 157 | for (size_t w = 0; w < numItems; w++) { |
| 158 | data[w].frame()->getXYZChannels(X, Y, Z); |
| 159 | |
| 160 | r = (*X)(i, j); |
| 161 | g = (*Y)(i, j); |
| 162 | b = (*Z)(i, j); |
| 163 | rgb2hsl(r, g, b, h, s, l); |
| 164 | hues[w] = h; |
| 165 | } |
| 166 | |
| 167 | float hueMean_ = hueMean(hues); |
| 168 | |
| 169 | for (size_t w = 0; w < numItems; w++) { |
| 170 | float H = hueMean_ - hues[w]; |
| 171 | HS[w] += H * H; |
| 172 | } |
| 173 | } |
| 174 | } |
| 175 | |
| 176 | for (size_t w = 0; w < numItems; w++) { |
| 177 | HE[w] = HS[w] / (width * height); |
| 178 | } |
| 179 | } |
| 180 | |
| 181 | void sdv(const HdrCreationItem &item1, const HdrCreationItem &item2, |
| 182 | const float deltaEV, const int dx, const int dy, float &sR, float &sG, |
no test coverage detected