我正在迭代一个 3 维数组(这是一个每个像素有 3 个值的图像),以将 3x3 过滤器应用于每个像素,如下所示:
//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 行长的条件评估,它不仅调试起来真的很痛苦,而且会减慢内部循环。这就是为什么我来问你是否有已知的算法来处理这种情况,或者是否有更好的方法来解决我的问题。非常感谢。