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

8 次查看(过去 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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Convert Image Type 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by