如何计算图像渐变

时间:2014-01-19 16:08:38

标签: java

我的导师给了我们伪代码:

grad = abs(im(x+1,y)-im(x-1,y)) + abs(im(x,y+1)-im(x,y-1))

计算我们正在制作的边缘检测器的图像的梯度。我认为这种伪代码的样子是:

int grad = Math.abs(img.getRGB(i+1,j)-img.getRGB(i-1,j)) + 
           Math.abs(img.getRGB(i,j+1)-img.getRGB(i,j-1));
他说这段代码只能得到颜色的R值。我无法理解这一点。有人可以帮我理解如何使用这个公式来获得整个颜色渐变吗? (这个公式将进入嵌套的for循环并应用于每个像素)

1 个答案:

答案 0 :(得分:1)

您的教师意味着您需要为每个像素获取R ed。您可以调整从getRGB(x, y)返回的位以获得红色,也可以将RGB值放入Color并以此方式提取。

public int getRed(BufferedImage image, int x, int y)
{
    // Color color = new Color(image.getRGB(x, y), true); if you care about alpha
    Color color = new Color(image.getRGB(x, y));

    return color.getRed();
}

这将是give you a value between [0, 255]。如果您想要一个介于[0,1]之间的值,则需要除以255.0

比特移位将是一个更快的解决方案,但这是更容易的解决方案,它可能足够快。作为参考,红色将是位[16,23]。