2012-02-27 2 views
3

http://www.mathworks.com/help/toolbox/images/ref/rgb2gray.html에 따라 Java에서 Matlab의 rgb2gray을 구현하려고합니다. 다음 코드를 가지고 있습니다 :Java에서 Matlab의 rgb2gray 구현

이제는 회색 음영 이미지가 나타나지만 Matlab에서 얻은 것보다 너무 어둡습니다. AFAIK, 이미지를 그레이 스케일로 변환하는 가장 쉬운 방법은 TYPE_BYTE_GRAY 유형의 BufferedImage를 가지고 있으며 TYPE_INT_ (A) RGB의 BufferedImage 픽셀을 복사하는 것입니다. 그러나이 방법조차도 Matlab의 그레이 스케일보다 어둡게 이미지를 제공합니다. 또한 RescaleOp을 사용해 보았습니다. 그러나 RescaleOp에서 픽셀 당 회색조를 설정하지는 않습니다.

추가 테스트로서 Matlab이 Java에서 제작 한 이미지 행렬을 인쇄합니다. Java에서는 6316128 6250335 6118749 6118749 6250335 6447714와 같은 수치를 얻었지만 Matlab에서는 116 117 119 120 119 115 (두 행렬의 처음 6 자리 숫자)와 같은 값만 얻습니다.

Matlab과 비슷한 출력을 얻으려면 어떻게해야합니까?

답변

3

operator precedence in Java은 타입 캐스팅이 곱셈보다 높음을 지정합니다. 부동 소수점 상수를 0으로 캐스팅하는 중이므로 어떻게 그레이 스케일 결과를 얻는 지 이해할 수 없습니다. 이 문서에서 오타로 나타나는 나는 또한 0.2990으로 0.2989을 대체 할

 int newRed = (int) (0.2989f * c.getRed()); 
     int newGreen = (int) (0.5870f * c.getGreen()); 
     int newBlue = (int) (0.1140f * c.getBlue()); 

: 수정하기 쉽습니다.

+0

안녕하세요, 감사합니다. 이것은 내 회색 음영 문제를 해결하는 것으로 보인다. 하지만 Matlab의 설명서를 어디에서 수정했는지 궁금합니다. 다른 곳에서 언급 한 것을 찾을 수없는 것 같습니다. – skytreader

+1

@skytreader, 잘 알려진 수식이며 참조는 어디 에나 있습니다. http://en.wikipedia.org/wiki/Luma_(video)#Rec._601_luma_versus_Rec._709_luma_coefficients. 삭제 된 대답은 샘플 계산이 포함되었지만 올바르지는 않았지만 올바른 상수를 대입하면 정확하게 맞았습니다. –