[python] 해상도 dpi와 ppi 차이점



해상도를 나타내는 PPI와 DPI가 무엇인지와 둘의 차이점에 대해 알아보겠습니다.

해상도(Resolution)

해상도는 이미지의 선명도를 나타내는 지표입니다. 단위는 보통 1인치(2.54cm) 안에 표현되는 픽셀(Pixel)이나 점(Dot)의 수로 해상도를 표현합니다. 이때 사용하는 단위로 PPI와 DPI가 있습니다.

PPI(Pixels per Inch)

PPI(Pixels per Inch)는 디지털 이미지를 화면(모니터, 텔레비전 등)에 출력할 때 사용하는 단위입니다. 화면의 모든 픽셀은 빛의 3원색인 R, G, B 값을 표현하는 sub-pixels로 구성되어 있습니다.

위의 그림을 보면
10ppi는 1인치 가로, 세로 안에 각 10개 sub-pixel, 총 100개(10x10) sub-pixels를 가진다는 의미이며,
20ppi는 1인치 가로, 세로 안에 각 20개 sub-pixel, 총 400개(20x20) sub-pixels를 가진다는 의미입니다.
이는 PPI가 높을수록 1인치에 구성되는 sub-pixels가 높다는 뜻이고, PPI가 높으면 고화질의 이미지를, 낮으면 저화질의 이미지를 나타낸다는 의미입니다. 

동일한 이미지에 대해 PPI가 줄어들면 별도로 이미지 크기를 줄이지 않아도 이미지 크기가 자동으로 줄어들게 되는데 이는 이미지의 1픽셀은 화면 1픽셀과 동일하기 때문입니다.

이에 대한 예제를 보겠습니다.

24인치 1920x1080 FHD 해상도 모니터는 가로 1920개와 세로 1080개 픽셀을 가졌다는 의미입니다. 
고정된 픽셀 수를 가진 모니터에서 10ppi는 총 100개 sub-pixels 크기 이미지를, 20ppi는 총 400개 sub-pixels 크기 이미지를 모니터 화면에 출력한다는 의미입니다.
위의 그림처럼 고정된 픽셀(1920x1080)에서 10ppi와 20ppi를 출력하면 '별도의 이미지 크기를 줄이지 않아도' 출력된 이미지 크기가 달라지는 것을 의미합니다. 그래서 ppi를 변경하고 이미지를 모니터에 출력했을 때 이미지 사이즈가 달라졌던 경험(위와 같은 이유로 인해)이 있는 분들도 있을 겁니다.

즉, 모니터 픽셀 수는 '고정'되어 있기 때문에 10ppi는 10x10 픽셀을 20ppi는 20x20 픽셀을 300ppi는 300x300 픽셀을 가지는 다른 크기의 이미지가 모니터에 출력됩니다.

DPI(Dots per Inch)


DPI는 Dots per Inch의 약자로, 1인치 당 점(Dot)이 몇 개인지 나타내며 인쇄물(프린터, 스캐너 등)에 쓰이는 단위입니다.
PPI와 동일하게 10dpi면 1인치 가로, 세로에 총 100(10x10)개의 점을, 20dpi면 총 400(20x20)개의 점으로 이뤄졌다는 의미입니다.

동일한 인쇄물에 대해 DPI가 줄어들면 '인쇄물 크기는 줄어들지 않은 상태'에서 1인치 안 점의 갯수가 적어지기 때문에 더욱 '흐릿한 이미지가 출력'되게 됩니다.

이에 대한 예제를 실제 이미지 기준 DPI 값 변화에 따른 인쇄물 출력 차이로 참고하기 바랍니다.
즉, 인쇄물 출력 크기는 '고정'되어 있기 때문에 300dpi일 때는 인쇄물이 보다 정밀하게 출력되고 72dpi일 경우에는 1인치당 구성되는 점의 갯수가 적기 때문에 흐릿하게 인쇄물이 출력됩니다.

P.S.

PPI만 사용하면 되지 왜 DPI를 사용하는가?에 대한 의문이 생길 수 있지만 PPI만 고려하면 모니터에 따라 출력되는 이미지의 크기가 달라집니다. (고정된 모니터 1920x1080과 2560x1440 크기에서 20ppi 이미지 출력 시) 
인쇄물 크기에 따라 모니터를 바꿔가며 작업할 수는 없기 때문에 최종 인쇄물의 크기를 모니터 크기에 무관하게 고정시키고자 DPI 단위를 사용합니다.

결론

PPI(Pixel per Inch)는 주로 디지털(모니터, 텔레비전 등) 이미지의 화면 표시에 사용되는 픽셀의 해상도로서 display unit에 사용됩니다.

DPI(Dots per Inch)는 디지털 이미지와 무관하게 오직 인쇄되는 출력물(프린터, 스캐너 등)의 품질에 관여하며 printing unit에 사용됩니다.

댓글

이 블로그의 인기 게시물

[opencv-python] 이미지 크기조절(resize) 하는 법

[python]파이썬: csv reader header skip (첫번째 행 무시하기, 안읽기)