Cs50 edges filter is failing to process corner and edges pixels

Viewed 19

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;
}
}
0 Answers
Related