【问题标题】:OpenCV: Understanding KernelOpenCV:理解内核
【发布时间】:2013-05-15 09:23:34
【问题描述】:

我的书中提到了 OpenCV 中的图像内核概念

当对像素邻域进行计算时,通常 用核矩阵表示。这个内核描述了如何 将参与计算的像素组合起来,以获得 想要的结果。

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

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

那么,如果我说内核大小是Size(1,1),这是否意味着内核只有 1 个像素?

请看下图

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

【问题讨论】:

    标签: c++ image opencv image-processing


    【解决方案1】:

    您发布的图像是一个 3x3 内核,由 cv::Size(3,3) 指定。您说cv::Size(1,1) 对应于单个像素是正确的,但是在参考图像时说“cv::Size(1,1)”是没有意义的。一个 1x1 内核的值只是 [1]

    【讨论】:

      【解决方案2】:

      您提供的示例图像中的内核大小是 3×3 (Size(3,3)),是的。 1×1 的内核大小有效的,尽管它不是很有趣。

      GaussianBlur 正在执行的操作的通用名称是一个卷积

      GaussianBlur 函数正在创建一个高斯核,它基本上是一个矩阵,表示您应该如何组合一个 n×n 像素的窗口以获得单个像素值(在此使用高斯形模糊模式)案例)。

      大小为 1×1 的内核只能对图像进行标量乘法;也就是说,1×1 矩阵[c] 的卷积就是c * inputImage

      通常,您需要选择满足以下条件的 n×n 高斯核:

      • 高斯分布(即标准偏差或方差),使其模糊您想要的量
        • 数字越大表示越模糊;较小的数字意味着较少的模糊
      • 选择足够大的 n,以免将高斯截断过于接近众数

      链接:

      【讨论】:

      • 非常感谢您的回复。特别感谢有关 GaussianBlur 的解释。来自我的 +1 :)
      • @Knight 我不完全清楚为什么另一个答案得到了特殊的复选标记——不管你的船是什么。
      • “更大的数字意味着更模糊” - 我注意到了。但是在 opencv 官方示例中,它们循环了 31 次! docs.opencv.org/doc/tutorials/imgproc/… 知道为什么他们只是不使用大内核大小而不是循环吗?即使大小是在循环内编辑的,也可以通过提供像 Size(21,21) 这样的大尺寸来轻松模糊它
      • @Knight 在该示例中,它们循环的原因仅仅是因为想要显示增加模糊量的效果。循环的每次迭代都比前一次更模糊。
      【解决方案3】:

      这个图像是一个内核,它的大小是 3x3。通过将相应的像素值相乘并获得 9 个结果的总和,将内核应用于图像。这在文献中称为卷积/过滤。您可以查看以下资源以获取更多信息:

      http://en.wikipedia.org/wiki/Kernel_(image_processing) http://homepages.inf.ed.ac.uk/rbf/HIPR2/filtops.htm http://www.cse.usf.edu/~r1k/MachineVisionBook/MachineVision.files/MachineVision_Chapter4.pdf

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-21
        • 2013-03-27
        • 2012-09-01
        • 2014-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多