Я пытаюсь реализовать Matlab rgb2gray
в Java в соответствии с http://www.mathworks.com/help/toolbox/images/ref/rgb2gray.html.У меня есть следующий код:
public BufferedImage convert(BufferedImage bi){
int heightLimit = bi.getHeight();
int widthLimit = bi.getWidth();
BufferedImage converted = new BufferedImage(widthLimit, heightLimit,
BufferedImage.TYPE_BYTE_GRAY);
for(int height = 0; height < heightLimit; height++){
for(int width = 0; width < widthLimit; width++){
// Remove the alpha component
Color c = new Color(bi.getRGB(width, height) & 0x00ffffff);
// Normalize
int newRed = (int) 0.2989f * c.getRed();
int newGreen = (int) 0.5870f * c.getGreen();
int newBlue = (int) 0.1140f * c.getBlue();
int roOffset = newRed + newGreen + newBlue;
converted.setRGB(width, height, roOffset);
}
}
return converted;
}
Теперь я получаю изображение в градациях серого, но оно слишком темное по сравнению с тем, что я получаю от Matlab.AFAIK, самый простой способ превратить изображение в оттенки серого - это BufferedImage типа TYPE_BYTE_GRAY, а затем просто скопировать пиксели BufferedImage из TYPE_INT_ (A) RGB.Но даже этот метод дает изображение, которое темнее, чем у Matlab, хотя и в оттенках серого достаточно прилично.Я также изучил использование RescaleOp
.Тем не менее, в RescaleOp я никак не могу установить серость на пиксель.
В качестве дополнительного теста я распечатываю матрицы изображений, созданные Java nad от Matlab.В Java я получаю такие цифры, как 6316128 6250335 6118749 6118749 6250335 6447714, а в Matlab я получаю только что-то вроде 116 117 119 120 119 115 (первые шесть цифр обеих матриц).
Как получить аналогичный выходк Матлабу?