¿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