// Blur image
void blur(int height, int width, RGBTRIPLE image[height][width])
{
RGBTRIPLE imgcopy[height][width];
for(int i = 0; i < height; i++)
{
for(int j = 0; j < width; j++)
{
imgcopy[i][j] = image[i][j];
}
}
float sum_red, sum_green, sum_blue;
int avg_red, avg_green, avg_blue;
for(int i = 0; i < height; i++)
{
for(int j = 0; j < width; j++)
{
if( i == 0 )
{
if(j == 0)
{
sum_red = image[i + 1][j].rgbtRed + image[i][j + 1].rgbtRed + image[i + 1][j + 1].rgbtRed;
sum_green = image[i + 1][j].rgbtGreen + image[i][j + 1].rgbtGreen + image[i + 1][j + 1].rgbtGreen;
sum_blue = image[i + 1][j].rgbtBlue + image[i][j + 1].rgbtBlue + image[i + 1][j + 1].rgbtBlue;
avg_red = round(sum_red / 3.00);
avg_green = round(sum_green / 3.00);
avg_blue = round(sum_blue / 3.00);
imgcopy[i][j].rgbtRed = avg_red;
imgcopy[i][j].rgbtGreen = avg_green;
imgcopy[i][j].rgbtBlue = avg_blue;
}
else if( j == (width - 1))
{
sum_red = image[i + 1][j].rgbtRed + image[i][j - 1].rgbtRed + image[i + 1][j - 1].rgbtRed;
sum_green = image[i + 1][j].rgbtGreen + image[i][j - 1].rgbtGreen + image[i + 1][j - 1].rgbtGreen;
sum_blue = image[i + 1][j].rgbtBlue + image[i][j - 1].rgbtBlue + image[i + 1][j - 1].rgbtBlue;
avg_red = round(sum_red / 3.00);
avg_green = round(sum_green / 3.00);
avg_blue = round(sum_blue / 3.00);
imgcopy[i][j].rgbtRed = avg_red;
imgcopy[i][j].rgbtGreen = avg_green;
imgcopy[i][j].rgbtBlue = avg_blue;
}
else
{
sum_red = image[i][j - 1].rgbtRed + image[i][j + 1].rgbtRed + image[i + 1][j].rgbtRed + image[i + 1][j - 1].rgbtRed + image[i + 1][j + 1].rgbtRed;
avg_red = round(sum_red / 5.00);
sum_green = image[i][j - 1].rgbtGreen + image[i][j + 1].rgbtGreen + image[i + 1][j].rgbtGreen + image[i + 1][j - 1].rgbtGreen + image[i + 1][j + 1].rgbtGreen;
avg_green = round(sum_green / 5.00);
sum_blue = image[i][j - 1].rgbtBlue + image[i][j + 1].rgbtBlue + image[i + 1][j].rgbtBlue + image[i + 1][j - 1].rgbtBlue + image[i + 1][j + 1].rgbtBlue;
avg_blue = round(sum_blue / 5.00);
imgcopy[i][j].rgbtRed = avg_red;
imgcopy[i][j].rgbtGreen = avg_green;
imgcopy[i][j].rgbtBlue = avg_blue;
}
}
else if( i == (height - 1))
{
if(j == 0)
{
sum_red = image[i - 1][j].rgbtRed + image[i - 1][j + 1].rgbtRed + image[i][j + 1].rgbtRed;
avg_red = round(sum_red / 3.00);
sum_green = image[i - 1][j].rgbtGreen + image[i - 1][j + 1].rgbtGreen + image[i][j + 1].rgbtGreen;
avg_green = round(sum_green / 3.00);
sum_blue = image[i - 1][j].rgbtBlue + image[i - 1][j + 1].rgbtBlue + image[i][j + 1].rgbtBlue;
avg_blue = round(sum_blue / 3.00);
imgcopy[i][j].rgbtRed = avg_red;
imgcopy[i][j].rgbtGreen = avg_green;
imgcopy[i][j].rgbtBlue = avg_blue;
}
else if (j == (width - 1))
{
sum_red = image[i][j - 1].rgbtRed + image[i - 1][j - 1].rgbtRed + image[i - 1][j].rgbtRed;
avg_red = round(sum_red / 3.00);
sum_green = image[i][j - 1].rgbtGreen + image[i - 1][j - 1].rgbtGreen + image[i - 1][j].rgbtGreen;
avg_green = round(sum_green / 3.00);
sum_blue = image[i][j - 1].rgbtBlue + image[i - 1][j - 1].rgbtBlue + image[i - 1][j].rgbtBlue;
avg_blue = round(sum_blue / 3.00);
imgcopy[i][j].rgbtRed = avg_red;
imgcopy[i][j].rgbtGreen = avg_green;
imgcopy[i][j].rgbtBlue = avg_blue;
}
else
{
sum_red = image[i][j - 1].rgbtRed + image[i - 1][j - 1].rgbtRed + image[i - 1][j].rgbtRed + image[i - 1][j + 1].rgbtRed + image[i][j + 1].rgbtRed;
avg_red = round(sum_red / 5.00);
sum_green = image[i][j - 1].rgbtGreen + image[i - 1][j - 1].rgbtGreen + image[i - 1][j].rgbtGreen + image[i - 1][j + 1].rgbtGreen + image[i][j + 1].rgbtGreen;
avg_green = round(sum_green / 5.00);
sum_blue = image[i][j - 1].rgbtBlue + image[i - 1][j - 1].rgbtBlue + image[i - 1][j].rgbtBlue + image[i - 1][j + 1].rgbtBlue + image[i][j + 1].rgbtBlue;
avg_blue = round(sum_blue / 5.00);
imgcopy[i][j].rgbtRed = avg_red;
imgcopy[i][j].rgbtGreen = avg_green;
imgcopy[i][j].rgbtBlue = avg_blue;
}
}
else
{
if (j == 0)
{
sum_red = image[i - 1][j].rgbtRed + image[i - 1][j + 1].rgbtRed + image[i][j + 1].rgbtRed + image[i + 1][j + 1].rgbtRed + image[i + 1][j].rgbtRed;
avg_red = round(sum_red / 5.00);
sum_green = image[i - 1][j].rgbtGreen + image[i - 1][j + 1].rgbtGreen + image[i][j + 1].rgbtGreen + image[i + 1][j + 1].rgbtGreen + image[i + 1][j].rgbtGreen;
avg_green = round(sum_green / 5.00);
sum_blue = image[i - 1][j].rgbtBlue + image[i - 1][j + 1].rgbtBlue + image[i][j + 1].rgbtBlue + image[i + 1][j + 1].rgbtBlue + image[i + 1][j].rgbtBlue;
avg_blue= round(sum_blue / 5.00);
imgcopy[i][j].rgbtRed = avg_red;
imgcopy[i][j].rgbtGreen = avg_green;
imgcopy[i][j].rgbtBlue = avg_blue;
}
else if ( j == (width - 1))
{
sum_red = image[i - 1][j].rgbtRed + image[i - 1][j - 1].rgbtRed + image[i][j - 1].rgbtRed + image[i + 1][j - 1].rgbtRed + image[i + 1][j].rgbtRed;
avg_red = round(sum_red / 5.00);
sum_green = image[i - 1][j].rgbtGreen + image[i - 1][j - 1].rgbtGreen + image[i][j - 1].rgbtGreen + image[i + 1][j - 1].rgbtGreen + image[i + 1][j].rgbtGreen;
avg_green = round(sum_green / 5.00);
sum_blue = image[i - 1][j].rgbtBlue + image[i - 1][j - 1].rgbtBlue + image[i][j - 1].rgbtBlue + image[i + 1][j - 1].rgbtBlue + image[i + 1][j].rgbtBlue;
avg_blue = round(sum_blue / 5.00);
imgcopy[i][j].rgbtRed = avg_red;
imgcopy[i][j].rgbtGreen = avg_green;
imgcopy[i][j].rgbtBlue = avg_blue;
}
else
{
sum_red = image[i - 1][j].rgbtRed + image[i + 1][j].rgbtRed + image[i][j - 1].rgbtRed + image[i][j + 1].rgbtRed + image[i - 1][j - 1].rgbtRed + image[i - 1][j + 1].rgbtRed + image[i + 1][j - 1].rgbtRed + image[i + 1][j + 1].rgbtRed;
avg_red = round(sum_red / 8.00);
sum_green = image[i - 1][j].rgbtGreen + image[i + 1][j].rgbtGreen + image[i][j - 1].rgbtGreen + image[i][j + 1].rgbtGreen + image[i - 1][j - 1].rgbtGreen + image[i - 1][j + 1].rgbtGreen + image[i + 1][j - 1].rgbtGreen + image[i + 1][j + 1].rgbtGreen;
avg_green = round(sum_green / 8.00);
sum_blue = image[i - 1][j].rgbtBlue + image[i + 1][j].rgbtBlue + image[i][j - 1].rgbtBlue + image[i][j + 1].rgbtBlue + image[i - 1][j - 1].rgbtBlue + image[i - 1][j + 1].rgbtBlue + image[i + 1][j - 1].rgbtBlue + image[i + 1][j + 1].rgbtBlue;
avg_blue = round(sum_blue / 8.00);
imgcopy[i][j].rgbtRed = avg_red;
imgcopy[i][j].rgbtGreen = avg_green;
imgcopy[i][j].rgbtBlue = avg_blue;
}
}
}
}
return;
}
This code for pset4 cs50 filter-Blur, actually when I try it on a paper it is correctly, but when I run the code the values don't match.
when I submit check50 cs50/problems/2022/x/filter/less, this message with mistakes appears for example
:( blur correctly filters middle pixel
Cause
expected "127 140 149\n", not "120 140 150\n"
Log
testing with sample 3x3 image
first row: (10, 20, 30), (40, 50, 60), (70, 80, 90)
second row: (110, 130, 140), (120, 140, 150), (130, 150, 160)
third row: (200, 210, 220), (220, 230, 240), (240, 250, 255)
running ./testing 3 0...
checking for output "127 140 149\n"...
I think the way I wrote the code is confusing but I want help to handle the wrong thing with it, so I think I'll try to rewrite it in an advanced way.