2013-10-20 134 views
-2

林1個彩色圖像希望創建,將帶3的灰度圖像的Java應用程序(每個代表紅色,綠色和藍色),然後將它們合併/平坦化他們/等。爲了創建一個彩色圖像,我想知道是否有人知道我是否可以使用任何現有的算法或方法? 據我所知,有一個名爲ImageJ的程序,我之前已經使用過它,它確實是我想要的;您可以選擇3張圖像,並可以從中創建RGB圖像。我知道這是通過使用查找表在Java中完成的,這是以前從未遇到過的,所以甚至不知道從哪裏開始。3灰度圖像在Java

如果任何人有辦法吧,現有的算法的最佳途徑的任何想法,我怎麼可能是能夠讓我自己等這將是巨大的。我不是在尋找任何人爲我編碼,只是爲了引導我走向正確的方向;我爲每個R,G和B灰度圖像迭代每個像素的理論可能不起作用?

感謝提前

+2

我會嘗試找出。 –

回答

3

在sRGB的色彩空間工作的幫助下,很容易實現,這是否一種方法。

考慮以下方法:

private static BufferedImage createColorFromGrayscale(BufferedImage red, BufferedImage green, BufferedImage blue){ 
    BufferedImage base = new BufferedImage(red.getWidth(), red.getHeight(), BufferedImage.TYPE_INT_ARGB); 

    for(int x = 0;x < red.getWidth();x++){ 
     for(int y = 0; y < red.getHeight(); y++){ 
      int rgb = (red.getRGB(x, y) & 0x00FF0000) | (green.getRGB(x, y) & 0x0000FF00) | (blue.getRGB(x, y) & 0x000000FF); 

      base.setRGB(x, y, (rgb | 0xFF000000)); 
     } 
    } 

    return base; 
} 

創建新的基礎圖像,我們通過使用按位AND和OR來創建格式ARGB一個4字節整數顏色被分配給基本圖像創建的顏色分量。通過for循環遍歷整個圖像,我們可以將生成的基本圖像的每個像素分別設置爲每個通道的顏色。

此方法假設所有三個圖像的大小相等。如果圖像尺寸不相同,則必須單獨處理(例如通過在輸入之前拉伸圖像或修改方法以接受不同尺寸的圖像)。

PS:直接使用一個圖像可能更有效在BufferedImage的實例作爲基本圖像的大的圖片的時候,以節省內存...

+0

感謝您的理解,ive以不同的方式實現了類似的功能,以便iive設法讀取所選圖像的每個像素的值。我猜我需要複製它爲2個更多的圖像,然後以某種方式將所有3個結合在一起? – user2517280

+0

@ user2517280是......只要確保將每個圖像的每個通道分配到合成圖像中的相應通道。 – initramfs