画像のサブ領域に対して多くの操作を行います。たとえば、100x100 の画像がある場合、この画像を反復処理して 10x10 ピクセルのブロックを処理したいと思うかもしれません。例えば:
for(each 10x10 block)
{
for(each pixel in the block)
{
do something
}
}
これに関する問題は、小さなブロックがメモリの連続したチャンクではないことです (つまり、イメージ ピクセルは行優先順で格納されているため、10x10 ブロックにアクセスすると、ブロックの各行のピクセルは連続していますが、行はブロックは連続していません.これらのブロック内のピクセルへのアクセスを高速化するためにできることはありますか?または、このようなデータ構造の領域への高速アクセスを取得することは単に不可能ですか?
私が行った多くの読書から、ループ内の唯一の操作が役立つ可能性があるため、最初にピクセルを読み取るようなもののように聞こえました。
// First read the pixels
vector<float> vals(numPixels);
for(pixels in first row)
{
val[i] = pixels[i];
}
// Then do the operations on the pixels
for(elements of vals)
{
doSomething(vals[i])
}
私がやっていることは、同時に両方です:
// Read and operate on the pixels
for(pixels in first row)
{
doSomething(pixels[i])
}
しかし、これを行う方法の実際のコード例 (理論的な説明に対して) を見つけることができませんでした。これに真実はありますか?