문제

이미지 처리를 수행하고 있으며 CPU 계산 시간 측면에서 너무 집중적이지 않은 자동 흰색 밸런싱 알고리즘이 필요합니다. 권장 사항이 있습니까?

편집 : 그리고 효율성과 관련이 있다면, 컬러 이미지를 정수 배열로 Java로 구현할 것입니다.

도움이 되었습니까?

해결책

비교적 간단한 알고리즘은 화면에서 가장 밝고 가장 어두운 픽셀의 색조 (HSV 또는 HSL)를 평균화하는 것입니다. 꼬집음으로 가장 밝은 픽셀만으로 이동하십시오. 가장 밝은 것과 가장 어두운 것 사이의 색조가 너무 다르면 밝은 픽셀로 가십시오. 어둠이 근처에 있으면 밝은 픽셀과 함께 가십시오.

어두운 픽셀을 보는 이유는 무엇입니까? 때로는 어둠이 검은 색에 가까워지고 주변 빛이나 안개 또는 안개를 힌트합니다.

당신이 무거운 Photoshop 사용자라면 이것은 당신에게 의미가 있습니다. 사진의 하이라이트는 객체의 기본 색상과 관련이 없거나 약하게 관련되어 있습니다. 이미지가 너무 노출되어 모든 것이 CCD를 압도하지 않는 한, 빛의 색조를 가장 잘 표현합니다.

그런 다음 모든 픽셀의 색조를 조정하십시오.

빠른 RGB에서 HSV 및 HSV에서 RGB 기능이 필요합니다. (그러나 LUT 또는 선형 보간으로 픽셀 보정을 위해 RGB에서 작업 할 수 있습니다.)

당신은 평균 픽셀 색상이나 가장 인기있는 색상으로 가고 싶지 않습니다. 그렇게하면 광기가 있습니다.

가장 밝은 색상 (및 가장 어두운 색상)을 빠르게 찾으려면 RGB에서 작업 할 수 있지만 녹색, 빨간색 및 파란색의 승수가 있어야합니다. RGB 모니터에서 255 녹색은 255 레드보다 밝고 255 파란색보다 밝습니다. 나는 머리에 좋은 승수를 가지고 있었지만 아아, 그들은 내 기억을 탈출했다. 아마 그들을 위해 구글을 할 수 있습니다.

이것은 하이라이트가없는 이미지에서 실패합니다. 예를 들어 무광택 페인트 벽. 그러나 나는 당신이 그것에 대해 무엇을 할 수 있는지 모르겠습니다.


이 간단한 알고리즘에 대한 많은 개선 사항이 있습니다. 여러 개의 밝은 픽셀 평균, 이미지를 그리드, 각 셀에서 밝고 어두운 픽셀을 잡을 수 있습니다. 알고리즘을 구현 한 후에는 명백한 조정이 있습니다.

다른 팁

김프는 자동 흰색 밸런싱을 위해 매우 간단한 알고리즘을 사용합니다.http://docs.gimp.org/en/gimp-layer----balance.html

화이트 밸런스 명령은 빨간색, 녹색 및 파란색 채널을 별도로 스트레칭하여 활성 레이어의 색상을 자동으로 조정합니다. 이를 위해 이미지에서 픽셀의 0.05% 만 사용하고 가능한 한 남은 범위를 확장하는 빨간색, 녹색 및 파란색 히스토그램의 각 끝에서 픽셀 색상을 버립니다. 결과적으로 히스토그램의 외부 가장자리 (아마도 먼지 비트 등)에서 매우 드물게 발생하는 픽셀 색상은 스트레치 대비와 비교하여 히스토그램을 스트레칭하는 데 사용되는 최소값과 최대 값에 부정적인 영향을 미치지 않습니다. 그러나 "스트레치 대비"와 마찬가지로 결과 이미지에는 색조 교대가있을 수 있습니다.

이 작품을 구현하려는 첫 번째 시도 이후 여기에 설명 된 것보다 조금 더 조정하는 것이 있습니다.이 작품을 대부분의 사진에서 작동하는 것처럼 보이지만 다른 사진은 아티팩트가 있거나 빨간색 녹색 또는 파란색을 너무 많이 포함하는 것처럼 보입니다.

@Charles MA는 다음을 사용하도록 제안했습니다 Gimp 화이트 밸런스 알고리즘. ~ 안에 python 그리고 numpy 이것은 다음과 같이 보일 수 있습니다.

# white balance for every channel independently
def wb(channel, perc = 0.05):
    mi, ma = (np.percentile(channel, perc), np.percentile(channel,100.0-perc))
    channel = np.uint8(np.clip((channel-mi)*255.0/(ma-mi), 0, 255))
    return channel

image = cv2.imread("foo.jpg", 1) # load color
imWB  = np.dstack([wb(channel, 0.05) for channel in cv2.split(img)] )

빠르고 간단하며 꽤 괜찮은 결과를 제공합니다.

흰색 밸런싱 알고리즘은 어렵습니다. 디지털 카메라조차도 플래시 사용 여부와 빛 레벨과 같은 그림에 대한 추가 정보를 많이 알고 있지만 한 번에 잘못된 것입니다.

우선, 나는 평균 빨간색, 녹색 및 파란색만으로 그것을 화이트 밸런스 포인트로 사용합니다. 그것에 대한 제한을 설정하십시오 - 텅스텐, 자산 및 일광의 범위 내에서 유지하십시오. 완벽하지는 않지만 잘못되면 이유를 설명하기가 상대적으로 쉽습니다.

최근에 게시 된 알고리즘 중 하나는 색상 분포 알고리즘이며 여기에서 찾을 수 있습니다. http://www.comp.nus.edu.sg/~brown/pdf/colorconstancyjosav10.pdf 논문에는 Matlab 소스 코드에 대한 참조도 있습니다 (http://www.comp.nus.edu.sg/~whitebal/illuminant/files/illuminantestimator.m). 쉽게 프로그래밍 할 수있는 간단한 알고리즘이며 결과는 매우 빠르게 나타납니다.

추가로 빠르고 동시에 정확한 흰색 밸런싱 (색상 불변성) 알고리즘이 필요한 경우이 사이트를 확인해야합니다. http://www.fer.unizg.hr/ipg/resources/color_constancy/

각각의 소스 코딩 된 알고리즘은 여러분이 찾는 것 일 수있는 여러 알고리즘이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top