制作卷积滤镜

时间:2015-04-25 06:55:59

标签: java image-processing convolution

我一直用Java编写卷积滤镜,我的意思是它看起来很简单。除了一件事,我理解它背后的理论。

这是我的锐化滤镜:

 0 -1  0
-1  5 -1
 0 -1  0

看起来很简单。但是我一直有问题。结果超出界限(大于255且低于0)非常容易。

例如,如果我有一个带有这些值的像素区域(为简单起见,我们说这是一个单通道图像):

255 255 255
255 255 100
255 255 255

这将导致(5 * 255) - 255 - 255 - 255 - 100 = 410.这太高了。

然后,考虑一下:

255 255 255
255 100 255
255 255 255

这是(5 * 100) - 255 - 255 - 255 - 255 = -520。那太低了。

如果我尝试将值限制在可接受的范围内,如下所示:

result = Math.min(Math.max(result, 0), 255);

结果是可怕而根本不是我想要的。

我对此怎么办感到茫然,而且我没有在网上找到任何帮助。几乎所有关于卷积的资源,我发现它都无益于松散,对规范化的解释模糊不清,或根本没有提及它。

如果你想要我的代码,你可以要求它,但我怀疑它与它有什么关系。我的代码运行正常,似乎我误解了理论或什么?

1 个答案:

答案 0 :(得分:0)

Welp,事实证明这是我的设计错误。我没有将结果像素写入新图像,而是写入源图像。在这种情况下,使用Math.min()Math.max()进行限制是一种可接受的解决方案。

相关问题