我不能夠exactely我的RGB圖像轉換爲灰度圖像..的Java RGB2灰色是暗
我的最終圖像是暗,影響了我的工作。
我用這個代碼:
public static BufferedImage rgb2gray(BufferedImage bi)//converter
{
int heightLimit = bi.getHeight();
int widthLimit = bi.getTileWidth();
BufferedImage converted = new BufferedImage(widthLimit, heightLimit, BufferedImage.TYPE_BYTE_GRAY);
for (int height = 0; height < heightLimit; height++) {
for (int width = 0; width < widthLimit; width++) {
Color c = new Color(bi.getRGB(width, height) & 0x00fffff);
int newRed = (int) ((0.2989f * c.getRed()) * 1.45);//0.2989f
int newGreen = (int) ((0.5870f * c.getGreen()) * 1.45);//0.5870f
int newBlue = (int) ((0.1140f * c.getBlue()) * 1.45);
int roOffset = newRed + newGreen + newBlue;
converted.setRGB(width, height, roOffset);
}
}
return converted;
}
有什麼不對?
在matlab中的結果是完美的,但在java中的代碼很差。
爲什麼你用1.45乘以每個新值?據我所知,乘數僅爲0.2989,0.587和0.1140分別爲r,g和b – 2013-05-14 00:04:39
這可能有助於http://stackoverflow.com/questions/9460079/implementing-matlabs-rgb2gray-in-java – 2013-05-14 00:07:48
@bilal。 haider - 它看起來像括號在他的代碼中是正確的...所以你鏈接的答案不適用。但額外的* 1.45似乎不合適。但無法弄清楚爲什麼這樣做不會使圖像「太亮」而不是「太暗」。 – Floris 2013-05-14 00:14:22