Skip to content

Instantly share code, notes, and snippets.

@brianfakhoury
Last active April 23, 2020 18:30
Show Gist options
  • Save brianfakhoury/446dedf2d29915424d74811c4d452db8 to your computer and use it in GitHub Desktop.
Save brianfakhoury/446dedf2d29915424d74811c4d452db8 to your computer and use it in GitHub Desktop.
Highly precise, low-interpretation, image smoothing algorithm which iterates over an image array in memory, and make far less read/writes than normal.
typedef struct {
unsigned short red;
unsigned short green;
unsigned short blue;
} pixel;
char smooth2_descr[] = "smooth: NOT succint";
void smooth2(int dim, pixel *src, pixel *dst) {
int i = 0, j = 0;
// CASE row 1
// First pixel
// Write-out to right, corner, bottom
dst[i+1].red = src[i].red/6;
dst[i+1].green = src[i].green/6;
dst[i+1].blue = src[i].blue/6; // right
dst[i+dim+1].red = src[i].red/9;
dst[i+dim+1].green = src[i].green/9;
dst[i+dim+1].blue = src[i].blue/9; // corner
dst[i+dim].red = src[i].red/6;
dst[i+dim].green = src[i].green/6;
dst[i+dim].blue = src[i].blue/6; // bottom
// Read-in mechanism: normal
dst[i].red = src[i].red/4 + src[i+1].red / 4 + src[i+dim+1].red / 4 + src[i+dim].red / 4;
dst[i].green = src[i].green/4 + src[i+1].green / 4 + src[i+dim+1].green / 4 + src[i+dim].green / 4;
dst[i].blue = src[i].blue/4 + src[i+1].blue / 4 + src[i+dim+1].blue / 4 + src[i+dim].blue / 4;
// Second pixel
i++;
// Write-out to right, corner, bottom
dst[i+1].red = src[i].red/6;
dst[i+1].green = src[i].green/6;
dst[i+1].blue = src[i].blue/6; // right
dst[i+dim+1].red = src[i].red/9;
dst[i+dim+1].green = src[i].green/9;
dst[i+dim+1].blue = src[i].blue/9; // corner
dst[i+dim].red += src[i].red/9;
dst[i+dim].green += src[i].green/9;
dst[i+dim].blue += src[i].blue/9; // bottom
dst[i+dim-1].red += src[i].red/6;
dst[i+dim-1].green += src[i].green/6;
dst[i+dim-1].blue += src[i].blue/6; // b2
// Read-in mechanism: normal
dst[i].red += src[i].red/6 + src[i+1].red / 6 + src[i+dim+1].red / 6 + src[i+dim].red / 6;
dst[i].green += src[i].green/6 + src[i+1].green / 6 + src[i+dim+1].green / 6 + src[i+dim].green / 6;
dst[i].blue += src[i].blue/6 + src[i+1].blue / 6 + src[i+dim+1].blue / 6 + src[i+dim].blue / 6;
// Loop over pixels up to dim-2
for (j = 2; j < dim - 2; j++) {
dst[j+1].red = src[j].red/6;
dst[j+1].green = src[j].green/6;
dst[j+1].blue = src[j].blue/6; // right
dst[j+dim+1].red = src[j].red/9;
dst[j+dim+1].green = src[j].green/9;
dst[j+dim+1].blue = src[j].blue/9; // corner
dst[j+dim].red += src[j].red/9;
dst[j+dim].green += src[j].green/9;
dst[j+dim].blue += src[j].blue/9; // bottom
dst[j+dim-1].red += src[j].red/9;
dst[j+dim-1].green += src[j].green/9;
dst[j+dim-1].blue += src[j].blue/9; // b2
// Read-in mechanism: normal
dst[j].red += src[j].red/6 + src[j+1].red / 6 + src[j+dim+1].red / 6 + src[j+dim].red / 6;
dst[j].green += src[j].green/6 + src[j+1].green / 6 + src[j+dim+1].green / 6 + src[j+dim].green / 6;
dst[j].blue += src[j].blue/6 + src[j+1].blue / 6 + src[j+dim+1].blue / 6 + src[j+dim].blue / 6;
}
// Second to last pixel
i = dim - 2;
// Write-out to b1,right;corner;bottom
dst[i+1].red = src[i].red/4;
dst[i+1].green = src[i].green/4;
dst[i+1].blue = src[i].blue/4; // right
dst[i+dim+1].red = src[i].red/6;
dst[i+dim+1].green = src[i].green/6;
dst[i+dim+1].blue = src[i].blue/6; // corner
dst[i+dim].red += src[i].red/9;
dst[i+dim].green += src[i].green/9;
dst[i+dim].blue += src[i].blue/9; // bottom
dst[i+dim-1].red += src[i].red/9;
dst[i+dim-1].green += src[i].green/9;
dst[i+dim-1].blue += src[i].blue/9; // b2
// Read-in mechanism: normal
dst[i].red += src[i].red/6 + src[i+1].red / 6 + src[i+dim+1].red / 6 + src[i+dim].red / 6;
dst[i].green += src[i].green/6 + src[i+1].green / 6 + src[i+dim+1].green / 6 + src[i+dim].green / 6;
dst[i].blue += src[i].blue/6 + src[i+1].blue / 6 + src[i+dim+1].blue / 6 + src[i+dim].blue / 6;
// Last pixel
i++;
// Write-out to bottom;b2
dst[i+dim].red += src[i].red/6;
dst[i+dim].green += src[i].green/6;
dst[i+dim].blue += src[i].blue/6; // bottom
dst[i+dim-1].red += src[i].red/9;
dst[i+dim-1].green += src[i].green/9;
dst[i+dim-1].blue += src[i].blue/9; // b2
// Read-in mechanism: normal
dst[i].red += src[i].red/4 + src[i+dim].red / 4;
dst[i].green += src[i].green/4 + src[i+dim].green / 4;
dst[i].blue += src[i].blue/4 + src[i+dim].blue / 4;
// CASE row 2
// First pixel
i++;
// Write-out to b1,right;corner;bottom
dst[i-dim+1].red += src[i].red/6;
dst[i-dim+1].green += src[i].green/6;
dst[i-dim+1].blue += src[i].blue/6; //b1
dst[i+1].red += src[i].red/9;
dst[i+1].green += src[i].green/9;
dst[i+1].blue += src[i].blue/9; // right
dst[i+dim+1].red = src[i].red/9;
dst[i+dim+1].green = src[i].green/9;
dst[i+dim+1].blue = src[i].blue/9; // corner
dst[i+dim].red += src[i].red/6;
dst[i+dim].green += src[i].green/6;
dst[i+dim].blue += src[i].blue/6; // bottom
// Read-in mechanism: normal
dst[i].red += src[i].red/6 + src[i+1].red / 6 + src[i+dim+1].red / 6 + src[i+dim].red / 6;
dst[i].green += src[i].green/6 + src[i+1].green / 6 + src[i+dim+1].green / 6 + src[i+dim].green / 6;
dst[i].blue += src[i].blue/6 + src[i+1].blue / 6 + src[i+dim+1].blue / 6 + src[i+dim].blue / 6;
// Second pixel
i++;
// Write-out to b1,right;corner;bottom
dst[i-dim+1].red += src[i].red/6;
dst[i-dim+1].green += src[i].green/6;
dst[i-dim+1].blue += src[i].blue/6; //b1
dst[i+1].red += src[i].red/9;
dst[i+1].green += src[i].green/9;
dst[i+1].blue += src[i].blue/9; // right
dst[i+dim+1].red = src[i].red/9;
dst[i+dim+1].green = src[i].green/9;
dst[i+dim+1].blue = src[i].blue/9; // corner
dst[i+dim].red += src[i].red/9;
dst[i+dim].green += src[i].green/9;
dst[i+dim].blue += src[i].blue/9; // bottom
dst[i+dim-1].red += src[i].red/6;
dst[i+dim-1].green += src[i].green/6;
dst[i+dim-1].blue += src[i].blue/6; // b2
// Read-in mechanism: normal
dst[i].red += src[i].red/9 + src[i+1].red / 9 + src[i+dim+1].red / 9 + src[i+dim].red / 9;
dst[i].green += src[i].green/9 + src[i+1].green / 9 + src[i+dim+1].green / 9 + src[i+dim].green / 9;
dst[i].blue += src[i].blue/9 + src[i+1].blue / 9 + src[i+dim+1].blue / 9 + src[i+dim].blue / 9;
// Loop over pixels up to dim-2
for (j = dim + 2; j < dim + dim - 2; j++) {
dst[j-dim+1].red += src[j].red/6;
dst[j-dim+1].green += src[j].green/6;
dst[j-dim+1].blue += src[j].blue/6; //b1
dst[j+1].red += src[j].red/9;
dst[j+1].green += src[j].green/9;
dst[j+1].blue += src[j].blue/9; // right
dst[j+dim+1].red = src[j].red/9;
dst[j+dim+1].green = src[j].green/9;
dst[j+dim+1].blue = src[j].blue/9; // corner
dst[j+dim].red += src[j].red/9;
dst[j+dim].green += src[j].green/9;
dst[j+dim].blue += src[j].blue/9; // bottom
dst[j+dim-1].red += src[j].red/9;
dst[j+dim-1].green += src[j].green/9;
dst[j+dim-1].blue += src[j].blue/9; // b2
// Read-in mechanism: normal
dst[j].red += src[j].red/9 + src[j+1].red / 9 + src[j+dim+1].red / 9 + src[j+dim].red / 9;
dst[j].green += src[j].green/9 + src[j+1].green / 9 + src[j+dim+1].green / 9 + src[j+dim].green / 9;
dst[j].blue += src[j].blue/9 + src[j+1].blue / 9 + src[j+dim+1].blue / 9 + src[j+dim].blue / 9;
}
// Second to last pixel
// Write-out to b1,right;corner;bottom
dst[i-dim+1].red += src[i].red/4;
dst[i-dim+1].green += src[i].green/4;
dst[i-dim+1].blue += src[i].blue/4; //b1
dst[i+1].red += src[i].red/6;
dst[i+1].green += src[i].green/6;
dst[i+1].blue += src[i].blue/6; // right
dst[i+dim+1].red = src[i].red/6;
dst[i+dim+1].green = src[i].green/6;
dst[i+dim+1].blue = src[i].blue/6; // corner
dst[i+dim].red += src[i].red/9;
dst[i+dim].green += src[i].green/9;
dst[i+dim].blue += src[i].blue/9; // bottom
dst[i+dim-1].red += src[i].red/9;
dst[i+dim-1].green += src[i].green/9;
dst[i+dim-1].blue += src[i].blue/9; // b2
// Read-in mechanism: normal
dst[i].red += src[i].red/9 + src[i+1].red / 9 + src[i+dim+1].red / 9 + src[i+dim].red / 9;
dst[i].green += src[i].green/9 + src[i+1].green / 9 + src[i+dim+1].green / 9 + src[i+dim].green / 9;
dst[i].blue += src[i].blue/9 + src[i+1].blue / 9 + src[i+dim+1].blue / 9 + src[i+dim].blue / 9;
// Last pixel
// Write-out to bottom;b2
dst[i+dim].red += src[i].red/6;
dst[i+dim].green += src[i].green/6;
dst[i+dim].blue += src[i].blue/6; // bottom
dst[i+dim-1].red += src[i].red/9;
dst[i+dim-1].green += src[i].green/9;
dst[i+dim-1].blue += src[i].blue/9; // b2
// Read-in mechanism: normal
dst[i].red += src[i].red/6 + src[i+dim].red / 6;
dst[i].green += src[i].green/6 + src[i+dim].green / 6;
dst[i].blue += src[i].blue/6 + src[i+dim].blue / 6;
// CASE row 3:dim-3
// General Body. Loop over rows
for (i = dim+dim; i < dim - 2; i+=dim) {
// First pixel
// Write-out to b1,right;corner;bottom
dst[i-dim+1].red += src[i].red/9;
dst[i-dim+1].green += src[i].green/9;
dst[i-dim+1].blue += src[i].blue/9; //b1
dst[i+1].red += src[i].red/9;
dst[i+1].green += src[i].green/9;
dst[i+1].blue += src[i].blue/9; // right
dst[i+dim+1].red = src[i].red/9;
dst[i+dim+1].green = src[i].green/9;
dst[i+dim+1].blue = src[i].blue/9; // corner
dst[i+dim].red = src[i].red/6;
dst[i+dim].green = src[i].green/6;
dst[i+dim].blue = src[i].blue/6; // bottom
// Read-in mechanism: normal
dst[i].red += src[i].red/6 + src[i+1].red / 6 + src[i+dim+1].red / 6 + src[i+dim].red / 6;
dst[i].green += src[i].green/6 + src[i+1].green / 6 + src[i+dim+1].green / 6 + src[i+dim].green / 6;
dst[i].blue += src[i].blue/6 + src[i+1].blue / 6 + src[i+dim+1].blue / 6 + src[i+dim].blue / 6;
// Second pixel
// Write-out to b1,right;corner;bottom
dst[i-dim+1].red += src[i].red/9;
dst[i-dim+1].green += src[i].green/9;
dst[i-dim+1].blue += src[i].blue/9; //b1
dst[i+1].red += src[i].red/9;
dst[i+1].green += src[i].green/9;
dst[i+1].blue += src[i].blue/9; // right
dst[i+dim+1].red = src[i].red/9;
dst[i+dim+1].green = src[i].green/9;
dst[i+dim+1].blue = src[i].blue/9; // corner
dst[i+dim].red += src[i].red/9;
dst[i+dim].green += src[i].green/9;
dst[i+dim].blue += src[i].blue/9; // bottom
dst[i+dim-1].red += src[i].red/6;
dst[i+dim-1].green += src[i].green/6;
dst[i+dim-1].blue += src[i].blue/6; // b2
// Read-in mechanism: normal
dst[i].red += src[i].red/9 + src[i+1].red / 9 + src[i+dim+1].red / 9 + src[i+dim].red / 9;
dst[i].green += src[i].green/9 + src[i+1].green / 9 + src[i+dim+1].green / 9 + src[i+dim].green / 9;
dst[i].blue += src[i].blue/9 + src[i+1].blue / 9 + src[i+dim+1].blue / 9 + src[i+dim].blue / 9;
// Loop over pixels up to dim-2
for (j = i + 2; j < i + dim - 2; j++) {
dst[j-dim+1].red += src[j].red/9;
dst[j-dim+1].green += src[j].green/9;
dst[j-dim+1].blue += src[j].blue/9; //b1
dst[j+1].red += src[j].red/9;
dst[j+1].green += src[j].green/9;
dst[j+1].blue += src[j].blue/9; // right
dst[j+dim+1].red = src[j].red/9;
dst[j+dim+1].green = src[j].green/9;
dst[j+dim+1].blue = src[j].blue/9; // corner
dst[j+dim].red += src[j].red/9;
dst[j+dim].green += src[j].green/9;
dst[j+dim].blue += src[j].blue/9; // bottom
dst[j+dim-1].red += src[j].red/9;
dst[j+dim-1].green += src[j].green/9;
dst[j+dim-1].blue += src[j].blue/9; // b2
// Read-in mechanism: normal
dst[j].red += src[j].red/9 + src[j+1].red / 9 + src[j+dim+1].red / 9 + src[j+dim].red / 9;
dst[j].green += src[j].green/9 + src[j+1].green / 9 + src[j+dim+1].green / 9 + src[j+dim].green / 9;
dst[j].blue += src[j].blue/9 + src[j+1].blue / 9 + src[j+dim+1].blue / 9 + src[j+dim].blue / 9;
}
// Second to last pixel
// Write-out to b1,right;corner;bottom
dst[i-dim+1].red += src[i].red/6;
dst[i-dim+1].green += src[i].green/6;
dst[i-dim+1].blue += src[i].blue/6; //b1
dst[i+1].red += src[i].red/6;
dst[i+1].green += src[i].green/6;
dst[i+1].blue += src[i].blue/6; // right
dst[i+dim+1].red = src[i].red/6;
dst[i+dim+1].green = src[i].green/6;
dst[i+dim+1].blue = src[i].blue/6; // corner
dst[i+dim].red += src[i].red/9;
dst[i+dim].green += src[i].green/9;
dst[i+dim].blue += src[i].blue/9; // bottom
dst[i+dim-1].red += src[i].red/9;
dst[i+dim-1].green += src[i].green/9;
dst[i+dim-1].blue += src[i].blue/9; // b2
// Read-in mechanism: normal
dst[i].red += src[i].red/9 + src[i+1].red / 9 + src[i+dim+1].red / 9 + src[i+dim].red / 9;
dst[i].green += src[i].green/9 + src[i+1].green / 9 + src[i+dim+1].green / 9 + src[i+dim].green / 9;
dst[i].blue += src[i].blue/9 + src[i+1].blue / 9 + src[i+dim+1].blue / 9 + src[i+dim].blue / 9;
// Last pixel
// Write-out to bottom;b2
dst[i+dim].red += src[i].red/6;
dst[i+dim].green += src[i].green/6;
dst[i+dim].blue += src[i].blue/6; // bottom
dst[i+dim-1].red += src[i].red/9;
dst[i+dim-1].green += src[i].green/9;
dst[i+dim-1].blue += src[i].blue/9; // b2
// Read-in mechanism: normal
dst[i].red += src[i].red/6 + src[i+dim].red / 6;
dst[i].green += src[i].green/6 + src[i+dim].green / 6;
dst[i].blue += src[i].blue/6 + src[i+dim].blue / 6;
}
// CASE second to last row
// First pixel
i = dim * dim - dim - dim;
// Write-out to b1,right;corner;bottom
dst[i-dim+1].red += src[i].red/9;
dst[i-dim+1].green += src[i].green/9;
dst[i-dim+1].blue += src[i].blue/9; //b1
dst[i+1].red += src[i].red/9;
dst[i+1].green += src[i].green/9;
dst[i+1].blue += src[i].blue/9; // right
dst[i+dim+1].red = src[i].red/6;
dst[i+dim+1].green = src[i].green/6;
dst[i+dim+1].blue = src[i].blue/6; // corner
dst[i+dim].red = src[i].red/4;
dst[i+dim].green = src[i].green/4;
dst[i+dim].blue = src[i].blue/4; // bottom
// Read-in mechanism: normal
dst[i].red += src[i].red/6 + src[i+1].red / 6 + src[i+dim+1].red / 6 + src[i+dim].red / 6;
dst[i].green += src[i].green/6 + src[i+1].green / 6 + src[i+dim+1].green / 6 + src[i+dim].green / 6;
dst[i].blue += src[i].blue/6 + src[i+1].blue / 6 + src[i+dim+1].blue / 6 + src[i+dim].blue / 6;
// Second pixel
i++;
// Write-out to b1,right;corner;bottom
dst[i-dim+1].red += src[i].red/9;
dst[i-dim+1].green += src[i].green/9;
dst[i-dim+1].blue += src[i].blue/9; //b1
dst[i+1].red += src[i].red/9;
dst[i+1].green += src[i].green/9;
dst[i+1].blue += src[i].blue/9; // right
dst[i+dim+1].red = src[i].red/6;
dst[i+dim+1].green = src[i].green/6;
dst[i+dim+1].blue = src[i].blue/6; // corner
dst[i+dim].red += src[i].red/6;
dst[i+dim].green += src[i].green/6;
dst[i+dim].blue += src[i].blue/6; // bottom
dst[i+dim-1].red += src[i].red/4;
dst[i+dim-1].green += src[i].green/4;
dst[i+dim-1].blue += src[i].blue/4; // b2
// Read-in mechanism: normal
dst[i].red += src[i].red/9 + src[i+1].red / 9 + src[i+dim+1].red / 9 + src[i+dim].red / 9;
dst[i].green += src[i].green/9 + src[i+1].green / 9 + src[i+dim+1].green / 9 + src[i+dim].green / 9;
dst[i].blue += src[i].blue/9 + src[i+1].blue / 9 + src[i+dim+1].blue / 9 + src[i+dim].blue / 9;
// Loop over pixels up to dim-2
for (j = dim * dim - dim - dim + 2; j < dim * dim - dim - 2; j++) {
dst[j-dim+1].red += src[j].red/9;
dst[j-dim+1].green += src[j].green/9;
dst[j-dim+1].blue += src[j].blue/9; //b1
dst[j+1].red += src[j].red/9;
dst[j+1].green += src[j].green/9;
dst[j+1].blue += src[j].blue/9; // right
dst[j+dim+1].red = src[j].red/6;
dst[j+dim+1].green = src[j].green/6;
dst[j+dim+1].blue = src[j].blue/6; // corner
dst[j+dim].red += src[j].red/6;
dst[j+dim].green += src[j].green/6;
dst[j+dim].blue += src[j].blue/6; // bottom
dst[j+dim-1].red += src[j].red/6;
dst[j+dim-1].green += src[j].green/6;
dst[j+dim-1].blue += src[j].blue/6; // b2
// Read-in mechanism: normal
dst[j].red += src[j].red/9 + src[j+1].red / 9 + src[j+dim+1].red / 9 + src[j+dim].red / 9;
dst[j].green += src[j].green/9 + src[j+1].green / 9 + src[j+dim+1].green / 9 + src[j+dim].green / 9;
dst[j].blue += src[j].blue/9 + src[j+1].blue / 9 + src[j+dim+1].blue / 9 + src[j+dim].blue / 9;
}
// Second to last pixel
i = dim * dim - dim - 2;
// Write-out to b1,right;corner;bottom
dst[i-dim+1].red += src[i].red/6;
dst[i-dim+1].green += src[i].green/6;
dst[i-dim+1].blue += src[i].blue/6; //b1
dst[i+1].red += src[i].red/6;
dst[i+1].green += src[i].green/6;
dst[i+1].blue += src[i].blue/6; // right
dst[i+dim+1].red = src[i].red/4;
dst[i+dim+1].green = src[i].green/4;
dst[i+dim+1].blue = src[i].blue/4; // corner
dst[i+dim].red += src[i].red/6;
dst[i+dim].green += src[i].green/6;
dst[i+dim].blue += src[i].blue/6; // bottom
dst[i+dim-1].red += src[i].red/6;
dst[i+dim-1].green += src[i].green/6;
dst[i+dim-1].blue += src[i].blue/6; // b2
// Read-in mechanism: normal
dst[i].red += src[i].red/9 + src[i+1].red / 9 + src[i+dim+1].red / 9 + src[i+dim].red / 9;
dst[i].green += src[i].green/9 + src[i+1].green / 9 + src[i+dim+1].green / 9 + src[i+dim].green / 9;
dst[i].blue += src[i].blue/9 + src[i+1].blue / 9 + src[i+dim+1].blue / 9 + src[i+dim].blue / 9;
// Last pixel
i++;
// Write-out to bottom;b2
dst[i+dim].red += src[i].red/4;
dst[i+dim].green += src[i].green/4;
dst[i+dim].blue += src[i].blue/4; // bottom
dst[i+dim-1].red += src[i].red/6;
dst[i+dim-1].green += src[i].green/6;
dst[i+dim-1].blue += src[i].blue/6; // b2
// Read-in mechanism: normal
dst[i].red += src[i].red/6 + src[i+dim].red / 6;
dst[i].green += src[i].green/6 + src[i+dim].green / 6;
dst[i].blue += src[i].blue/6 + src[i+dim].blue / 6;
// CASE last row
// First pixel
i++;
// Write-out to b1,right;corner;bottom
dst[i-dim+1].red += src[i].red/9;
dst[i-dim+1].green += src[i].green/9;
dst[i-dim+1].blue += src[i].blue/9; //b1
dst[i+1].red += src[i].red/9;
dst[i+1].green += src[i].green/9;
dst[i+1].blue += src[i].blue/9; // right
// Read-in mechanism: normal
dst[i].red += src[i].red/4 + src[i+1].red / 4;
dst[i].green += src[i].green/4 + src[i+1].green / 4;
dst[i].blue += src[i].blue/4 + src[i+1].blue / 4;
// Loop over pixels up to dim-2
for (j = dim * dim - dim + 1; j < dim * dim - 2; j++) {
dst[j-dim+1].red += src[j].red/9;
dst[j-dim+1].green += src[j].green/9;
dst[j-dim+1].blue += src[j].blue/9; //b1
dst[j+1].red += src[j].red/6;
dst[j+1].green += src[j].green/6;
dst[j+1].blue += src[j].blue/6; // right
// Read-in mechanism: normal
dst[j].red += src[j].red/6 + src[j+1].red / 6;
dst[j].green += src[j].green/6 + src[j+1].green / 6;
dst[j].blue += src[j].blue/6 + src[j+1].blue / 6;
}
// Second to last pixel
i = dim * dim - 2;
// Write-out to b1,right;corner;bottom
dst[i-dim+1].red += src[i].red/6;
dst[i-dim+1].green += src[i].green/6;
dst[i-dim+1].blue += src[i].blue/6; //b1
dst[i+1].red += src[i].red/4;
dst[i+1].green += src[i].green/4;
dst[i+1].blue += src[i].blue/4; // right
// Read-in mechanism: normal
dst[i].red += src[i].red/6 + src[i+1].red / 6;
dst[i].green += src[i].green/6 + src[i+1].green / 6;
dst[i].blue += src[i].blue/6 + src[i+1].blue / 6;
// Last pixel
i++;
// Read-in mechanism: normal
dst[i].red += src[i].red/4;
dst[i].green += src[i].green/4;
dst[i].blue += src[i].blue/4;
}
@brianfakhoury
Copy link
Author

The main point of this code is to demonstrate a highly precise, low-interpretation, image smoothing algorithm which iterates over an image array in memory, and make far less read/writes than normal. It works by only ever reading from the 3 pixels at the bottom right corner of a given pixel, and writing out to the space again to the bottom right, therefore minimizing to the point where, for each pixel, its memory contents only need to be read one single time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment