失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > android 高斯模糊 c c-如何在不使用任何内置高斯函数的情况下对图像进行高斯模糊处理?...

android 高斯模糊 c c-如何在不使用任何内置高斯函数的情况下对图像进行高斯模糊处理?...

时间:2020-10-25 22:10:58

相关推荐

android 高斯模糊 c c-如何在不使用任何内置高斯函数的情况下对图像进行高斯模糊处理?...

编写幼稚的高斯模糊实际上很容易。 它的完成方式与任何其他卷积滤波器完全相同。 盒子滤波器和高斯滤波器之间的唯一区别是您使用的矩阵。

假设您有一个定义如下的图像:

0 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19

20 21 22 23 24 25 26 27 28 29

30 31 32 33 34 35 36 37 38 39

40 41 42 43 44 45 46 47 48 49

50 51 52 53 54 55 56 57 58 59

60 61 62 63 64 65 66 67 68 69

70 71 72 73 74 75 76 77 78 79

80 81 82 83 84 85 86 87 88 89

90 91 92 93 94 95 96 97 98 99

3x3框式滤波器矩阵定义如下:

0.111 0.111 0.111

0.111 0.111 0.111

0.111 0.111 0.111

要应用高斯模糊,请执行以下操作:

对于像素11,您需要加载像素0、1、2、10、11、12、20、21、22。

然后将像素0乘以3x3模糊滤镜的左上部分。 像素1位于顶部中间,像素2位于右侧顶部,像素10位于左侧中间,依此类推。

然后将它们全部加在一起,并将结果写入像素11。您可以看到,像素11现在是像素本身及其周围像素的平均值。

边缘情况确实变得更加复杂。 您为纹理边缘的值使用什么值? 一种方法是将纸卷包裹到另一侧。 这对于稍后平铺的图像看起来不错。 另一种方法是将像素推入周围的地方。

因此,对于左上角,您可以按以下方式放置样本:

0 0 1

0 0 1

10 10 11

我希望您能看到如何轻松地将其扩展到大型过滤器内核(即5x5或9x9等)。

高斯滤波器和盒式滤波器的区别在于矩阵中的数字。 高斯滤波器使用行和列上的高斯分布。

例如,对于任意定义为的过滤器(即,这不是高斯的,但可能相距不远)

0.1 0.8 0.1

第一列将是相同的,但会乘以上面一行的第一项。

0.01 0.8 0.1

0.08

0.01

第二列将是相同的,但是值将乘以上一行中的0.8(依此类推)。

0.01 0.08 0.01

0.08 0.64 0.08

0.01 0.08 0.01

将以上所有内容加在一起的结果应等于1。以上滤镜与原始盒式滤镜之间的差异是,写入的末像素向中心像素(即位于该位置的像素)的权重要大得多 已经)。 之所以会发生模糊,是因为周围的像素确实模糊了该像素,尽管不是那么多。 使用这种滤波器,您会得到模糊效果,但不会破坏太多的高频信息(即,像素之间的颜色快速变化)。

这些过滤器可以做很多有趣的事情。 您可以通过从当前像素减去周围像素来使用这种滤镜进行边缘检测。 这样只会留下真正的颜色(高频)大变化。

编辑:一个5x5过滤器内核的定义与上面完全相同。

例如,如果您的行是0.1 0.2 0.4 0.2 0.1,那么如果您将它们中的每个值乘以第一项以形成一列,然后将每个值乘以第二项以形成第二列,依此类推,您将最终得到一个过滤器 的

0.01 0.02 0.04 0.02 0.01

0.02 0.04 0.08 0.04 0.02

0.04 0.08 0.16 0.08 0.04

0.02 0.04 0.08 0.04 0.02

0.01 0.02 0.04 0.02 0.01

采取一些任意位置,您可以看到位置0、0就是简单的0.1 * 0.1。 位置0、2为0.1 * 0.4,位置2、2为0.4 * 0.4和位置1、2为0.2 * 0.4。

我希望能给您足够的解释。

如果觉得《android 高斯模糊 c c-如何在不使用任何内置高斯函数的情况下对图像进行高斯模糊处理?...》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。