I am new to signal processing and currently doing a school project in wavelet transform using Python. I want to extract all details and approximations (Example: cA2, cA1, cD2, cD1), pywt could return the cA2, cD2, and cD1 except cA1. I noticed that there are the functions named appcoef and detcoef from MATLAB to return all the approximations and details. How can I do the same using pywt?
From the matlab docs https://www.mathworks.com/help/wavelet/ref/appcoef2.html the appcoef function does: "If N = NMAX, then a simple extraction is done; otherwise, appcoef2 computes iteratively the approximation coefficients using the inverse wavelet transform."
import pywt def appcoef(coeffs, wavelet, level, **kwargs): max_level = len(coeffs) - 1 if level == max_level: return coeffs # this function also calculates the IDWT (kinda confusing API) approx = pywt.waverec2(coeffs[:-level], wavelet, **kwargs) # not sure why PyWavelets sometimes gives duplicate final rows/columns if np.all(approx[-1] == approx[-2]): approx = approx[:-1] if np.all(approx[:, -1] == approx[:, -2]): approx = approx[:, :-1] return approx
I tested against matlab on a single grayscale image for a couple levels, and the normalized results matched to 1e-15; but of course there could be some issue I am missing for other cases.
Oh also detcoef:
detcoef = lambda coeffs, level: coeffs[-level]