调整内核大小

时间:2018-03-31 16:55:46

标签: c++ opencv

出于学习目的,我正在实现模糊功能。我有它工作,但我想调整我的内核,以实现更模糊的影响。

如果我扩展我的内核会确实会产生更模糊的影响吗?我怎样才能调整内核的大小?

我尝试使用passive调整内核大小,但会产生白色图像。

resize

1 个答案:

答案 0 :(得分:2)

进入基础知识,内核是一个与你的图像复杂的矩阵。

卷积的操作选取每个矩阵中的一个像素,在内核的锚点(通常是中间)重叠内核,然后将图像中的所有值加起来加权内核中的值。 / p>

例如,假设你有内核:

1 0 -1
0 0 0
-1 0 1

(仅用于演示目的 - 值是随机的)

锚点位于中心。然后,filter2D将获取图像中的所有像素并与内核重叠。在每个像素处,它将添加左上角和右下角像素,并减去右上角和左下角像素,如内核中的权重所示。

现在,要实现更大的模糊,您需要拥有更大的内核。你不能简单地调整内核的大小 - 调整大小的功能是改变图像的大小。对于内核,您需要计算更大内核的值 - 请记住,内核是一个具有特殊值的矩阵,而不是图像。

高斯模糊的核心是如何仔细选择值(根据高斯分布),使得中心像素(初始值)对最终像素的贡献最大,但周围像素也会增加,体重越来越小。周围像素的贡献,它们的权重,由高斯的西格玛参数调整。此参数表示高斯值的下降速度。

最后,您需要计算内核的值,考虑所需内核的sigma和大小。这可以手动(笔和纸)完成,也可以使用这样的计算器:http://dev.theomader.com/gaussian-kernel-calculator/