左侧切换示例图像、显示模式、窗口大小与邻域类型;右侧固定当前像素,逐一对应图像坐标、数组行列、像素值和局部邻域窗口。
当 3×3 或更大的窗口滑到图像边缘时,窗口中心周围的格子会跑到图像外面。如果不处理,这个窗口就缺像素、算不下去。
常用的处理办法是给越界位置赋一个可用的像素值:可以补 0、复制边缘像素、按镜像方式对称填充,或者只计算窗口中仍在图像内的部分。补法不同,边缘像素的输出结果就不一样。
把窗口拖到图像边缘,看看邻域矩阵里哪些格子来自原图、哪些格子是边界策略补出来的;换一种策略,比较输出值的变化,就能明白边界处理到底影响了什么。
[0, 1] 归一化值, OpenCV 8-bit 图像中常见范围是 [0, 255]。 彩色图中每个元素是 (R, G, B) 三元组。 在 OpenCV 中使用 cv::Mat 存储, 通过 image.at<uchar>(row, col) 访问灰度值, 通过 image.at<Vec3b>(row, col)[k] 访问通道值(k=0 B, 1 G, 2 R)。image[row][col]第 0 行(row),第 0 列(col)(x, y)x = 0(水平/列方向),y = 0(垂直/行方向)k = 3,h = floor(k / 2) = 1; 因此当前窗口覆盖中心像素周围横向和纵向各 1 格。当前像素位于图像边界附近(行 1,列 1),3×3 窗口部分超出图像范围。
当前边界处理使用 Clamp 策略(灰显策略为当前页面未实现的常见方案,仅作知识扩展参考)。