Cs50 edges filter is failing to process corner and edges pixels

Issue

This Content is from Stack Overflow. Question asked by Maximiliano Gaggini

In the problem description, we were told to take outer pixels as having a value of “0”.
I discriminate de outer pixels so as to do nothing with them, they won´t add a value, because multiplying by 0 gets 0.
I can´t seem to find where i went wrong. Can somebody give me a clue. Thanks a lot.
here is my code

`// Detect edges
void edges(int height, int width, RGBTRIPLE image[height][width])
{
    // Make copy
    RGBTRIPLE copy[height][width];
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            copy[i][j] = image[i][j];
        }
    }
    double gxB, gxR, gxG, gyR, gyB, gyG;
    int GX[3][3] = {{-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1}};
    int GY[3][3] = {{-1, -2, -1}, {0, 0, 0}, {1, 2, 1}};
    // Loop through pixels
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            gxB = 0;
            gxR = 0;
            gxG = 0;
            gyR = 0;
            gyB = 0;
            gyG = 0;
            // Loop through 3x3 box
            for (int row = (i - 1); row < (i + 2); row++)
            {
                for (int col = (j - 1); col < (j +2); col++)
                {
                    // Discriminate border pixels
                    if (exists(row, col, height, width))
                    {
                        gxR += copy[row][col].rgbtRed * GX[row][col];
                        gxG += copy[row][col].rgbtGreen * GX[row][col];
                        gxB += copy[row][col].rgbtBlue * GX[row][col];

                        gyR += copy[row][col].rgbtRed * GY[row][col];
                        gyG += copy[row][col].rgbtGreen * GY[row][col];
                        gyB += copy[row][col].rgbtBlue * GY[row][col];
                    }
                    else
                    {
                        gxR += 0.0;
                        gxG += 0.0;
                        gxB += 0.0;

                        gyR += 0.0;
                        gyG += 0.0;
                        gyB += 0.0;
                    }
                }
            }
            image[i][j].rgbtRed = trimm(round(sqrt((gxR * gxR) + (gyR * gyR))));
            image[i][j].rgbtGreen = trimm(round(sqrt((gxG * gxG) + (gyG * gyG))));
            image[i][j].rgbtBlue = trimm(round(sqrt((gxB * gxB) + (gyB * gyB))));
        }
    }

    return;
}

bool exists(int ROW, int COL, int H, int W)
{
    if (((ROW >= 0) && (ROW < H)) && ((COL >= 0) && (COL < W)))
    {
        return true;
    }
    else
    {
        return false;
    }


}

int trimm(int x)
{
if (x < 256)
{
    return x;
}
else
{
    return 255;
}
}`



Solution

This question is not yet answered, be the first one who answer using the comment. Later the confirmed answer will be published as the solution.

This Question and Answer are collected from stackoverflow and tested by JTuto community, is licensed under the terms of CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.

people found this article helpful. What about you?