2013-10-20 6 views
-2

3 개의 회색 음영 이미지 (각각 빨간색, 녹색 및 파란색을 나타내는)를 가져 와서 병합/평평하게하는 Java 응용 프로그램을 만들려고합니다. 하나의 컬러 이미지를 만들기 위해 내가 사용할 수있는 기존의 알고리즘이나 메소드가 있는지 아는 사람이 있는지 궁금합니다. 이전에 사용했던 ImageJ라는 프로그램이 있다는 것을 알고 있으며 정확히 무엇을 찾고 있는지요. 3 개의 이미지를 선택하면 RGB 이미지를 만들 수 있습니다. 나는 이것이 자바에서 조회 테이블을 사용하여 수행된다는 것을 알고있다. 이것은 전에 결코 만나지 못했던 ive이다. 그래서 어디서부터 시작해야할지 모른다.자바에서 3 개의 회색 음영 이미지를 1 개의 컬러 이미지로 변환

누구나 접근 할 수있는 가장 좋은 방법, 기존 알고리즘, 내 자신을 만들 수있는 방법 등이 있다면 좋을 것입니다. 나를 위해 코드를 작성하는 사람을 찾지 않고, 올바른 방향으로 나를 안내합니다. 각 R, G, B 그레이 스케일 이미지마다 모든 픽셀을 반복하는 나의 이론은 효과가 없을 수 있습니까? 의 sRGB colourspace에서 작업을 미리

+2

나는 그것을 시도하고 발견 할 것입니다. –

답변

3

의 도움을

감사합니다,이 작업을 수행하는 방법을 쉽게 구현할 수있다.

다음 방법 고려 : 새로운 기본 이미지를 생성

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; 
} 

, 우리는 기본 이미지에 할당 형식으로 4 바이트 정수 색상 ARGB를 만드는 비트 단위 AND 연산 및 논리합을 사용하여 색 성분을 만들 . for 루프를 사용하여 전체 이미지를 반복하면 결과 기본 이미지의 각 픽셀을 각 채널의 색상으로 설정할 수 있습니다.

이 방법은 세 이미지의 크기가 모두 같다고 가정합니다. 이미지의 크기가 동일하지 않은 경우 별도로 처리해야합니다 (예 : 입력 전에 이미지를 늘리거나 다른 크기의 이미지를 허용하는 방법을 수정하여).

PS : 직접 이미지를 사용하는 것이 더 효율적일 수 있습니다 버퍼 이미지 인스턴스를 기본 이미지로 사용하여 큰 이미지를 처리 ​​할 때 메모리를 절약 할 수 있습니다.

+0

감사합니다. ive는 다른 방식으로 비슷한 것을 구현했기 때문에 선택된 이미지의 모든 픽셀 값을 읽을 수있었습니다. 나는 2 개의 더 많은 이미지를 위해 그것을 복제하고 어떻게 든 3을 모두 결합하는 것을 반복 할 필요가 있다고 생각하니? – user2517280

+0

@ user2517280 네 ... 각 이미지의 각 채널을 결과 이미지의 적절한 채널에 지정했는지 확인하십시오. – initramfs