阵列的卷积

时间:2014-03-20 11:48:38

标签: c++ opencv convolution

这些卷积算法有什么不同?

为什么y=0y<1, x = 0; x < 1以及其他y=1y <-1, x < - 1

for(int y = 0; y < grey.rows; y++)
    for(int x = 0; x < grey.cols; x++)
        dst.at<uchar>(y,x) = 0;  

这是第二个卷积:

for(int y = 1; y < grey.rows - 1; y++){
    for(int x = 1; x < grey.cols - 1; x++)

2 个答案:

答案 0 :(得分:1)

第一个循环不正确地是“卷积”,因为赋值操作具有大小为1的“内核”。第二个示例似乎使用大小为3的内核,因此它需要3工作的像素:prev / curr / next(这就是for循环“更短”的原因)

答案 1 :(得分:1)

在前两个for循环中,代码只是初始化可能的结果数组。

在后两个循环中,卷积涉及一个3x3的 convolution kernel ,因此循环中的代码将引用从dst.at<uchar>(y-1 , x-1)到{{1}的元素}。

所以内核不能在边界上进行评估,只是开始从1而不是0开始的像素,而不是n-1而不是n-1。