OpenCV:了解卷积核

5

我的书中关于OpenCV中的图像核心概念有这样的描述:

当在像素邻域上进行计算时,通常使用核矩阵来表示。该核心描述了参与计算的像素如何组合以获得所需的结果。

在图像模糊技术中,我们使用核大小。

cv::GaussianBlur(inputImage,outputImage,Size(1,1),0,0)

那么,如果我说内核大小是Size(1,1),这是否意味着内核仅有1个像素?
请看下面的图片

enter image description here

这里内核大小是多少?是Size(3,3)吗?如果我在这张图片中说尺寸为Size(1,1),那么这是否意味着内核仅有1个像素且像素值为0(图像中的第一个值)?
3个回答

9
在你提供的示例图像中,内核大小为3x3(Size(3,3))。虽然1x1的内核大小是有效的,但它不是很有趣。 GaussianBlur执行的操作的通用名称是卷积GaussianBlur函数正在创建一个高斯内核,它基本上是一个矩阵,表示如何组合n x n像素窗口以获取单个像素值(在这种情况下使用高斯模糊模式)。
大小为1x1的内核除了对图像进行标量乘法外什么也做不了;也就是说,由1x1矩阵[c]进行的卷积只是c * inputImage
通常,您需要选择一个n x n的高斯内核,满足以下条件:
  • 高斯分布的扩散(即标准偏差或方差),使其模糊所需的程度
    • 数字越大,模糊程度越高;数字越小,模糊程度越低
  • 选择足够大的n,以不会将高斯截断得太靠近模式
链接:

非常感谢您的回复。特别感谢您对GaussianBlur的解释。我给你点赞 :) - PeakGen
@Knight 我并不完全清楚为什么其他答案获得了特殊的勾选标记 - 不管你喜欢什么就用什么吧。 - Timothy Shields
“数字越大,模糊度越高” - 我注意到了。但在OpenCV官方示例中,他们循环了31次!http://docs.opencv.org/doc/tutorials/imgproc/gausian_median_blur_bilateral_filter/gausian_median_blur_bilateral_filter.html#smoothing 你有什么想法为什么他们不直接使用一个大的核大小而是循环呢?即使在循环内部编辑大小,也可以通过给出一个大的大小如Size(21,21)来轻松地进行模糊处理。 - PeakGen
@Knight 在这个例子中,他们循环的原因只是想展示增加模糊量的效果。每次循环都比上一次模糊程度更高。 - Timothy Shields

5
您发布的图像是一个3x3的核,可以使用cv::Size(3,3)来指定。您说cv::Size(1,1)对应于单个像素,这是正确的,但是在参考图像时说“cv::Size(1,1)”是没有意义的。一个1x1的核仅仅具有值[1]

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接