How can I get the correct values of this code of filter-blur

Viewed 17
// 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.

0 Answers
Related