how wa can discard 75% of small coefficients after get the DCT conversion of each image block?

조회 수: 2 (최근 30일)
Hi, i want to do this step on one image but i don't know how i can discard 75% of smal coefficients after get the DCT, please help me .
Can i do this without using for and if?
step:
Divide the input image into smaller blocks with dimensions nXn.
Get the DCT conversion of each image block.
Discard 75% of small coefficients.
Recreate and view the image
my code:
im=imread('s1.jpg');
im = rgb2gray(im);
figure;
imshow(im)
title('Original image');
img_dct=dct2(im);
figure;
imagesc(img_dct);
colormap(gray);
im_dct=idct2(img_dct);
title('DCT Compress Image');
figure;
imagesc(im_dct);
colormap(gray);

답변 (1개)

Jonas
Jonas 2021년 5월 30일
편집: Jonas 2021년 5월 30일
use the
Y = prctile(block,75,'all')
command to get the 75% percentile, you can then set all values smaller than this threshold to 0 by
block(block<=Y)=0;
  댓글 수: 3
Jonas
Jonas 2021년 5월 31일
편집: Jonas 2021년 5월 31일
the problem seems to be your image, using a matlab demo image works for me, does it for you?
im=imread('cameraman.tif');
imDct=dct2(im);
Y=prctile(abs(imDct),75,'all');
imDct(abs(imDct)<=Y)=0;
imshow(rescale(idct2(imDct)))
Jonas
Jonas 2021년 5월 31일
편집: Jonas 2021년 5월 31일
you used the block variable before you assigned it! i thought you are doing block wise dct
edit: you wrote in your question that you have to do blockwise dct, have a look into the block processor

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by