거의 모든 디지털 카메라 센서는 광 센서 그리드로 구성됩니다. 각 포토 센서는 기본 색상 중 하나 ( 빨강, 녹색 및 파랑) 중 하나에 민감합니다 . 이러한 포토 센서의 구성 방식을 발명가 인 Eastman Kodak의 Bryce Bayer 에 이어 Bayer 필터 라고합니다 . 이미지를 촬영 한 후 4 개의 포토 센서가 결과 이미지에서 1 픽셀의 RGB 값을 구성합니다. 귀하의 작업은 해당 프로세스를 취소하고 결과 색상을 필터 색상에 따라 색상을 지정하는 것입니다. 간단하게하기 위해 감마 보정 을 무시 합니다.
예를 들어 : "정상"순방향 바이어 필터 단계는 다음과 같습니다.
- 팬톤 밀랍 색 의 광선 이 센서에 부딪 칩니다 .
- BGGR (청색-녹색 / 녹색-적색) 필터는이를 4 개의 광선으로 분해합니다.
- 4 개의 광선이 센서에 닿으면 다음과 같이 읽습니다. 81-168 / 168-235 (센서 값 범위는 0-255)
- Bayer 필터는 이것을 컬러 (235, 168, 81)의 RGB 픽셀 하나로 변환합니다.
역 바이엘 필터 단계는 다음과 같습니다.
- 색상이있는 RGB 픽셀 (235, 168, 81)은 RGB 값을 가진 4 개의 픽셀로 분할됩니다 : (0,0,81)-(0,168,0) / (0,168,0)-(235,0,0).
도전
다음을 수행하는 가장 짧은 기능 또는 프로그램을 작성해야합니다.
- 입력에서와 같이 파일 이름을 사용하여 DeBayered 이미지를 출력하십시오.
- 출력은 파일에 기록되거나 화면에 표시 될 수 있습니다.
- 출력은 원본 이미지의 너비와 높이의 두 배 여야합니다.
입력 이미지의 각 픽셀은 다음 그림에서 그래픽으로 설명 된대로 BGGR (파랑-녹색 / 녹색-빨강) 바이어 필터 패턴에 따라 매핑되어야합니다.
우리는 두 개의 녹색 포토 센서가 동일한 신호를 수신한다고 가정하므로 Bayer 매트릭스의 G 값은 RGB 이미지의 G 값과 같습니다.
- 결과 이미지의 배열 표현을 반환 할 수 없습니다 . 출력은 이미지 또는 이미지 로 표시 될 수 있는 파일 ( 적절한 이미지 형식 )이어야합니다.
예
이 파일을 입력으로 지정하십시오.
결과 이미지는 다음과 같아야합니다.
참조 파이썬 구현 :
from PIL import Image
import numpy
import sys
if len(sys.argv) == 1:
print "Usage: python DeByer.py <<image_filename>>"
sys.exit()
# Open image and put it in a numpy array
srcArray = numpy.array(Image.open(sys.argv[1]), dtype=numpy.uint8)
w, h, _ = srcArray.shape
# Create target array, twice the size of the original image
resArray = numpy.zeros((2*w, 2*h, 3), dtype=numpy.uint8)
# Map the RGB values in the original picture according to the BGGR pattern#
# Blue
resArray[::2, ::2, 2] = srcArray[:, :, 2]
# Green (top row of the Bayer matrix)
resArray[1::2, ::2, 1] = srcArray[:, :, 1]
# Green (bottom row of the Bayer matrix)
resArray[::2, 1::2, 1] = srcArray[:, :, 1]
# Red
resArray[1::2, 1::2, 0] = srcArray[:, :, 0]
# Save the imgage
Image.fromarray(resArray, "RGB").save("output.png")
기억하십시오 : 이것은 코드 골프가장 짧은 코드가 승리합니다!
BG
은 맨 위와 맨 GR
아래 에 셀이 표시되는 반면 예제 이미지는 RG
맨 위와 GB
맨 아래에 표시됩니다. 그것은 두 개의 녹색 셀을 대각선에 놓는 배열이 허용되는 것을 의미합니까? (다른 것들은 GB / RG와 GR / BG입니다.)