OpenCV:了解内核

Pea*_*Gen 4 c++ opencv image image-processing

我的书中谈到了OpenCV中的Image Kernel概念

当在像素邻域上进行计算时,通常用核矩阵表示它.该内核描述了如何组合计算中涉及的像素以获得期望的结果.

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

cv::GaussianBlur(inputImage,outputImage,Size(1,1),0,0)
Run Code Online (Sandbox Code Playgroud)

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

请看下面的图片

在此输入图像描述

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

Tim*_*lds 6

您给出的示例图像中的内核大小是3乘3(Size(3,3)),是的.内核大小为1比1 有效的,尽管它不是很有趣.

正在执行的操作的通用名称GaussianBlur卷积.

GaussianBlur函数创建了一个高斯内核,它基本上是一个矩阵,表示如何组合一个n×n像素的窗口来获得单个像素值(在这种情况下使用高斯形模糊模式).

除了图像的标量乘法之外,大小为1乘1的内核不能做任何事情; 也就是说,1乘1矩阵的卷积[c]就是这样c * inputImage.

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

  • 高斯的传播(即标准偏差或方差),使其模糊你想要的数量
    • 数字越大意味着模糊; 数字越小意味着模糊越少
  • 选择n足够大,以便不会将高斯截断得太接近模式

链接:


Aur*_*ius 5

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