발단은 한 줄의 트윗이었다.

jpeg로 반복 저장을 600회하면 원래 없던 붉은 점이 가득 끼며 화질이 열화되는 것을 넘어 박살이 난다는 얘기다…

이 트윗에 대한 답글로 온갖 이론이 난무하고, 결국 MS의 jpeg 인코더가 범인이라는 아무런 근거 없는 결론(?)[각주:1]이 났다.


근데, 근본적으로 생각해봤다.

jpeg는 이미지를 저장할 때 코사인을 기반으로 하는 DCT 변환을 하고, 고주파 성분을 제거하는 방식으로 손실압축을 한다.

즉, jpeg에서 화질의 열화는 있는 성분이 사라지는 것이지, 없던 게 태어나는 게 아니다.

좀 쉽게 표현하면 날카로움이 사라지고, 흐릿해지며, 두리뭉실해지는 것이다.


반복 저장을 하면 화질이 열화되는 건 당연한데, 결코 저런 방식일 수가 없는 것이다.




이론은 이론일 뿐이고, 과연 얼마나 손상되는지를 눈으로 확인하기 위해 간단하게 하나 만들어봤다.



이 프로그램의 기능은 다음과 같다.


1. 원본 jpeg이미지와 대상 폴더를 지정하면 해당 이미지를 폴더에 계속 읽었다 썼다를 반복


2. mozjpeg로 반복 인코딩을 하며, 최적화 여부를 선택할 수 있음

   즉, 최적화를 선택하면 mozjpeg으로 인코딩을 하고, 그렇지 않으면 libjpeg-turbo로 인코딩을 함[각주:2]


3. 반복 회수를 지정할 수 있으며, 지정된 횟수를 제외하고는 생성된 이미지는 모두 삭제함

   위 캡쳐의 설정은, 총 1000번 반복하며, 이 중 20/40/60/80… 번째 이미지만 남기고 모두 삭제한다는 뜻임


4. 저장 품질은 일정 범위를 지정해서 랜덤하게 적용할 수도 있고, 특정 값을 적용할 수도 있음


5. 남긴 이미지에 대해서는 원본과 비교하여 PSNR를 계산하고 csv 파일로 저장함


작업할 대상 이미지는 따로 구하지 않고, 발단이 되었던 이미지를 잘라내서 사용하기로 했다.


빨간 선도 그대로…


그리고, 이 이미지를 저장 품질을 바꿔가며 500번씩 저장해봤다.


각각 500번씩 반복저장한 결과


상식적이고, 당연한 결과지만 add noise 필터를 잔뜩 먹인 듯한 점들은 결코 나타나지 않는다.

오히려 빨간 선의 색이 보라색으로 변하며 다소 뭉개진 느낌이 든다.

재미있는 건 품질을 더 높게 지정했을 때 빨간 선이 더 많이 망가진다는 점. ㅋ


이 과정에서 PSNR의 변화는 다음과 같다.


012


이 그래프들을 보면 몇 가지 사실을 알 수 있다.


1. 저품질(Q=40)을 지정했을 때는 아예 처음부터 작정이라도 한 듯이 PSNR이 44를 유지함


2. 고품질에서는 PSNR이 떨어지다가 100번 이상 저장하면 일정한 값으로 수렴[각주:3]


3. 앞의 사진에서도 추측할 수 있듯이, Q=100일 때가 Q=90일 때보다 PNSR이 낮음




발단이 됐던 트윗과 그에 대한 멍청한 답글들에 대한 답변 및 시험 결과 요약


1. 600회까지 할 것도 없고, 50회 넘어가면 열화는 일정한 수준으로 수렴


2. 노이즈가 잔뜩 끼는 현상은 결코 벌어지지 않으니 혹세무민하지 마



덧1. 다양한 이미지로 테스트를 했는데, 본 포스트의 내용에서 벗어나는 결과는 없었음


덧2. 이 테스트와 별도로 MS의 jpeg 인코더가 용량 대비 화질이 떨어진다는 글은 종종 볼 수 있는 듯 함 (참조 링크)



  1. 답글 중 어설프게 아는 사람 하나가 엄청나게 아는 체하는 그림이 아주 아스트랄함 [본문으로]
  2. libjpeg-turbo에다 huffman table을 최적화하는 기능을 추가한 게 mozjpeg이라고 생각하면 대략 비슷함 [본문으로]
  3. 파일도 일정 수준에 다다르면 이전에 저장한 내용과 100% 동일해짐 [본문으로]
  1. 전진억 2015.04.06 08:09

    오오! 끊임없는 지적 호기심! 대단하십니다.

  2. Neon 2015.04.16 20:43

    혹자는 os를 탄다고 하던데요... Xp 시절의 버그라고... 실험에 사용한 os는 뭔가요?

  3. ㅇㅇㅇㅇ 2015.04.17 20:17

    XP에서 그림판으로 저장해보시오..

  4. alswlalswl9508 2018.11.03 18:16

    안녕하세요 개발하신 이 프로그램을 개인적으로 사용하고 싶은데 혹시 가능할지 연락드립니다.
    답글이나 alswlalswl9508@gmail.com 으로 연락주시면 감사하겠습니다.

  5. alswlalswl9508 2018.11.04 12:11

    빠른 답변 감사합니다! 제가 이번에 시각디자인과 졸업전시로 이미지 포멧에 관련된 실험을 하는데 이미지 압축이 최대한 많이 필요해서 개발하신 프로그램이 꼭 필요하게 되었습니다. 어느 곳을 찾아도 이미지 압축 횟수를 설정할 수 있는게 없어서 난감하던 차에 개발하신 프로그램을 보고 신나서 댓글을 달게 되었습니다. 초면에 무례하게 사용 허가만을 여쭤봐서 죄송합니다.. 만약 사용한다면 출처나 저작권 표시는 꼭 밝히도록 하겠습니다! 감사합니다.

+ Recent posts