【问题标题】:Making a convolution filter制作卷积滤波器
【发布时间】:2015-04-25 06:55:59
【问题描述】:

我一直在用 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);

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

我不知道该怎么办,而且我在网上找不到任何帮助。我发现的几乎所有关于卷积的资源要么对归一化有无益的松散和模糊的解释,要么根本没有提及。

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

【问题讨论】:

    标签: java image-processing convolution


    【解决方案1】:

    Welp,原来这是我的设计错误。我没有将生成的像素写入新图像,而是写入源图像。在这种情况下,限制使用 Math.min() 和 Math.max() 是一个可接受的解决方案。

    【讨论】:

      猜你喜欢
      • 2019-11-24
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      相关资源
      最近更新 更多