Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IMG = imread('pasi.jpg');
- % RGB -> YCbCr
- IMG2 = rgb2ycbcr(IMG);
- [W,S,N] = size(IMG2);
- Y1 = IMG2(1:1:W,1:1:S,1);
- Cb1 = IMG2(1:1:W,1:1:S,2);
- Cr1 = IMG2(1:1:W,1:1:S,3);
- %QF
- QF=50;
- if QF<50
- qscale=floor(50/QF);
- else
- qscale=2-(QF/50);
- end
- QX=round(qscale);
- QUANTIZE = @(block_struct) round(block_struct./QX);
- DEQUANTIZE = @(block_struct) round(block_struct.*QX);
- % DWT IDWT
- DWT = @(block_struct) dwt2(block_struct,'haar');
- IDWT = @(block_struct) idwt2(block_struct,[],[],[],'haar');
- IDCT=@idct2;
- Y2 = blkproc(Y1,[8 8],DWT);
- Cb2 = blkproc(Cb1,[8 8],DWT);
- Cr2 = blkproc(Cr1,[8 8],DWT);
- % Quantize
- Y2 = blkproc(Y2,[8 8],QUANTIZE);
- Cb2 = blkproc(Cb2,[8 8],QUANTIZE);
- Cr2 = blkproc(Cr2,[8 8],QUANTIZE);
- % Dequantize
- Y2 = blkproc(Y2,[8 8],DEQUANTIZE);
- Cb2 = blkproc(Cb2,[8 8],DEQUANTIZE);
- Cr2 = blkproc(Cr2,[8 8],DEQUANTIZE);
- % IDCT
- Y2 = blkproc(Y2./255,[8 8],IDWT);
- Cb2 = blkproc(Cb2./255,[8 8],IDWT);
- Cr2 = blkproc(Cr2./255,[8 8],IDWT);
- % YCbCr -> RGB
- jpeg_result=ycbcr2rgb(cat(3,Y2,Cb2,Cr2));
- % Save
- imwrite(jpeg_result,'Test_pasiQF_50.jpg')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement