How can I calculate and compare the energy of the curvelet coefficients to compare in thresholding code?

조회 수: 2 (최근 30일)
I am working on image compression with Curvelet Transform. I already have the coefficient matrix cell as C={1,2}(k,l)..I would like to corp the unnecessary coefficients from this matrix but I don't know how to decide which ones should be removed or trimmed.
  댓글 수: 1
Ranadev Singha
Ranadev Singha 2014년 3월 3일
Hello,Ahmet i am also pursuing a project on curvelet transform for a data set in the form of a matrix.But i have a problem regarding finding out the coefficients of the transform. i have used many codes but in vain. Could you please send me the code which you have used for getting the coefficients. Waiting for your reply. please try to send me the code which you have used . it wud be of great help Thanking you Regards Ranadev Singha

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

채택된 답변

Kye Taylor
Kye Taylor 2013년 5월 31일
When you decompose a function f in an orthonormal basis, you can relate the sum of the square of the coefficients to the L2-norm (read energy) of the function via Parseval's identity. To get the best approximation in a lossy compression, you want to kill the coefficients that are smallest when squared.
The number of coefficients you decide to threshold depends on the amount of compression your looking for and the quality of the reconstruction: As you threshold more coefficients, you will degrade the quality of the reconstruction.
Now, using curvelets is another story since a curvelet transform is highly redundant (not orthogonal). With that said, you could still proceed by killing those coefficients that are "small enough," and just monitor the quality of the recongstruction as you do..
  댓글 수: 2
ahmet
ahmet 2013년 5월 31일
Thank you very much firstly The point I am stucked was the fact that these coeffcients (their amount) should mean something to me to decide from which referance point I should start kiling them. I was told to carry out this compression with Curvelet Transform by my prof.
Kye Taylor
Kye Taylor 2013년 5월 31일
I interpret your prof's suggestion in this way: You could look at the distrubtion of the squared-magnitude of each coefficient. For example
t = linspace(0,2*pi,512);
x = exp(t) + 0.1*randn(size(t));
y = fft(x-mean(x));
hist(abs(y),25);
Notice from the histogram, there are a lot of very small coefficients. So, you would not want to start thresholding at the average magnitude (since this would kill all the small coefficients). Instead, start killing only the smallest:
% vector of values to threshold
th = linspace(min(abs(y)),max(abs(y)),16);
figure
for i = 1:length(th)
subplot(4,4,i)
hold on
y(y<th(i)) = 0; % threshold values small enough
xrecon = ifft(y);
plot(x-mean(x),'b')
plot(xrecon,'r')
title([num2str(nnz(y)),' coefficients used.'])
end

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Denoising and Compression에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by