我的导师给了我们伪代码:
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循环并应用于每个像素)
答案 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]。