次のように、各ピクセルに 3x3 フィルターを適用するために、3 次元配列 (各ピクセルに 3 つの値を持つ画像) を反復処理しています。
//For each value on the image
for (i=0;i<3*width*height;i++){
//For each filter value
for (j=0;j<9;j++){
if (notOutsideEdgesCondition){
*(**(outArray)+i)+= *(**(pixelArray)+i-1+(j%3)) * (*(filter+j));
}
}
}
ポインター演算を使用しているのは、配列表記を使用すると 4 つのループがあり、ループの数をできるだけ少なくしようとしているからです。私の問題は、notOutsideEdgesCondition
8つの境界ケースを考慮する必要があるため、かなり手に負えなくなっていることです. 私は次の処理条件を持っています
- 左の列:
((i%width)==0) && (j%3==0)
- 右の列:
((i-1)%width ==0) && (i>1) && (j%3==2)
- 上段:
(i<width) && (j<2)
- 下段:
(i>(width*height-width)) && (j>5)
式が長くなる 4 つのコーナー ケースを考慮する必要があります。この時点で、私は立ち止まって、これが最善の方法であるかどうかを自問しました.5行の条件付き評価がある場合、デバッグが本当に面倒であるだけでなく、内部ループが遅くなるからです. そのため、このケースを処理する既知のアルゴリズムがあるかどうか、または私の問題に対するより良いアプローチがあるかどうかを尋ねに来ました. どうもありがとう。