Last active
July 15, 2020 09:28
-
-
Save Omi98/06e743ddb0da73d5785a1517e683e973 to your computer and use it in GitHub Desktop.
Blur filter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Blur image | |
| void blur(int height, int width, RGBTRIPLE image[height][width]) | |
| { | |
| float avg1 = 0.00; | |
| float avg2 = 0.00; | |
| float avg3 = 0.00; | |
| RGBTRIPLE temp[height][width]; | |
| for (int h = 0; h < height; h ++) | |
| { | |
| for (int w = 0; w < width; w ++) | |
| { | |
| temp[h][w] = image[h][w]; | |
| } | |
| } | |
| for (int h = 0; h < height; h ++) | |
| { | |
| for (int w = 0; w < width; w ++) | |
| { | |
| if ((h == 0) && (w == 0)) | |
| { | |
| // code (1) | |
| // left top corner | |
| avg1 = (temp[h][w].rgbtRed + temp[h][w + 1].rgbtRed + temp[h + 1][w].rgbtRed + temp[h + 1][w + 1].rgbtRed) / 4.00; | |
| avg2 = (temp[h][w].rgbtGreen + temp[h][w + 1].rgbtGreen + temp[h + 1][w].rgbtGreen + temp[h + 1][w + 1].rgbtGreen) / 4.00; | |
| avg3 = (temp[h][w].rgbtBlue + temp[h][w + 1].rgbtBlue + temp[h + 1][w].rgbtBlue + temp[h + 1][w + 1].rgbtBlue) / 4.00; | |
| image[h][w].rgbtRed = round(avg1); | |
| image[h][w].rgbtGreen = round(avg2); | |
| image[h][w].rgbtBlue = round(avg3); | |
| } | |
| else if ((h != 0) && (h != (height - 1)) && (w == 0)) | |
| { | |
| // code (2) | |
| // left edge | |
| avg1 = (temp[h][w].rgbtRed + temp[h][w + 1].rgbtRed + temp[h - 1][w].rgbtRed + temp[h - 1][w + 1].rgbtRed + temp[h + 1][w].rgbtRed + temp[h + 1][w + 1].rgbtRed) / 6.00; | |
| avg2 = (temp[h][w].rgbtGreen + temp[h][w + 1].rgbtGreen + temp[h - 1][w].rgbtGreen + temp[h - 1][w + 1].rgbtGreen + temp[h + 1][w].rgbtGreen + temp[h + 1][w + 1].rgbtGreen) / 6.00; | |
| avg3 = (temp[h][w].rgbtBlue + temp[h][w + 1].rgbtBlue + temp[h - 1][w].rgbtBlue + temp[h - 1][w + 1].rgbtBlue + temp[h + 1][w].rgbtBlue + temp[h + 1][w + 1].rgbtBlue) / 6.00; | |
| image[h][w].rgbtRed = round(avg1); | |
| image[h][w].rgbtGreen = round(avg2); | |
| image[h][w].rgbtBlue = round(avg3); | |
| } | |
| else if ((h != 0) && (h == (height - 1)) && (w == 0)) | |
| { | |
| // code (3) | |
| // left bottom corner | |
| avg1 = (temp[h][w].rgbtRed + temp[h][w + 1].rgbtRed + temp[h - 1][w].rgbtRed + temp[h - 1][w + 1].rgbtRed) / 4.00; | |
| avg2 = (temp[h][w].rgbtGreen + temp[h][w + 1].rgbtGreen + temp[h - 1][w].rgbtGreen + temp[h - 1][w + 1].rgbtGreen) / 4.00; | |
| avg3 = (temp[h][w].rgbtBlue + temp[h][w + 1].rgbtBlue + temp[h - 1][w].rgbtBlue + temp[h - 1][w + 1].rgbtBlue) / 4.00; | |
| image[h][w].rgbtRed = round(avg1); | |
| image[h][w].rgbtGreen = round(avg2); | |
| image[h][w].rgbtBlue = round(avg3); | |
| } | |
| else if ((h == (height - 1)) && (w != 0) && (w != (width - 1))) | |
| { | |
| // code (4) | |
| // bottom edge | |
| avg1 = (temp[h][w].rgbtRed + temp[h][w + 1].rgbtRed + temp[h][w - 1].rgbtRed + temp[h - 1][w].rgbtRed + temp[h - 1][w + 1].rgbtRed + temp[h - 1][w - 1].rgbtRed) / 6.00; | |
| avg2 = (temp[h][w].rgbtGreen + temp[h][w + 1].rgbtGreen + temp[h][w - 1].rgbtGreen + temp[h - 1][w].rgbtGreen + temp[h - 1][w + 1].rgbtGreen + temp[h - 1][w - 1].rgbtGreen) / 6.00; | |
| avg3 = (temp[h][w].rgbtBlue + temp[h][w + 1].rgbtBlue + temp[h][w - 1].rgbtBlue + temp[h - 1][w].rgbtBlue + temp[h - 1][w + 1].rgbtBlue + temp[h - 1][w - 1].rgbtBlue) / 6.00; | |
| image[h][w].rgbtRed = round(avg1); | |
| image[h][w].rgbtGreen = round(avg2); | |
| image[h][w].rgbtBlue = round(avg3); | |
| } | |
| else if ((h == (height - 1)) && (w == (width - 1))) | |
| { | |
| // code (5) | |
| // right bottom corner | |
| avg1 = (temp[h][w].rgbtRed + temp[h][w - 1].rgbtRed + temp[h - 1][w].rgbtRed + temp[h - 1][w - 1].rgbtRed) / 4.00; | |
| avg2 = (temp[h][w].rgbtGreen + temp[h][w - 1].rgbtGreen + temp[h - 1][w].rgbtGreen + temp[h - 1][w - 1].rgbtGreen) / 4.00; | |
| avg3 = (temp[h][w].rgbtBlue + temp[h][w - 1].rgbtBlue + temp[h - 1][w].rgbtBlue + temp[h - 1][w - 1].rgbtBlue) / 4.00; | |
| image[h][w].rgbtRed = round(avg1); | |
| image[h][w].rgbtGreen = round(avg2); | |
| image[h][w].rgbtBlue = round(avg3); | |
| } | |
| else if ((h != 0) && (h != (height - 1)) && (w == (width - 1))) | |
| { | |
| // code (6) | |
| // right edge | |
| avg1 = (temp[h][w].rgbtRed + temp[h][w - 1].rgbtRed + temp[h + 1][w].rgbtRed + temp[h + 1][w - 1].rgbtRed + temp[h - 1][w].rgbtRed + temp[h - 1][w - 1].rgbtRed) / 6.00; | |
| avg2 = (temp[h][w].rgbtGreen + temp[h][w - 1].rgbtGreen + temp[h + 1][w].rgbtGreen + temp[h + 1][w - 1].rgbtGreen + temp[h - 1][w].rgbtGreen + temp[h - 1][w - 1].rgbtGreen) / 6.00; | |
| avg3 = (temp[h][w].rgbtBlue + temp[h][w - 1].rgbtBlue + temp[h + 1][w].rgbtBlue + temp[h + 1][w - 1].rgbtBlue + temp[h - 1][w].rgbtBlue + temp[h - 1][w - 1].rgbtBlue) / 6.00; | |
| image[h][w].rgbtRed = round(avg1); | |
| image[h][w].rgbtGreen = round(avg2); | |
| image[h][w].rgbtBlue = round(avg3); | |
| } | |
| else if ((h == 0) && (w == (width - 1))) | |
| { | |
| // code (7) | |
| // top right corner | |
| avg1 = (temp[h][w].rgbtRed + temp[h][w - 1].rgbtRed + temp[h + 1][w].rgbtRed + temp[h + 1][w - 1].rgbtRed) / 4.00; | |
| avg2 = (temp[h][w].rgbtGreen + temp[h][w - 1].rgbtGreen + temp[h + 1][w].rgbtGreen + temp[h + 1][w - 1].rgbtGreen) / 4.00; | |
| avg3 = (temp[h][w].rgbtBlue + temp[h][w - 1].rgbtBlue + temp[h + 1][w].rgbtBlue + temp[h + 1][w - 1].rgbtBlue) / 4.00; | |
| image[h][w].rgbtRed = round(avg1); | |
| image[h][w].rgbtGreen = round(avg2); | |
| image[h][w].rgbtBlue = round(avg3); | |
| } | |
| else if ((h == 0) && (w != 0) && (w != (width - 1))) | |
| { | |
| // code (8) | |
| // top edge | |
| avg1 = (temp[h][w].rgbtRed + temp[h][w + 1].rgbtRed + temp[h][w - 1].rgbtRed + temp[h + 1][w].rgbtRed + temp[h + 1][w + 1].rgbtRed + temp[h + 1][w - 1].rgbtRed) / 6.00; | |
| avg2 = (temp[h][w].rgbtGreen + temp[h][w + 1].rgbtGreen + temp[h][w - 1].rgbtGreen + temp[h + 1][w].rgbtGreen + temp[h + 1][w + 1].rgbtGreen + temp[h + 1][w - 1].rgbtGreen) / 6.00; | |
| avg3 = (temp[h][w].rgbtBlue + temp[h][w + 1].rgbtBlue + temp[h][w - 1].rgbtBlue + temp[h + 1][w].rgbtBlue + temp[h + 1][w + 1].rgbtBlue + temp[h + 1][w - 1].rgbtBlue) / 6.00; | |
| image[h][w].rgbtRed = round(avg1); | |
| image[h][w].rgbtGreen = round(avg2); | |
| image[h][w].rgbtBlue = round(avg3); | |
| } | |
| else if ((h != 0) && (h != (height - 1)) && (w != 0) && (w != (width - 1))) | |
| { | |
| // code (9) | |
| // middle | |
| avg1 = (temp[h][w].rgbtRed + temp[h][w - 1].rgbtRed + temp[h][w + 1].rgbtRed + temp[h - 1][w].rgbtRed + temp[h - 1][w - 1].rgbtRed + temp[h - 1][w + 1].rgbtRed + temp[h + 1][w].rgbtRed + temp[h + 1][w - 1].rgbtRed + temp[h + 1][w + 1].rgbtRed) / 9.00; | |
| avg2 = (temp[h][w].rgbtGreen + temp[h][w - 1].rgbtGreen + temp[h][w + 1].rgbtGreen + temp[h - 1][w].rgbtGreen + temp[h - 1][w - 1].rgbtGreen + temp[h - 1][w + 1].rgbtGreen + temp[h + 1][w].rgbtGreen + temp[h + 1][w - 1].rgbtGreen + temp[h + 1][w + 1].rgbtGreen) / 9.00; | |
| avg3 = (temp[h][w].rgbtBlue + temp[h][w - 1].rgbtBlue + temp[h][w + 1].rgbtBlue + temp[h - 1][w].rgbtBlue + temp[h - 1][w - 1].rgbtBlue + temp[h - 1][w + 1].rgbtBlue + temp[h + 1][w].rgbtBlue + temp[h + 1][w - 1].rgbtBlue + temp[h + 1][w + 1].rgbtBlue) / 9.00; | |
| image[h][w].rgbtRed = round(avg1); | |
| image[h][w].rgbtGreen = round(avg2); | |
| image[h][w].rgbtBlue = round(avg3); | |
| } | |
| else | |
| { | |
| break; | |
| } | |
| } | |
| } | |
| // ./filter -b images/yard.bmp out.bmp | |
| return; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment