1

フィルタリング操作を実行するために反復する必要がある 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;
    }
}

上記のコードは、基本的な平均化機能を実行します。ループを使用して、他のフィルタリング機能も実行します。ただし、それほど高速ではありません。画像配列をより速く反復処理するにはどうすればよいですか?

4

0 に答える 0