代码之家  ›  专栏  ›  技术社区  ›  Thunfische

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

  •  0
  • Thunfische  · 技术社区  · 7 年前

    我有一个8位的图像,我想用一个矩阵进行边缘检测。我的核心矩阵是

    0  1  0
    1 -4  1
    0  1  0
    

    对于某些指数,它给了我一个负值。我该拿他们怎么办?

    2 回复  |  直到 7 年前
        1
  •  9
  •   Cris Luengo    6 年前

    你的内核是一个拉普拉斯滤波器。将其应用于图像产生拉普拉斯算子的有限差分近似。 The Laplace operator is not an edge detector by itself .

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

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

    对于这两种应用,按照另一个答案中的建议,钳制操作的结果是错误的。该钳制将所有负值设置为0。这意味着没有更多的零交叉点可供查找,因此无法找到边,而对于锐化,则意味着每个边的一侧将不会锐化。

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

        2
  •  2
  •   user3344003    7 年前

    超出范围的值在JPEG中非常常见。一个通过夹紧来处理它们。

    If X < 0 then X := 0 ;   
    If X > 255 then X := 255 ;
    
    推荐文章