画像にソーベル フィルターを適用するためのアプリケーションで、非常に奇妙な問題が発生しています。
問題は、画像を掛けるたびに少し移動することです。倍率は画像サイズによって異なります。
これはどのように見えるかの例です:
初期画像
フィルター追加後
簡単にするために、今は 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];
これは正しく機能します。
このコードの何が問題なのか誰か教えてください。