Red de conocimiento informático - Conocimiento informático - ¿Cómo realizar la codificación Huffman en imágenes en escala de grises usando Matlab?

¿Cómo realizar la codificación Huffman en imágenes en escala de grises usando Matlab?

Te daré un programa, ¡estúdialo tú mismo!\x0d\\x0d\clc\x0d\clear\x0d\closeall;\x0d\define HufData/Len como una estructura de variables globales\x0d\ globalHufData ;\x0d\globalLen\x0d\disp('La computadora se está preparando para generar el resultado de la codificación Huffman, ¿espere pacientemente?');\x0d\Grayscale de la palabra clave original\x0d\a=imread('kids.tif' ) ;\x0d\\x0d\Partition dibuja la imagen original y el histograma en escala de grises\x0d\figure;\x0d\subplot(1, 2, 1)\x0d\imshow(a);\x0d\Cancelar el eje de coordenadas y el borde\ x0d\axisoff\x0d\boxoff\x0d\title('MATLAB viene con imagen', 'tamaño de fuente', 13); \x0d\subplot(1, 2, 2); \x0d\axisoff\x0d\boxoff\x0d\imhist (a);\x0d\title('Histograma de escala de grises de la imagen', 'fontsize', 13);\x0d\Estadísticas en escala de grises de la imagen\x0d\GrayStatistics=imhist(a);\x0d\GrayStatistics=GrayStatistics'; \GrayRatioo=GrayStatistics/sum(GrayStatistics);\x0d\GrayRatioNO=find(GrayRatioo~=0);\x0d\Len=length(GrayRatioNO);\x0d\Inicializa el conjunto de escala de grises para evitar que el sistema le asigne inmediatamente valores basura \x0d\GrayRatio=ones(1,Len);\x0d\\x0d\fori=1: Len\x0d\GrayRatio(i)=GrayRatioo(i);\x0d\end\x0d\\x0d\GrayRatio=abs( sort(-GrayRatio));\x0d\Asigne la probabilidad de escala de grises de la imagen a la estructura\x0d\fori=1: Len\x0d\HufData(i).value=GrayRatio(i);\x0d\end\x0d\\x0d \Codificación Huffman/codificación Huffman\x0d\HuffmanCode(Len);\x0d\Palabra de código de salida\x0d\\x0d\zippedHuffman=1;\x0d\fori=1:Len\x0d\tmpData=HufData(i ).code;\ x0d\str='';\x0d\forj=1: longitud(tmpData)\x0d\str=strcat(str, num2str(tmpData(j)));\x0d\zippedHuffman=zippedHuffman 1;\ x0d\end\x0d \disp(strcat('a',num2str(i),'=',str))\x0d\end\x0d\i;\x0d\Calcule cuántos Huffmans genera la computadora de una vez Codificación/Codificación Huffman\x0d\ zippedHuffman;\x0d\Calcular la capacidad de bytes de la imagen original antes de eliminar 0 compresión de nivel de gris\x0d\unzipped_delete=i*8;\x0d\\x0d\Calcular la relación de compresión\x0d \ratio_delete=zippedHuffman/unzipped_delete;\x0d\\x0d\ Calcule la relación de compresión de la imagen\x0d\ad=num2str(ratio_delete*10

0);\x0d\str2=strcat(ad,'');\x0d\disp(strcat('Relación de compresión de codificación de Huffman','=',str2))\x0d\\x0d\Subrutina: codificación de Huff Mann/Huffman función de codificación HuffmanCode.m\x0d\functionHuffmanCode(OriginSize)\x0d\globalHufData;\x0d\globalLen\x0d\fori=1: el registro izquierdo del árbol de codificación Len\x0d\Huffman es 1\x0d\ HufData(i).left=1 ;\x0d\El registro en el lado derecho del árbol de codificación de Huffman es 0\x0d\HufData(i).right=0;\x0d\El código de salida se inicializa a 0\x0d\HufData(i).code =[ ];\x0d\SortList inicialización\x0d\SortList(i).symbol=i;\x0d\SortList(i).value=HufData(i).value;\x0d\end\x0d\Inicializar el número de mensajes originales \ x0d\newsymbol=OriginSize;\x0d\forn=OriginSize: -1:2\x0d\Sort N mensajes\x0d\SortList=sortdata(SortList, n);\x0d\ Ordena los dos últimos mensajes con la menor probabilidad de ocurrencia. El mensaje se sintetiza en un mensaje\x0d\newsymbol=newsymbol 1;\x0d\HufData(newsymbol).value=SortList(n-1).value SortList(n).value;\x0d\HufData(newsymbol).left=SortList (n -1).symbol;\x0d\HufData(newsymbol).right=SortList(n).symbol;\x0d\Agregue el mensaje al final de la cola para prepararse para reordenar los mensajes N-1\x0d\SortList ( n-1).symbol=newsymbol;\x0d\SortList(n-1).value=HufData(newsymbol).value;\x0d\end\x0d\Atraviese el árbol de Huffman y obtenga la codificación de Huffman/Codificación de Huffman\x0d\ visit(newsymbol, Len, []);\x0d\end\x0d\\x0d\Subrutina: método de clasificación de burbujas función sortdata.m\x0d\functionreData=sortdata(SortList, n)\x0d\según la probabilidad del mensaje está ordenado\ x0d\fork=n:-1:2\x0d\forj=1:k-1\x0d\min=SortList(j).value;\x0d\sbl=SortList(j).symbol;\ x0d\if(min0 )\x0d\Atraviesa el contacto de la rama izquierda y la salida 1, aquí se usa la llamada anidada de subfunción\x0d\ocode1=[ocode1];\x0d\visit(HufData(node).left,n,ocode1);\ x0d \end\x0d\if(HufData(node).rightgt; 0)\x0d\Atraviesa el contacto de la rama derecha y genera 0, aquí se usa la llamada anidada de subfunción\x0d\ocode2=[ocode0];\x0d\visit (HufData(nodo).right, n, ocode2);\x0d\end\x0d\end\x0d\end