중화사전망 - 서예자전 - 어떻게 Matlab 을 사용하여 그레이스케일 이미지를 호프만 인코딩할 수 있습니까?
어떻게 Matlab 을 사용하여 그레이스케일 이미지를 호프만 인코딩할 수 있습니까?
너에게 방안을 하나 줄게, 네가 직접 연구해라! \ x0d \ \ x0d \ CLC \ x0d \ clear \ x0d \ closeall; \x0d\% HufData/Len 을 전역 변수로 정의하는 구조 \ x0d \ globalhufdata \ x0d \ globallen \ x0d \ disp ('시스템이 호프만 인코딩 결과 출력을 준비하고 있습니다 ); \x0d\% 원본 코드 단어의 그레이스케일 \ x0d \ a = imread ('kids.tif'); \x0d\\x0d\% 파티션 원시 이미지와 그레이스케일 히스토그램 그리기 \ x0d \ figure \ x0d \ subplot (1,2,/kloc-0) \x0d\% 축 및 테두리 취소 \ x0d \ axis off \ x0d \ boxoff \ x0d \ title ('MATLAB 기본 이미지',' fontsize',' \ x0d \ 지선 줄거리 (1, 2,2); \ x0d \ axisoff \ x0d \ boxoff \ x0d \ imhist (a); \x0d\title ('이미지 그레이스케일 히스토그램',' fontsize',13); \x0d\% 이미지의 그레이스케일 통계 \ x0d \ graystatistics = imhist (a); \ x0d \ graystatistics = graystatistics'; \ x0d \ grayratio = graystatistics/sum (graystatistics); \ x0d \ grayratio no = find (grayratio ~ = 0); \ x0d \ len = 길이 (gray ratio no); \x0d\% 시스템에서 스팸값을 주지 않도록 그레이스케일 설정을 초기화합니다. \ x0d \ grayratio = Ones (1, len); \ x0d \ \ x0d \ fori =1:len \ x0d \ grayratio (I) = grayratio (I); \ x0d \ end \ x0d \ \ x0d \ grayratio = ABS (sort (-grayratio)); \x0d\% 구조 \ x0d \ fori =1:len \ x0d \ hufdata (I) 에 이미지 그레이스케일 확률을 제공합니다. 값 = grayratio (I); \ x0d \ end \ x0d \% 호프만 코드/호프만 코딩 \ x0d \ 허프만 코드 (len); \x0d\% 출력 코드 단어 \ x0d \ x0d \ zipped Huffman =1; \ x0d \ fori =1:len \ x0d \ tmpdata = hufdata (I) 입니다. 코드; \ x0d \ str = \ "\"; \ x0d \ forj =1:length (tmpdata) \ x0d \ str = strcat (str, num2str (tmpdata) \ x0d \ zipped Huffman = zipped Huffman+1; \x0d\end\x0d\disp(strcat('a', num2str(i),' =', str)) \ x0d \ end \ \x0d\% 컴퓨터 출력 수 계산 호프만 코드/호프만 인코딩 \ x0d \ zippedHuffman\x0d\% 삭제 전 원본 이미지의 바이트 용량 계산 0 그레이스케일 압축 \ x0d \ unzipped _ delete = \x0d\\x0d\% 압축비 계산 \ x0d \ ratio _ delete = zipped Huffman/unzipped _ delete; \x0d\\x0d\% 이미지 압축비 계산 \ x0d \ ad = num2str (ratio _ delete *100); \x0d\str2=strcat(ad,'%'); \x0d\disp(strcat ('호프만 인코딩 압축비',' =', STR2)) \ x0d \ x0d \% 서브 루틴: 호프만 인코딩/호프만 인코딩 함수 허프만 코드 \ x0d \ globallen \ x0d \ fori =1:len \ x0d \% 호프만 인코딩 트리의 왼쪽에 있는 레코드는1\ x0d \ 왼쪽 =1; \x0d\%% 호프만 코딩 트리의 오른쪽에 있는 레코드는 0\x0d\HufData(i) 입니다. 오른쪽 = 0; \x0d\%% 출력 코드가 0\x0d\HufData(i) 로 초기화됩니다. 코드 = []; \x0d\%% 정렬 목록 초기화 \x0d\SortList(i). Symbol = I;; \x0d\SortList(i). Value=HufData(i) 입니다. 가치; \x0d\end\x0d\% 초기화된 원시 메시지 수 \ x0d \ x0d \ newsymbol = originsize \ x0d \ forn = original size \x0d\% 발생 확률이 가장 낮은 마지막 두 개의 메시지를 하나의 메시지로 합성합니다. \ x0d \ newsymbol = newsymbol+1; \x0d\HufData(newsymbol). 값 = 리스트 정렬 (n- 1). 값+정렬 목록 (n). 가치; \x0d\HufData(newsymbol). Left=SortList(n- 1) 입니다. 기호; \x0d\HufData(newsymbol). Right=SortList(n) 입니다. 기호; \x0d\% 대기열 끝에 메시지를 추가하고 N- 1 메시지 순서 변경 준비 \ x0d \ sortlist (n- 1). Symbol = newsymbol \ x0d \ sortlist (n-1) 입니다. Value=HufData(newsymbol) 입니다. 가치; \x0d\end\x0d\% 호프만 트리를 통해 호프만 인코딩/호프만 코드 \x0d\visit(newsymbol, Len, []); \ x0d \ end \ x0d \% 서브루틴: 버블링 정렬 함수 sortdata.m \ x0d \ functionredata = sortdata (sortlist, n) \ \x0d\sbl=SortList(j) 입니다. 기호; \x0d\if(min0)\x0d\% 왼쪽 분기 접점을 통과하고 1 을 출력합니다. 여기서 하위 함수는 중첩된 것으로 \ x0d \ ocode1= [ocode1]; \x0d\visit(HufData(node)). 왼쪽, n, ocode1); \x0d\end\x0d\if(HufData(node). 오른쪽>0) ₩ x0d ₩% 오른쪽 분기 접점을 반복하고 하위 함수 중첩 호출 ₩ x0d ₩ ocode2 = [ocode0]; \x0d\visit(HufData(node)). 오른쪽, n, ocode2); \x0d\end\x0d\end\x0d\end