Advertisement
Rarez

DWT_IDWT_Quant_Dequant_DONE

Jan 7th, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.05 KB | None | 0 0
  1. IMG = imread('pasi.jpg');
  2. % RGB -> YCbCr
  3. IMG2 = rgb2ycbcr(IMG);
  4. [W,S,N] = size(IMG2);
  5. Y1 = IMG2(1:1:W,1:1:S,1);
  6. Cb1 = IMG2(1:1:W,1:1:S,2);
  7. Cr1 = IMG2(1:1:W,1:1:S,3);
  8. %QF
  9. QF=50;
  10. if QF<50
  11.  qscale=floor(50/QF);
  12. else
  13.  qscale=2-(QF/50);
  14. end
  15. QX=round(qscale);
  16. QUANTIZE = @(block_struct) round(block_struct./QX);
  17. DEQUANTIZE = @(block_struct) round(block_struct.*QX);
  18. % DWT IDWT
  19. DWT = @(block_struct) dwt2(block_struct,'haar');
  20. IDWT = @(block_struct) idwt2(block_struct,[],[],[],'haar');
  21. IDCT=@idct2;
  22. Y2 = blkproc(Y1,[8 8],DWT);
  23. Cb2 = blkproc(Cb1,[8 8],DWT);
  24. Cr2 = blkproc(Cr1,[8 8],DWT);
  25. % Quantize
  26. Y2 = blkproc(Y2,[8 8],QUANTIZE);
  27. Cb2 = blkproc(Cb2,[8 8],QUANTIZE);
  28. Cr2 = blkproc(Cr2,[8 8],QUANTIZE);
  29. % Dequantize
  30. Y2 = blkproc(Y2,[8 8],DEQUANTIZE);
  31. Cb2 = blkproc(Cb2,[8 8],DEQUANTIZE);
  32. Cr2 = blkproc(Cr2,[8 8],DEQUANTIZE);
  33. % IDCT
  34. Y2 = blkproc(Y2./255,[8 8],IDWT);
  35. Cb2 = blkproc(Cb2./255,[8 8],IDWT);
  36. Cr2 = blkproc(Cr2./255,[8 8],IDWT);
  37. % YCbCr -> RGB
  38. jpeg_result=ycbcr2rgb(cat(3,Y2,Cb2,Cr2));
  39. % Save
  40. imwrite(jpeg_result,'Test_pasiQF_50.jpg')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement