首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多维阵列边缘/边界条件

多维阵列边缘/边界条件
EN

Stack Overflow用户
提问于 2010-05-31 06:39:05
回答 2查看 2.1K关注 0票数 0

我正在迭代一个三维数组(每个像素有3个值的图像),对每个像素应用3x3滤波器,如下所示:

代码语言:javascript
复制
//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-1)%width ==0) && (i>1) && (j%3==2)

  • Upper

  • 左列:((i%width)==0) && (j%3==0)

  • 右列: Row:(i<width) && (j<2)
  • Lower Row:(i>(width*height-width)) && (j>5)

还要考虑四个角落的情况,它们的表达式都会比较长。此时,我停下来问自己,这是否是最好的方法,因为如果我有一个5行长的条件计算,那么调试不仅会非常痛苦,而且会减缓内环的速度。这就是为什么我来问你,是否有一个已知的算法来处理这个问题,或者是否有一个更好的方法来解决我的问题。非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-31 06:50:06

是的,有个更好的方法。编写一个快速循环来处理没有边界问题的情况。这将包括从第二列到下一列和从第二列到下一列的区域。然后,您可以编写四个例程来处理每个边(第0行、第0列、第N行和第N列),并且可以手动编写最后四个点的代码。

也就是说,还有很多更快的方法来完成你正在做的寻址计算。

票数 0
EN

Stack Overflow用户

发布于 2010-05-31 06:49:11

一个很好的提示是在数组的顶部添加一个额外的行,在最后再添加一个行(对列做同样的操作)。

这些附加项行/列将不包含任何信息,但它们将简化计算(没有边框)。以消耗更多记忆为代价..。

只是一个想法:)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2941794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档