for (i = 0; i < img->sizeY; i++) {
for (j = 0; j < img->sizeX; j++) {`
Для любого пикселя в сетке ...
for (n = i - radius; n <= i + radius; n++) {
for (m = j - radius; m <= j + radius; m++) {
Посетите места в пределах radius
нашего пикселя ...
if (n < 0 || m < 0 || n >= img->sizeY || m >= img->sizeX) {
out_of_bounds++;
continue;
(и помните, какмного мы нашли)
idx = m + n * img->sizeX;
Когда мы находим местоположение, мы на
n
пикселей вверх (радиус основного пикселя Y +/-), m
пикселей по ширине (main-pixel-X +/- radius), поэтому ...
n
строк размером X пикселей,
- плюс
m
для этой строки: ...
idx
: индекс пикселей нашего местоположения
red_avg += ((orig_img->data[idx] >> 16) & 0xFF);
green_avg += ((orig_img->data[idx] >> 8) & 0xFF);
blue_avg += (orig_img->data[idx] & 0xFF);
ПодсчетRGB-данные исходного изображения из каждого посещаемого нами места
/* Divide the total sum by the amount of pixels in the window */
red_avg /= (N * N - out_of_bounds);
green_avg /= (N * N - out_of_bounds);
blue_avg /= (N * N - out_of_bounds);
/* Set the average to the current pixel */
... усредняют все местоположения в пределах radius
каждого основного пикселя ...
curr_idx = j + i * img->sizeX;
pixel = (red_avg << 16) + (green_avg << 8) + blue_avg;
img->data[curr_idx] = pixel;
... иустановите main-pixel-index в выходном файле на среднее значение.