30 if (image->is_a_single_elem()) {
31 copy_v4_v4(output->get_elem(0, 0), image->get_elem(0, 0));
39 int height = image->get_height();
47 int quadrant_pixel_count[4] = {0, 0, 0, 0};
49 const float size = *size_image->
get_elem(x, y);
55 if (!high_precision_ && size > 5.0f) {
56 for (
int q = 0; q < 4; q++) {
58 int2 sign =
int2((q % 2) * 2 - 1, ((q / 2) * 2 - 1));
61 int2(sign.x > 0 ? 0 : kernel_size, sign.y > 0 ? 0 : kernel_size);
63 int2(sign.x < 0 ? 0 : kernel_size, sign.y < 0 ? 0 : kernel_size);
69 int2 region_size = corrected_upper_bound - corrected_lower_bound +
int2(1, 1);
70 quadrant_pixel_count[q] = region_size.x * region_size.y;
73 kernel_area.
xmin = corrected_lower_bound[0];
74 kernel_area.
ymin = corrected_lower_bound[1];
75 kernel_area.
xmax = corrected_upper_bound[0];
76 kernel_area.
ymax = corrected_upper_bound[1];
84 for (
int dy = -kernel_size; dy <= kernel_size; dy++) {
85 for (
int dx = -kernel_size; dx <= kernel_size; dx++) {
89 if (xx < 0 || yy < 0 || xx >= image->get_width() || yy >= image->get_height()) {
94 image->read_elem(xx, yy, &color.x);
96 if (dx >= 0 && dy >= 0) {
97 const int quadrant_index = 0;
98 mean_of_color[quadrant_index] += color;
99 mean_of_squared_color[quadrant_index] += color * color;
100 quadrant_pixel_count[quadrant_index]++;
103 if (dx <= 0 && dy >= 0) {
104 const int quadrant_index = 1;
105 mean_of_color[quadrant_index] += color;
106 mean_of_squared_color[quadrant_index] += color * color;
107 quadrant_pixel_count[quadrant_index]++;
110 if (dx <= 0 && dy <= 0) {
111 const int quadrant_index = 2;
112 mean_of_color[quadrant_index] += color;
113 mean_of_squared_color[quadrant_index] += color * color;
114 quadrant_pixel_count[quadrant_index]++;
117 if (dx >= 0 && dy <= 0) {
118 const int quadrant_index = 3;
119 mean_of_color[quadrant_index] += color;
120 mean_of_squared_color[quadrant_index] += color * color;
121 quadrant_pixel_count[quadrant_index]++;
130 for (
int i = 0; i < 4; i++) {
131 mean_of_color[i] /= quadrant_pixel_count[i];
132 mean_of_squared_color[i] /= quadrant_pixel_count[i];
133 float4 color_variance = mean_of_squared_color[i] - mean_of_color[i] * mean_of_color[i];
136 if (variance < min_var) {
142 it.out[0] = mean_of_color[min_index].x;
143 it.out[1] = mean_of_color[min_index].y;
144 it.out[2] = mean_of_color[min_index].z;
145 it.out[3] = mean_of_color[min_index].w;