// Convolution with horizontal differentiation kernel mask
float h = ((src[-srcStride + 1] + src[+1] + src[srcStride + 1]) -
(src[-srcStride - 1] + src[-1] + src[srcStride - 1])) * 0.166666667f;
// Convolution vertical differentiation kernel mask
float v = ((src[+srcStride - 1] + src[+srcStride] + src[+srcStride + 1]) -
(src[-srcStride - 1] + src[-srcStride] + src[-srcStride + 1])) * 0.166666667f;
我需要在哈里斯角上实现的这种内核掩码的理论。那是什么样的内核掩码?是prewitt还是任何不同的内核?我很难找到一篇可以解释内核掩码的论文
答案 0 :(得分:0)
确实是Prewitt operator。
在索引到src
(输入图像)之后,使用srcStride
要跳过的数组元素的数量来寻址y-direciton中的下一个邻居,可以看到{{1} }按以下顺序从h
获取元素并使用以下权重:
src
这对应于使用以下内核的卷积(请记住卷积镜像内核):
-1/6 0 1/6
-1/6 0 1/6
-1/6 0 1/6
这再次对应两个卷积
| 1 0 -1 |
| 1 0 -1 | / 6
| 1 0 -1 |
即,它水平应用微分滤波器(中心差),垂直应用均匀平滑滤波器。
请注意,均匀平滑滤波器具有一些非常差的质量(它会翻转某些频率成分的符号,并且通常很难平滑),因此使用Sobel's operator总是更好(使用三角形平滑滤波器)或最好是Gaussian gradients。