이 과제에서는 이미지 미리보기 압축 알고리즘을 작성하게됩니다. 목표는 임의의 이미지 파일을 4KiB 미리보기 이미지로 줄여 대역폭이 거의없는 이미지를 빠르게 식별하는 데 사용할 수 있습니다.
압축기와 압축 해제 기의 두 가지 프로그램 (또는 하나의 결합 된 프로그램)을 작성해야합니다. 둘 다 파일 또는 stdin을 입력으로 가져 와서 파일 또는 stdout으로 출력해야합니다. 컴프레서는 주류 무손실 이미지 형식 (예 : PNG, BMP, PPM)으로 하나의 이미지를 수용 하고 최대 4096 바이트 의 파일 을 출력해야합니다 . 압축 해제 기는 압축기에서 생성 된 모든 파일을 수용하고 입력에 최대한 근접한 이미지를 출력해야합니다. 인코더 / 디코더에는 소스 코드 크기 제한이 없으므로 알고리즘을 창의적으로 사용할 수 있습니다.
제한 사항 :
컨닝 하지마'. 프로그램은 숨겨진 입력을 사용하지 않고 인터넷에 데이터를 저장하는 등의 작업을 수행 할 수 없습니다. 또한 일련의 스코어링 이미지에만 관련된 기능 / 데이터를 포함 할 수 없습니다.
라이브러리 / 툴 / 빌트인 들어, 당신이 되어 사용할 수 일반 (스케일링, 번짐, 색 공간 변환 등)의 화상 처리 동작을하지만, 하지 이미지 디코딩 / 인코딩 / 압축 (압축기 입력 및 압축 해 출력 제외) 동작. 일반 압축 / 압축 해제도 허용되지 않습니다 . 이 문제에 대한 자체 압축을 구현하기위한 것입니다.
압축 해제기에 의해 출력되는 이미지의 크기는 압축기에 제공된 원본 파일의 크기와 정확히 일치해야합니다. 이미지 크기가 양방향으로 2 16 을 초과하지 않는다고 가정 할 수 있습니다 .
컴프레서는 평균 소비자 PC에서 5 분 이내에 가동해야하며, 압축 해제 기는 아래 세트의 모든 이미지에 대해 10 초 이내에 가동해야합니다.
채점
빠른 검증 및 시각적 비교 를 위해 답변을 사용하여 압축 후 테스트 코퍼스의 무손실 이미지 앨범을 포함하십시오.
압축기는 다음 이미지 모음을 사용하여 테스트됩니다 .
여기 에서 zip 파일로 모든 이미지를 다운로드 할 수 있습니다 .
점수는 모든 이미지에서 압축기 의 평균 구조 유사성 지수 가됩니다. 우리는 dssim
이 도전에 오픈 소스를 사용할 것입니다. 소스에서 쉽게 만들거나 Ubuntu를 사용하는 경우 PPA도 있습니다. 자신의 답변에 점수를 매기는 것이 바람직하지만 C 응용 프로그램을 작성하는 방법을 모르고 데비안 / 우분투를 실행하지 않으면 다른 사람이 점수를 매길 수 있습니다. dssim
PNG 로의 입 / 출력을 예상하므로 다른 형식으로 출력하는 경우 먼저 출력을 PNG로 변환하십시오.
점수를 매길 수 있도록 다음은 간단한 도우미 Python 스크립트 사용법입니다 python score.py corpus_dir compressed_dir
.
import glob, sys, os, subprocess
scores = []
for img in sorted(os.listdir(sys.argv[1])):
ref, preview = (os.path.join(sys.argv[i], img) for i in (1, 2))
sys.stdout.write("Comparing {} to {}... ".format(ref, preview))
out = subprocess.check_output(["dssim", ref, preview]).decode("utf-8").split()[0]
print(out)
scores.append(float(out))
print("Average score: {:.6f}".format(sum(scores) / len(scores)))
최저 점수가 이깁니다.
You may assume that the image dimensions do not exceed 2^32 in either direction.
조금 과도하지 않습니까? 이것은 (x, y) 좌표 쌍을 저장하기 위해 최대 16 바이트를 사용해야 함을 의미합니다. 어느 방향 으로든 2 ^ 16 (65536) 픽셀 이상의 치수를 가진 이미지 파일은 거의 없으며, 2 ^ 11이면 말뭉치의 모든 이미지에 충분합니다.
2^16
.