0

画像にソーベル フィルターを適用するためのアプリケーションで、非常に奇妙な問題が発生しています。

問題は、画像を掛けるたびに少し移動することです。倍率は画像サイズによって異なります。

これはどのように見えるかの例です:

初期画像

初期画像

フィルター追加後

アウト画像

簡単にするために、今は 1 つの色と 1 つの斧だけに取り組んでいます。

これは、ソーベル フィルターのコードです。

///sobel code

        int SY[3][3]  = {{ 1,   2,   1},
                         { 0,   0,   0},
                         {-1,  -2,  -1}};

        int sobY,sobX,sobI,sobJ;
        long sumX,sumY;
        int SUM;

        for(sobX = 0;sobX<=(x-1);sobX++)
        {
            for(sobY = 0;sobY<=(y-1);sobY++)
            {
                sumY = 0;
                sumX = 0;

                if(sobY==0||sobY==(y-1))
                {
                    SUM = 0;
                } else if(sobX==0||sobX==(x-1))
                {
                    SUM = 0;
                } else
                {    
                    ///Y gradient
                    for(sobI=-1;sobI<=1;sobI++)
                    {
                        for(sobJ=-1;sobJ<=1;sobJ++)
                        {
                            sumY = sumY + (int)(red[sobX+sobI][sobY+sobJ] * SY[sobI+1][sobJ+1]);
                        }
                    }

                    SUM = abs(sumX) + abs(sumY);
                }

                if(SUM>255)
                    SUM = 255;
                if(SUM<0)
                    SUM = 0;

                outputRed[sobX][sobY] = 255 - SUM;
            }
        }

簡略化されたコードとサンプル イメージは、https ://db.tt/szpEMZ3f にあります。

フィルターなしで読み取りと保存をテストしたので、このフラグメント:

outputRed[sobX][sobY] = 255 - SUM;

そのように見える

outputRed[sobX][sobY] = red[sobX][sobY];

これは正しく機能します。

このコードの何が問題なのか誰か教えてください。

4

1 に答える 1