// 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;我需要在harris角上实现的这种内核掩码的理论。这是什么类型的内核掩码?这是prewitt还是其他内核?我很难找到一篇能解释内核掩码论文
发布于 2018-05-13 13:34:12
这确实是Prewitt operator。
在索引到src (输入图像)之后,使用srcStride跳过的数组元素的数量来寻址y方向上的下一个邻居,可以看到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 |这再次对应于两个卷积
h = src * ( [1 0 -1] / 2 ) * ( [1 1 1]^T / 3 )也就是说,它在水平方向应用导数滤波器(中心差分),在垂直方向应用均匀平滑滤波器。
请注意,均匀平滑滤波器具有一些非常差的质量(它将反转某些频率分量的符号,并且通常在平滑方面做得很差),因此最好使用Sobel's operator (使用三角形平滑滤波器)或Gaussian gradients。
https://stackoverflow.com/questions/50309237
复制相似问题