理解卷积矩阵

时间:2012-11-28 16:54:27

标签: java image-processing convolution

我正在学习卷积矩阵,我了解它们是如何工作的,但我不明白如何知道矩阵的输出会是什么样子。例如,假设我想为图像添加模糊,在得到正确的数字之前,我可以猜测10,000多种不同的数字组合。

我知道虽然这个公式会给我一个模糊效果,但我不知道为什么。

float[] sharpen = new float[] {
     1/9f, 1/9f, 1/9f,
     1/9f, 1/9f, 1/9f,
     1/9f, 1/9f, 1/9f
};

任何人都可以向我解释这是如何运作的,或者指向一些文章,这解释了这一点?我想事先知道矩阵的可能输出是什么,而不需要猜测。

基本上我想知道为什么我们把这个号码放在档案中,为什么不给其他号码?

3 个答案:

答案 0 :(得分:4)

This link解释了卷积矩阵如何使用一个简单的例子。

你问题中的矩阵模糊图像的原因是每个像素成为其周围所有像素的平均值。换句话说,位于动作区域中心的像素的新值等于以下公式:

new_value = (1/9)(top-left-neighbor)    + (1/9)(top-neighbor)    + (1/9)(top-right-neighbor) +
            (1/9)(left-neighbor)        + (1/9)(self)            + (1/9)(right-neighbor)     +
            (1/9)(bottom-left-neighbor) + (1/9)(bottom-neighbor) + (1/9)(bottom-right-neighbor)

新值是9个像素的1/9(包括原始像素值),结果是由矩阵操作的3x3方形的“平均”值。这种“平均”效果会在应用矩阵后产生模糊效果。

卷积矩阵的选取值取决于您想要达到的效果。请记住,矩阵应用于原始图像,新像素值将复制到目标图像。这意味着新值不会影响矩阵在相邻像素上的应用......它只是原始值被输入矩阵。

答案 1 :(得分:1)

使用java代码检查Convolution Matrix tutorial

答案 2 :(得分:0)

卷积操作基本上是一个过滤器:把它想象成一个遍历图像并在本地执行的工具。

您可以从阅读this article开始,如果您想深入搜索维基百科以进行卷积 - 欢迎使用一些真正的分析和信号处理理论知识,但如果您有兴趣,可以提出