| ²é¿´: 1258 | »Ø¸´: 9 | |||
| µ±Ç°Ö÷ÌâÒѾ´æµµ¡£ | |||
| µ±Ç°Ö»ÏÔʾÂú×ãÖ¸¶¨Ìõ¼þµÄ»ØÌû£¬µã»÷ÕâÀï²é¿´±¾»°ÌâµÄËùÓлØÌû | |||
Сľͷ5898Òø³æ (СÓÐÃûÆø)
|
[½»Á÷]
¡¾ÇóÖú¡¿JPEGµÄMatlabʵÏÖ
|
||
|
ÏÂÃæÊÇÎÒ×Ô¼ºÊµÏÖµÄJPEG³ÌÐò¡¡Á¿»¯ºó±àÂëÊÇÓõÄRLC¡¡Ã»ÓÐʹÓÃHuffman£¨Ã»·¢ÏÖºÏÊʵģ©¡¡µ«Êǹý³ÌÖÐJPEGÖ®ºóµÄͼÏñÓкÜÃ÷ÏԵĿéЧӦ¡¡Öؽ¨Ö®ºóPSNR²»ÀíÏë ¶øÇÒûÓÐʵÏÖÂëÂÊbppµÄ¿É¿ØÖÆ¡¡ ¾´Çë¸÷λ³æÓÑÖ¸µ¼¡¡ÌÖÂÛ Èç¹ûÓиüºÃµÄJPEGʵÏÖ³ÌÐò¡¡Ï£ÍûÄÜÌù³öÀ´»ò·¢¸øÐ¡µÜ¡¡yan_li19850430@yahoo.com ![]() ¼±Åλظ´//////////////////////////////////////////////////////////// % My_JPEG main function function My_JPEG clear all; clc %load image I_Ori=imread('lena.bmp'); I=double(I_Ori); figure(1) imshow(I_Ori) % DCT_8*8 Transform and Quantification %dct_transformed_image = Classic_DCT( I ); dct_transformed_image = image_8x8_block_flowgraph_forward_dct( I ); figure(2) II=uint8(dct_transformed_image); imshow(II) Q_8x8=[16 11 10 16 24 40 51 61; 12 12 14 19 26 58 60 55; 14 13 16 24 40 57 69 56; 14 17 22 29 51 87 80 62; 18 22 37 56 68 109 103 77; 24 35 55 64 81 104 113 92; 49 64 78 87 103 121 120 101;72 92 95 98 112 100 103 99]; quantization_matrix_128x128 = repmat(Q_8x8,64,64); %for coarse quantization %quantization_matrix_128x128 = repmat((ceil(double(Q_8x8)./40)),64,64 ); %for fine quantization quantized_image_128x128 = round(dct_transformed_image ./quantization_matrix_128x128); %round operation should be done here for lossy quantization figure(3) imshow(uint8(quantized_image_128x128)) % Entropy Coding %This suitable Zigzag order is formed from the JPEG standard ZigZag_Order = uint8([ 1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 41 34 27 20 13 6 7 14 21 28 35 42 49 57 50 43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64]); % Finding the reverse zigzag order (8x8 matrix) reverse_zigzag_order_8x8 = zeros(8,8); for k = 1 size(ZigZag_Order,1) *size(ZigZag_Order,2)) reverse_zigzag_order_8x8(k) = find(ZigZag_Order== k); end; % Break 8x8 block into columns Single_column_quantized_image=im2col(quantized_image_128x128, [8 8],'distinct'); %--------------------------- zigzag ---------------------------------- % using the MatLab Matrix indexing power (specially the ':' operator) rather than any function ZigZaged_Single_Column_Image=Single_column_quantized_image(ZigZag_Order, ; %--------------------------------------------------------------------- %---------------------- Run Level Coding ----------------------------- % construct Run Level Pair from ZigZaged_Single_Column_Image run_level_pairs=uint8([]); for block_index=1:4096 %block by block - total 256 blocks (8x8) in the 128x128 image single_block_image_vector_64(1:64)=0; for Temp_Vector_Index=1:64 single_block_image_vector_64(Temp_Vector_Index) = ZigZaged_Single_Column_Image(Temp_Vector_Index, block_index); %select 1 block sequentially from the ZigZaged_Single_Column_Image end non_zero_value_index_array = find(single_block_image_vector_64~=0); % index array of next non-zero entry in a block number_of_non_zero_entries = length(non_zero_value_index_array); % # of non-zero entries in a block % Case 1: if first ac coefficient has no leading zeros then encode first coefficient if non_zero_value_index_array(1)==1, run=0; % no leading zero run_level_pairs=cat(1,run_level_pairs, run, single_block_image_vector_64(non_zero_value_index_array(1))); end % Case 2: loop through each non-zero entry for n=2:number_of_non_zero_entries, % check # of leading zeros (run) run=non_zero_value_index_array(n)-non_zero_value_index_array(n-1)-1; run_level_pairs=cat(1, run_level_pairs, run, single_block_image_vector_64(non_zero_value_index_array(n))); end % Case 3: "End of Block" mark insertion run_level_pairs=cat(1, run_level_pairs, 255, 255); end Compressed_image_size = size(run_level_pairs); % file size after compression Compression_Ratio = 262144/Compressed_image_size(1,1); Rate=8/ Compression_Ratio % Entropy Decoding % % % ------------------------------------------------------------------- % % % ------------------------------------------------------------------- % % % DECODING % % % ------------------------------------------------------------------- % % % ------------------------------------------------------------------- %---------------------- Run Level Decoding --------------------------- % construct ZigZaged_Single_Column_Image from Run Level Pair c=[]; for n=1:2:size(run_level_pairs), % loop through run_level_pairs % Case 1 & Cae 2 % concatenate zeros according to 'run' value if run_level_pairs(n)<255 % only end of block should have 255 value zero_count=0; zero_count=run_level_pairs(n); for l=1:zero_count % concatenation of zeros accouring to zero_count c=cat(1,c,0); % single zero concatenation end c=cat(1,c,run_level_pairs(n+1)); % concatenate single'level' i.e., a non zero value % Case 3: End of Block decoding else number_of_trailing_zeros= 64-mod(size(c),64); for l= 1:number_of_trailing_zeros % concatenate as much zeros as needed to fill a block c=cat(1,c,0); end end end %--------------------------------------------------------------------- %--------------------------------------------------------------------- % prepare the ZigZaged_Single_Column_Image vector (each column represents 1 block) from the % intermediate concatenated vector "c" for i=1:4096 for j=1:64 ZigZaged_Single_Column_Image(j,i)=c(64*(i-1)+j); end end %--------------------------------------------------------------------- %--------------------------- reverse zigzag -------------------------- %reverse zigzag procedure using the matrix indexing capability of MatLab (specially the ':' operator) Single_column_quantized_image = ZigZaged_Single_Column_Image(reverse_zigzag_order_8x8, ;%--------------------------------------------------------------------- %image matrix construction from image column quantized_image_128x128 = col2im(Single_column_quantized_image, [8 8], [512 512], 'distinct'); % Inverse_DCT_8*8 Transform and Inverse Quantification dct_transformed_image_IQ = quantized_image_128x128 .*quantization_matrix_128x128; %restored_image = image_8x8_block_inv_dct(dct_transformed_image_IQ ); restored_image = image_8x8_block_flowgraph_inverse_dct( dct_transformed_image_IQ ); III=uint8(restored_image); figure(4) imshow(III) % Reconstruct image %SNR PSNR=psnr(restored_image, I); end [ Last edited by gjliu on 2009-5-11 at 13:29 ] |
» ²ÂÄãϲ»¶
323Çóµ÷¼Á
ÒѾÓÐ6È˻ظ´
Ò»Ö¾Ô¸±±¾©»¯¹¤´óѧ 070300 ѧ˶ 336·Ö Çóµ÷¼Á
ÒѾÓÐ4È˻ظ´
352Çóµ÷¼Á
ÒѾÓÐ3È˻ظ´
Ò»Ö¾Ô¸¶«»ª´óѧ»¯Ñ§070300£¬Çóµ÷¼Á
ÒѾÓÐ8È˻ظ´
277²ÄÁÏ¿ÆÑ§Ó빤³Ì080500Çóµ÷¼Á
ÒѾÓÐ7È˻ظ´
317Çóµ÷¼Á
ÒѾÓÐ18È˻ظ´
293Çóµ÷¼Á
ÒѾÓÐ5È˻ظ´
280·ÖÇóµ÷¼Á Ò»Ö¾Ô¸085802
ÒѾÓÐ7È˻ظ´
0854µç×ÓÐÅÏ¢Çóµ÷¼Á
ÒѾÓÐ3È˻ظ´
263Çóµ÷¼Á
ÒѾÓÐ4È˻ظ´

sunyuanxin
½û³æ (ÖøÃûдÊÖ)
|
±¾ÌûÄÚÈݱ»ÆÁ±Î |
9Â¥2009-04-22 20:33:45
bslt
½ð³æ (ÖøÃûдÊÖ)
--<-<-<@
- Ó¦Öú: 0 (Ó×¶ùÔ°)
- ¹ó±ö: 2.021
- ½ð±Ò: 775.7
- Ìû×Ó: 2826
- ÔÚÏß: 60.4Сʱ
- ³æºÅ: 99615
- ×¢²á: 2005-11-11
- ÐÔ±ð: GG
- רҵ: ¼ÆËã»úÓ¦Óü¼Êõ

2Â¥2009-04-09 15:55:05
Сľͷ5898
Òø³æ (СÓÐÃûÆø)
- Ó¦Öú: 0 (Ó×¶ùÔ°)
- ½ð±Ò: 460.5
- É¢½ð: 20
- Ìû×Ó: 154
- ÔÚÏß: 9.3Сʱ
- ³æºÅ: 567127
- ×¢²á: 2008-06-01
- ÐÔ±ð: GG
- רҵ: ÐźÅÀíÂÛÓëÐźŴ¦Àí
¡ï
2007ÆïÖí¹ä½Ö(½ð±Ò+1,VIP+0):лл²ÎÓë½»Á÷ 4-20 03:31
2007ÆïÖí¹ä½Ö(½ð±Ò+1,VIP+0):лл²ÎÓë½»Á÷ 4-20 03:31
| ÎÒ¾õµÃÊDz»ÊÇÁ¿»¯¹ý³ÌÊ§ÕæÌ«´ó »¹Ò»¸ö¾ÍÊÇÁ¿»¯ºóµÄ±àÂëÊDz»ÊÇÓ¦¸ÃÓÃHuffman¸üºÃµã |

3Â¥2009-04-09 16:58:17
bslt
½ð³æ (ÖøÃûдÊÖ)
--<-<-<@
- Ó¦Öú: 0 (Ó×¶ùÔ°)
- ¹ó±ö: 2.021
- ½ð±Ò: 775.7
- Ìû×Ó: 2826
- ÔÚÏß: 60.4Сʱ
- ³æºÅ: 99615
- ×¢²á: 2005-11-11
- ÐÔ±ð: GG
- רҵ: ¼ÆËã»úÓ¦Óü¼Êõ
¡ï
2007ÆïÖí¹ä½Ö(½ð±Ò+1,VIP+0):лл²ÎÓë½»Á÷ 4-20 03:31
2007ÆïÖí¹ä½Ö(½ð±Ò+1,VIP+0):лл²ÎÓë½»Á÷ 4-20 03:31
|
ÊÔÊÔ »ô·òÂü°É matlab´úÂëgoogleËѲ»µ½ºÃµÄô£¿È¥CSDN ×ÊÔ´ ÀïËÑËÑ¿´¿´ ÎÒ¸ÕÉÏÁ˼¸ÌÃͼÏñ´¦ÀíµÄ¿Î ²»¸ÒÔì´Î °ïÂ¥Ö÷¶¥¹ý¡£¡£¡£ |

4Â¥2009-04-09 17:23:44














;
»Ø¸´´ËÂ¥