フィルタリング操作を実行するために反復する必要がある 1 次元バイト配列としての画像があります。これは私が今やっている方法です:
final int height = image.height(), width = image.width();
byte[] imageArray = new byte[image.numberOfPixels() * image.numberOfChannels()];
image.getAsByteArray(imageArray);
byte[] resultArray = new byte[image.numberOfPixels() * image.numberOfChannels()];
for (int i = 0; i < height; i++) {
int rowIndex = width * i;
for (int j = 0; j < width; j++) {
int columnIndex = rowIndex + j; // current index
int upperRow = columnIndex - width; // go back a row
int lowerRow = columnIndex + width/ // go forward a row
int sum = imageArray[upperRow-1] + imageArray[upperRow] + imageArray[upperRow+1] +
imageArray[columnIndex-1] + imageArray[columnIndex] + imageArray[columnIndex+1] +
imageArray[lowerRow-1] + imageArray[lowerRow] + imageArray[lowerRow+1];
int average = sum / 9;
resultArray[columnIndex] = (byte) average;
}
}
上記のコードは、基本的な平均化機能を実行します。ループを使用して、他のフィルタリング機能も実行します。ただし、それほど高速ではありません。画像配列をより速く反復処理するにはどうすればよいですか?