2014-01-19 3 views
0
을 계산하는 방법을

내 강사는 우리에게 의사를 주었다. 이 가상 코드의 모양은 다음과 같을 것이라고 생각했습니다.이미지 그라데이션

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

강사는 각 픽셀에 R을 가져와야 함을 의미합니다. getRGB(x, y)에서 반환되는 비트를 사용하여 빨강을 얻거나 Color에 RGB 값을 입력하여 추출 할 수 있습니다.

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].