过滤后如何处理负像素值?

How do you handle negative pixel values after filtering?

我有一张 8 位图像,我想用矩阵对其进行过滤以进行边缘检测。我的内核矩阵是

0  1  0
1 -4  1
0  1  0

对于某些指数,它给了我一个负值。我应该怎么处理它们?

超出范围的值在 JPEG 中极为常见。一种是通过夹紧来处理它们。

If X < 0 then X := 0 ;   
If X > 255 then X := 255 ;

你的内核是拉普拉斯滤波器。将其应用于图像会产生拉普拉斯算子的有限差分近似值。 .

但是您可以将它用作边缘检测器的构建块:您需要检测零交叉以找到边缘(这就是 Marr-Hildreth edge detector)。要找到过零点,您需要有负值。

您还可以使用拉普拉斯滤波图像来锐化图像。如果从原始图像中减去它,结果将是边缘更清晰、感觉更清晰的图像。为此,负值也很重要。

对于这两个应用程序,按照其他答案中的建议限制操作结果是错误的。该钳位将所有负值设置为 0。这意味着没有更多的零交叉点可以找到,因此您找不到边缘,对于锐化,这意味着每个边缘的一侧将不会被锐化。

因此,对 Laplace 滤波器的结果最好的处理方法是保留原样的值。使用带符号的 16 位整数类型来存储您的结果(我实际上更喜欢使用浮点类型,它简化了很多事情)。

另一方面,如果你想在屏幕上显示拉普拉斯滤波器的结果,你必须对像素值做一些有意义的事情。在这种情况下常见的是为每个像素添加 128。这会将零移动到中灰度值,将负值显示为较暗,将正值显示为较亮。添加 128 后,可以裁剪高于 255 和低于 0 的值。如果您想避免剪裁,您还可以进一步拉伸值,例如 laplace / 2 + 128.