
배경과 입자 가르기
커피 가루 사진에서 입자를 재려면 어디까지가 배경인지부터 정해야 한다. 비스듬한 조명의 그림자, 사진 값과 빛의 양의 차이, 오츠의 방법이 문턱을 얼마나 흔드는지 계산하고, 공개된 예시 사진 한 장으로 배경을 펴는 효과를 확인했다.
지난 글에서 입자 하나가 픽셀이 되는 과정을 계산할 때 숫자 세 개를 정해 두고 시작했다. 배경의 밝기는 1, 입자의 밝기는 0, 그리고 그 사이 0.5보다 어두운 픽셀을 입자로 본다. 계산은 깔끔했지만 실제 사진에는 이 세 숫자가 어디에도 적혀 있지 않다. 종이는 자리마다 밝기가 다르고, 커피는 새까맣지 않고, 휴대폰이 저장한 픽셀 값은 빛의 양과 비례하지도 않는다.
그러니 사진에서 입자를 재려면 먼저 이 질문에 답해야 한다. 어디까지가 배경이고 어디부터가 입자인가. 이 경계를 정하는 밝기를 문턱이라고 부른다. 이번 글은 문턱 하나가 측정을 얼마나 흔드는지 본다. 조명을 어떻게 두느냐, 문턱을 어떤 밝기 척도로 재느냐, 문턱을 누가 고르느냐가 차례로 나온다.
쾰러가 고르게 비춘 시야
19세기 말 현미경은 거울로 가스등이나 램프 빛을 모아 시료를 비췄다. 이렇게 비추면 시야가 고르지 않았다. 광원의 모양이 시료 위에 그대로 맺혀 어떤 곳은 밝고 어떤 곳은 어두웠다. 눈으로 볼 때는 견딜 만했지만 노출을 길게 주는 현미경 사진에서는 얼룩이 그대로 남았다.

아우구스트 쾰러(1866~1948). 사진: ZEISS Microscopy / Wikimedia Commons (CC BY-SA 2.0)
독일의 아우구스트 쾰러는 1893년에 현미경 사진을 위한 새 조명법을 발표했다(Köhler 1893). 광원을 시료 위에 맺지 않고 일부러 초점을 흐린 빛으로 시야 전체를 채우는 방법이다. 이렇게 하면 램프 필라멘트의 모양이 사진에 찍히지 않고 시야가 고르게 밝아진다. 쾰러는 나중에 칼 자이스에서 일했고, 그의 조명법은 지금도 광학 현미경의 기본 조명이다.
쾰러의 조명이 측정에서 중요한 이유는 배경에 있다. 배경이 어디서나 같은 밝기여야 시료의 밝기 차이를 시료의 차이로 읽을 수 있다. 커피 가루 사진도 사정이 같다. 배경이 고르면 문턱 하나로 사진 전체를 자를 수 있고, 고르지 않으면 같은 문턱이 자리마다 다른 뜻이 된다.
사진 한 장의 배경
천문학자 조너선 가녜가 만든 coffeegrindsize는 집에서 쓸 수 있는 거의 유일한 공개 분쇄도 측정 프로그램이다(Gagné, coffeegrindsize). 흰 종이 위에 가루를 흩뿌려 찍은 사진을 넣으면 입자 크기 분포를 그려 준다. 이 프로그램이 입자를 가르는 방법은 단순하다. 사진의 파란 채널만 쓰고, 사진 전체의 가운데 밝기(중앙값)를 배경 밝기로 삼아 그 58.8%보다 어두운 픽셀을 커피로 본다. 파란 채널만 쓰는 이유를 가녜는 설명서에 이렇게 적었다. 커피는 갈색이고 갈색에는 파란빛이 거의 없어서 흰 배경과의 대비가 가장 크다.
설명서에는 사진 찍는 요령도 꼼꼼하다. 무늬 없는 흰 배경을 쓰고, 배경 밝기가 사방에서 같아야 하며, 입자 둘레에 그림자가 없어야 한다. 가녜 자신은 빛 하나를 탁자 위에 살짝 비스듬히 두고, 자기 그림자가 사진에 지지 않도록 빛의 반대쪽에서 찍는다고 했다. 설명서에는 잘못 찍은 예와 그런대로 쓸 만한 예도 실려 있다. 아래는 '쓸 만은 하지만 좋지는 않다'는 예다.

coffeegrindsize 설명서의 예시 사진. 가녜는 위쪽의 조명 반사와 아래쪽의 그림자를 피해서 분석하라고 적었다. 사진: Jonathan Gagné, coffeegrindsize (MIT 라이선스)
눈으로 보면 조금 얼룩진 흰 종이다. 이 사진의 파란 채널에서 커피 입자를 지우고 배경 밝기만 남겨 보았다.

입자를 지운 뒤 넓게 평균 내 배경을 추정했다. 사진: Jonathan Gagné(MIT). 분석: 이 연재
종이의 배경 밝기(0~255)는 조명이 반사된 위쪽에서 220을 넘고, 그림자가 진 아래 왼쪽에서는 60대까지 내려간다. 같은 흰 종이가 자리에 따라 3.5배 가까이 다르게 찍혔다. 사진 전체의 중앙값은 144이고, 그 58.8%인 문턱은 85다. 그런데 맨 아래 띠에서는 종이 자체가 85보다 어둡다. 이 띠에서는 커피가 없는 종이까지 전부 커피로 판정된다.
실제로 맨 아래 300줄을 이 문턱으로 자르면 넓이의 94%가 커피로 나온다. 위쪽 반사 구역에서는 반대 일이 생긴다. 배경이 밝으니 흐려진 입자 가장자리도 덩달아 밝아져서 문턱 아래로 내려가지 못하고, 입자가 작게 잡힌다. 가녜가 반사와 그림자를 피해서 분석하라고 적은 이유가 이것이다.
위에서 비출까, 아래에서 비출까
커피 가루를 찍는 조명은 크게 두 가지다. 하나는 위나 옆에서 비춰 가루와 종이에 반사된 빛을 찍는 반사광이다. 가녜의 방식이 여기에 속한다. 다른 하나는 라이트패드처럼 빛을 내는 판 위에 가루를 올리고 아래에서 비추는 역광이다. 역광으로 찍으면 입자는 빛을 가린 그림자, 곧 실루엣이 된다.
반사광에서는 신경 쓸 것이 많다. 커피의 색이 대비를 정하니 볶은 정도에 따라 대비가 달라진다. 빛이 비스듬하면 입자마다 그림자가 생긴다. 그림자 길이는 입자 높이를 광원 높이각의 탄젠트로 나눈 만큼이라서, 높이 300 µm인 입자에 30° 높이에서 빛을 비추면 그림자가 500 µm 넘게 늘어진다. 빛을 바로 위에 두면 그림자가 없어지지만, 바로 위에는 휴대폰과 손이 있다.
정답을 아는 가상의 입자 네 개를 네 가지 조명으로 찍어 보았다. 입자 높이는 지름의 0.6배, 커피가 반사하는 빛은 종이의 8%로 두었다. 그림자 속은 방 안의 다른 빛(주변광)이 채운다. 입자로 판정하는 기준은 빛의 양이 배경의 절반보다 적은 픽셀이다. 왜 굳이 '빛의 양'으로 따지는지는 바로 다음 절에서 다룬다.

15 cm 높이, 픽셀 하나 49.5 µm 기준. 이 연재의 계산이다(모델 추정)
역광과 바로 위 조명은 지난 글에서 본 것처럼 작은 입자를 조금 작게 잴 뿐이다. 빛이 기울면 그림자가 입자에 붙는다. 45°에서는 잡힌 넓이가 실제보다 7% 많았고, 30°에 주변광이 적으면 49% 많았다. 30° 칸에서는 이웃한 두 입자가 그림자로 이어져 한 덩어리가 됐다.
그림자가 입자에 붙느냐 마느냐는 그림자의 밝기가 문턱보다 어두우냐로 갈린다. 그림자 속 밝기는 주변광이 전체 빛에서 차지하는 몫으로 정해진다. 그래서 같은 각도의 같은 조명이라도 방의 다른 불을 켜느냐 끄느냐에 따라 결과가 바뀐다. 지름 10픽셀(15 cm에서 500 µm) 입자를 30° 조명으로 찍으면, 주변광이 50%일 때는 지름을 0.4% 크게 재지만 20%일 때는 20% 크게 잰다. 그 사이 어디쯤에서 그림자가 문턱을 넘어 입자에 들러붙는다.
역광에서는 그림자가 생길 자리가 없다. 입자는 빛을 가리느냐 마느냐로만 찍힌다. 커피 가루를 잴 때 역광을 권하는 이유다. 다만 아주 얇은 조각, 예를 들어 원두 껍질에서 떨어진 은피(채프)는 빛이 조금 비쳐 옅게 찍힐 수 있다. 라이트패드 자체가 얼마나 고르게 빛나는지도 따로 확인해야 한다.
사진의 50%는 빛의 50%가 아니다
지난 글은 문턱을 0.5에 두었다. 곧은 경계는 흐려져도 밝기 0.5인 선이 원래 경계 자리에 그대로 남기 때문이다. 경계 양쪽으로 번지는 빛의 양이 같아서다. 여기서 0.5는 빛의 양의 절반이다.
그런데 휴대폰이 저장한 픽셀 값은 빛의 양이 아니다. 사람 눈은 어두운 쪽의 차이에 더 민감하므로, 사진 파일은 어두운 쪽에 값을 더 많이 쓰도록 빛의 양을 휘어서 저장한다. 웹과 대부분의 사진이 따르는 sRGB 표준의 변환식에서 픽셀 값 128(50%)은 빛의 양으로 21%에 해당한다(IEC 61966-2-1). coffeegrindsize의 58.8%는 빛의 양으로 30%다.

역광, 흐림 σ 0.8 px, 크기마다 입자 위치를 바꿔 60번씩 쟀다. 이 연재의 계산이다(모델 추정)
사진 값의 50%에서 자르면 빛의 양으로는 21%에서 자르는 셈이다. 입자 쪽으로 깊이 들어간 곳에서 자르니 입자가 작아진다. 흐림 0.8픽셀 기준으로 경계가 한쪽에서 0.7픽셀씩 안으로 들어오고, 지름으로는 1.4픽셀이 준다. 15 cm에서 약 70 µm다. 이 양은 입자 크기와 거의 상관이 없어서 작은 입자일수록 비율로 크게 줄어든다.
| 입자 지름 | 빛의 50% | 사진 값, 배경의 58.8% | 사진 값, 배경의 50% |
|---|---|---|---|
| 6 px (300 µm) | −4.8% | −20% | −28% |
| 10 px (500 µm) | −1.9% | −10% | −16% |
| 20 px (1 mm) | −0.5% | −5.0% | −7.4% |
15 cm 높이 기준. 이 연재의 계산이다(모델 추정)
coffeegrindsize의 기본값으로 자르면 500 µm 입자를 10% 작게 잰다. 부피는 지름의 세제곱이니 28% 작게 나온다. 물론 실제 휴대폰은 sRGB 변환식을 그대로 쓰지 않는다. 대비를 높이려고 회사마다 다른 톤 곡선을 얹는다. 그래서 실제로 얼마나 줄어드는지는 휴대폰마다 다르다. 다만 어느 휴대폰이든 사진 값으로 정한 문턱이 빛의 양의 절반과 맞아떨어진다는 보장은 없다.
노출도 같은 일을 한다. 배경을 하얗게 보이려고 노출을 올리면 배경이 255에 붙는다. 입자의 흐린 가장자리는 아직 255 아래에 있지만 배경은 더 밝아지지 못하고 잘린다. 그래서 노출이 넘친 사진에서는 '배경의 절반'이 실제 빛의 절반보다 입자 쪽으로 밀린다. 노출을 1.6배 올려 배경을 날리면, 빛의 양으로 제대로 50%에서 잘라도 500 µm 입자를 10% 작게 잰다. coffeegrindsize의 기본값으로 잘랐을 때와 거의 같은 크기라서 위 그래프의 주황 곡선과 초록 점선이 겹쳤다.
바로잡는 방법은 두 가지다. 하나는 픽셀 값을 빛의 양으로 되돌린 뒤 자르는 것이다. RAW로 찍으면 빛의 양에 가까운 값을 그대로 얻을 수 있다. 다른 하나는 크기를 아는 물체로 문턱을 맞추는 것이다. 지난 글들에서 쓴 마커 시트에는 크기를 아는 검은 사각형이 있다. 그 사각형의 폭이 정확히 재지는 문턱을 찾아 쓰면, 휴대폰의 톤 곡선을 몰라도 빛의 절반에 해당하는 사진 값을 고를 수 있다. 다만 역광 사진에 그 방법을 어떻게 옮길지는 아직 해 보지 않았다.
오츠의 방법
문턱을 사람이 정하지 않고 사진이 고르게 할 수도 있다. 가장 흔히 쓰는 방법은 오츠 노부유키가 1979년에 발표한 것이다(Otsu 1979). 사진의 픽셀 값을 히스토그램으로 모은 뒤, 어떤 값에서 둘로 나누었을 때 두 무리가 가장 뚜렷하게 갈리는지 찾는다. 여기서 '뚜렷하다'는 두 무리 평균의 차이를 제곱해 두 무리의 픽셀 수 비율을 곱한 값(무리 사이 분산)이 가장 크다는 뜻이다. OpenCV, ImageJ, MATLAB 같은 영상 처리 도구에 모두 들어 있다.
오츠의 문턱은 대체로 두 무리 평균의 한가운데에 놓인다. 역광 사진이라면 입자 쪽 평균은 0 근처, 배경 쪽 평균은 255 근처이니 문턱은 그 사이에 선다.

역광, 15 cm, 흐림 σ 0.8 px, 잡음 2%. 이 연재의 계산이다(모델 추정)
조명이 고른 역광 사진에서 오츠의 문턱은 사진 값 146~156(57~61%)에 섰다. 입자가 화면의 0.3%를 덮든 35%를 덮든 거의 그 자리였다. coffeegrindsize의 기본값 58.8%와 거의 같은 값이다. 그러니 오츠를 쓴다고 앞 절의 문제가 사라지지는 않는다. 오츠도 사진 값의 히스토그램을 보고 고르기 때문에 빛의 양으로는 30% 근처에서 자르고, 입자를 똑같이 작게 잰다.
오츠가 정말 무너지는 경우는 따로 있다. 입자가 아주 드문데 조명이 기울어 있을 때다. 위 그림 아래 줄은 입자가 화면의 0.3%뿐이고 왼쪽과 오른쪽 밝기가 ±30% 다른 사진이다. 오츠는 입자와 배경을 가르지 않고 배경의 어두운 쪽과 밝은 쪽을 갈랐다. 입자가 너무 적으면 입자를 떼어 내는 것보다 배경을 반으로 쪼개는 쪽이 '두 무리가 더 뚜렷하게 갈린' 것이 되기 때문이다. 잡힌 넓이는 실제의 87배였다. 화면의 0.1%를 덮으면 ±20%에서도 같은 일이 생겼다. 오츠의 방법은 히스토그램에 비슷한 크기의 봉우리가 둘 있을 때 잘 맞는다. 봉우리 하나가 너무 작으면 그 전제가 깨진다. 이런 약점 때문에 두 무리의 크기와 퍼짐이 다를 때를 다루는 방법들이 뒤이어 나왔다(Kittler와 Illingworth 1986; Sezgin과 Sankur 2004).
가녜의 사진에 오츠를 그대로 써도 결과는 비슷했다. 종이 부분에서 오츠는 107을 골랐고, 그림자가 진 맨 아래 띠의 99%를 커피로 판정했다.
배경을 먼저 펴기
자리마다 다른 배경을 문턱 하나로 다룰 수 없다면, 배경을 먼저 고르게 만들면 된다. 커피를 올리기 전에 같은 자리, 같은 조명으로 빈 종이를 한 장 찍어 두고, 커피 사진을 픽셀마다 그 빈 종이 사진으로 나눈다. 그러면 배경은 어디서나 1이 되고 입자는 배경에 대한 비율로 남는다. 천체 사진이나 현미경 사진에서 오래 써 온 평탄화(flat-field 보정)다. 쾰러가 조명으로 한 일을 계산으로 하는 셈이다.
빈 종이 사진이 없을 때는 사진에서 배경을 추정할 수도 있다. 입자는 작고 배경의 얼룩은 넓으니, 입자를 지운 뒤 넓게 평균 내면 배경 지도가 나온다. 앞에서 가녜의 사진에 그린 배경 지도가 이렇게 만든 것이다. 그 지도로 사진을 나눈 뒤 같은 58.8% 문턱을 써 보았다.

각 구역은 600×450 px. 사진: Jonathan Gagné(MIT). 분석: 이 연재
그림자 구역에서 커피로 판정된 넓이는 82%에서 2.4%로 줄었다. 반사 구역에서는 7.7%에서 9.2%로 늘었다. 문턱 하나로 자르면 반사 구역의 커피를 6분의 1쯤 놓쳤다는 뜻이다. 종이 부분 전체로 보면 문턱 하나로는 넓이의 15.3%가 커피였고, 배경을 편 뒤에는 5.6%였다. 배경을 편 사진에 오츠를 쓰면 문턱이 배경의 57.7%에 섰고 결과도 거의 같았다.
배경을 펴면 사진 속 자리마다 생기던 차이는 지워진다. 앞 절의 문제, 곧 사진 값의 절반이 빛의 절반이 아니라는 문제는 그대로 남는다. 둘은 따로 고쳐야 한다.
직접 바꿔 보기
아래 시뮬레이션에서 조명, 입자 밀도, 조명 기울기, 노출, 문턱 고르는 방법을 바꿔 볼 수 있다. 왼쪽은 15 cm 위에서 찍은 가상의 커피 가루 사진(약 12×9 mm)이고, 빨강이 입자로 판정된 픽셀, 파란 점선이 실제 입자다. 오른쪽은 사진 값의 히스토그램과 문턱이다. 아래 숫자는 잡힌 넓이가 실제의 몇 배인지, 덩어리가 몇 개로 잡혔는지, 300 µm 넘는 입자의 지름을 평균 몇 % 틀리게 쟀는지다. 입자 밀도를 가장 낮추고 조명 기울기를 ±40%로 올린 뒤 오츠를 골라 보면 앞의 붕괴를 다시 볼 수 있다. 왼쪽 그림을 누르면 판정을 끄고 사진만 보여 준다.
이 모델이 빠뜨린 것
- 휴대폰의 실제 톤 곡선. 이 글은 sRGB 변환식을 썼다. 실제 휴대폰은 장면에 따라 톤을 바꾸고 경계를 강조하는 처리도 한다. 문턱이 빛의 양으로 몇 %에 해당하는지는 휴대폰마다, 사진마다 다를 수 있다
- 입자의 색과 모양. 커피가 종이 빛의 8%를 반사한다는 값과 높이가 지름의 0.6배라는 값은 가정이다. 볶은 정도와 분쇄 방식에 따라 다르다. 기름기 있는 다크 로스트의 반짝임도 모델에 넣지 않았다
- 라이트패드의 실제 균일도. 역광을 권했지만 집에서 쓰는 라이트패드가 얼마나 고르게 빛나는지는 재 보지 않았다. 빈 패드를 찍어 보면 알 수 있다
- 실제 비교 실험. 같은 가루를 역광과 반사광으로 찍어 비교하는 일은 아직 하지 않았다. 이 글의 수치는 모두 가상 시료와 가녜의 공개 예시 사진 한 장에서 나왔다
정리
- 사진에서 입자를 재려면 배경과 입자를 가르는 문턱을 정해야 한다. 문턱이 조금만 움직여도 모든 입자의 경계가 함께 움직인다
- 공개된 예시 사진 한 장에서도 같은 흰 종이의 밝기가 자리에 따라 3.5배 가까이 달랐다. 사진 전체에 문턱 하나를 쓰면 그림자 진 띠의 94%가 커피로 판정됐다
- 비스듬한 조명은 입자에 그림자를 붙인다. 붙느냐 마느냐는 주변광의 몫에 달렸고, 30° 조명에서 500 µm 입자를 최대 20% 크게 쟀다. 역광에는 그림자가 없다
- 사진 값의 50%는 빛의 양으로 21%다. 사진 값으로 자르면 경계가 입자 안으로 들어와, coffeegrindsize의 기본값(58.8%)으로도 500 µm 입자를 10% 작게 잰다. 노출을 올려 배경을 날려도 비슷하게 작아진다
- 오츠의 방법도 사진 값으로 고르므로 같은 치우침이 있다. 입자가 화면의 0.1~0.3%뿐인데 조명이 기울면 배경을 둘로 가르고 무너진다
- 빈 종이로 나누는 평탄화가 자리마다의 차이를 지운다. 밝기 척도 문제는 따로, 빛의 양으로 되돌리거나 크기를 아는 물체로 문턱을 맞춰 고친다
쾰러의 조명법이 나온 지 130년이 넘었다. 그 사이 사진은 필름에서 휴대폰으로 바뀌었지만 배경이 고르지 않으면 측정이 틀어진다는 사정은 그대로다. 입자의 크기를 재기 전에 배경부터 재야 한다.
참고문헌
- Köhler A (1893). Ein neues Beleuchtungsverfahren für mikrophotographische Zwecke. Zeitschrift für wissenschaftliche Mikroskopie und für mikroskopische Technik 10(4), 433–440 — 서지 확인(2차 자료)
- Gagné J. coffeegrindsize. GitHub. 링크 — 파란 채널만 쓰고 중앙값의 58.8%로 자르는 코드(
def_threshold = 58.8), 설명서(Help/coffee_grind_size_manual.pdf)의 촬영 요령과 예시 사진 확인 - IEC 61966-2-1:1999. Multimedia systems and equipment — Colour measurement and management — Part 2-1: Default RGB colour space — sRGB — 변환식(픽셀 값 50% = 빛의 양 21.4%)
- Otsu N (1979). A threshold selection method from gray-level histograms. IEEE Transactions on Systems, Man, and Cybernetics 9(1), 62–66. doi:10.1109/TSMC.1979.4310076 — 서지 확인
- Kittler J, Illingworth J (1986). Minimum error thresholding. Pattern Recognition 19(1), 41–47. doi:10.1016/0031-3203(86)90030-090030-0) — 서지 확인
- Sezgin M, Sankur B (2004). Survey over image thresholding techniques and quantitative performance evaluation. Journal of Electronic Imaging 13(1), 146–165. doi:10.1117/1.1631315 — 서지 확인
이미지 출처
- 아우구스트 쾰러 초상: ZEISS Microscopy, Wikimedia Commons_(8527804902).jpg), CC BY-SA 2.0
- 커피 가루 예시 사진: Jonathan Gagné, coffeegrindsize Help/Decent_Example_Picture.png, MIT 라이선스 (축소). 배경 지도와 평탄화 그림은 이 사진을 분석해 직접 만들었다
- 그 밖의 그림, 합성 사진, 시뮬레이션: 직접 제작