这些卷积算法有什么不同?
为什么y=0
和y<1, x = 0; x < 1
以及其他y=1
和y <-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++)
答案 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。