مختبر الويفلت

أنا خالد كرار حسن، وهذا الموقع شرحٌ نظري وتطبيق عملي على تحويل الويفلت (Wavelet Transform) في معالجة صور EEG ثنائية الأبعاد: إزالة التشويش واكتشاف الحواف.

بحث في الهندسة الطبية · عرض تفاعلي

استخدام تحويل الويفلت في معالجة صور EEG ثنائية الأبعاد: إزالة التشويش واكتشاف الحواف

هذه الصفحة تعرض البحث عملياً: كل صورة ورقم تراه محسوب حياً في المتصفح، ويمكنك تغيير الويفلت وعدد المستويات والعتبة ومستوى الضوضاء ومشاهدة الأثر فوراً.

الاسم: خالد كرار حسنرقم التسجيل: 43421التخصص: هندسة طبية

مسار العرض المقترح (نحو 10 دقائق)

  1. «الفكرة»: الفرق بين إشارة EEG والصورة المشتقة منها.
  2. المختبر A: كيف يفكّك DWT الصورة إلى تقريب وتفاصيل، ويعيدها دون فقد.
  3. المختبر B: إزالة التشويش بالعتبة ومقارنتها بالمرشحات التقليدية.
  4. المختبر C: اكتشاف الحواف ومقارنته بـ Sobel وCanny.
  5. المختبر D: توليد مخطط مقياسي من إشارة EEG اصطناعية وإرساله إلى B وC.

قبل أن تبدأ: حدود هذا العرض

  • الحسابات بشيفرة JavaScript كتبتُها لهذا العرض، وهي ليست مخرجات MATLAB؛ الدوال المقابلة في MATLAB مذكورة في كل قسم.
  • إشارة EEG هنا اصطناعية مولَّدة برمجياً للتوضيح، وليست تسجيلاً لمريض.
  • الأرقام تتغير مع الإعدادات والبذرة العشوائية، ولا يصح تعميمها على كل الصور.
  • مقياس SSIM هنا بنافذة منتظمة 7×7 مبسّطة، وقيمه غير قابلة للمقارنة المباشرة مع ssim في MATLAB.
الفكرة

من الإشارة إلى الصورة، ثم إلى الويفلت

عنوان البحث يجمع شيئين يجب التمييز بينهما: إشارة EEG أحادية البعد (جهد مقابل الزمن)، وصورة ثنائية الأبعاد تُشتق منها، كالمخطط المقياسي (Scalogram) أو المخطط الطيفي أو خريطة قنوات × زمن. تحويل الويفلت الثنائي الأبعاد يُطبَّق على هذه الصورة المشتقة لا على الإشارة نفسها [1]، [2].

1 · إشارة EEG (1D)
جهد كهربائي من فروة الرأس عبر الزمن، يحوي إيقاعات (δ θ α β γ) وشوائب مثل وميض العين وتيار 50Hz [3]، [4].
2 · صورة مشتقة (2D)
تحويل زمني-ترددي (مثل CWT بويفلت Morlet) يعطي مصفوفة: محور للزمن ومحور للتردد [5].
3 · DWT ثنائي البعد
يفكّك الصورة إلى تقريب LL وتفاصيل أفقية ورأسية وقطرية عبر عدة مستويات [6].
4 · التطبيق
تنقية بعتبة على المعاملات [7]، أو حواف من مقدار التفاصيل عبر المقاييس [8].
ملاحظة منهجية: تنقية الصورة المشتقة لا تُغني عن تنقية الإشارة. سترى في المختبر D أن شائبة 50Hz تظهر في المخطط المقياسي كشريط أفقي، وأن التعامل معها عند مستوى الإشارة أدق.
المختبر A

التحليل ثنائي الأبعاد وإعادة البناء

يُطبَّق مرشحا تمرير منخفض وعالٍ على الصفوف ثم الأعمدة (تحويل قابل للفصل)، فتنتج أربعة نطاقات بربع المساحة، ثم يتكرر التحليل على LL [6]، [9]. في MATLAB: dwt2 لمستوى واحد وwavedec2 لعدة مستويات وwaverec2 لإعادة البناء.

الإعدادات

الأصل (128×128، تدرج رمادي)
المعاملات بتخطيط Mallat: أعلى اليسار LL، وباقي النطاقات تفاصيل (رمادي متوسط = صفر).
المعاد بناؤها
النطاقحصته من الطاقة الكلية Σc²
جرّب: (1) اختر «كل المعاملات» وتحقّق أن الفرق شبه معدوم، وهذا ما يُتوقع من تحويل متعامد قابل للعكس. (2) اختر «LL فقط» وراقب كم بقي من بنية الصورة وأين اختفت الحواف. (3) قارن توزيع الطاقة بين LL والتفاصيل عند تبديل الصورة من الفانتوم إلى المخطط المقياسي. تُعالَج الحدود هنا بالامتداد الدوري، وتستخدم MATLAB افتراضياً امتداداً مختلفاً، فقد تختلف القيم عند الأطراف.
المختبر B

إزالة التشويش بعتبة المعاملات

النموذج y = x + η بضوضاء غاوسية بيضاء. بما أن التحويل متعامد تبقى الضوضاء بيضاء بالتباين نفسه في مجال المعاملات، فتُقدَّر σ من المعاملات القطرية الدقيقة، وتُقلَّص المعاملات الصغيرة [7]، [10]. في MATLAB: wdenoise2 أو wavedec2 + wthresh + waverec2 [11]، [12].

σ̂ = median(|HH₁|) / 0.6745    λ = σ̂ · √(2 ln N)    soft: sign(c)·max(|c|−λ, 0)    hard: c·1[|c|>λ]

الإعدادات

الصورة النقية (معلومة لأنها اصطناعية)
المشوّشة
المنقّاة بالويفلت
المعاملات قبل العتبة
المعاملات بعد العتبة (رمادي متوسط = صفر)
خريطة الخطأ |النقية − المنقّاة|، الداكن = خطأ أكبر
الطريقةPSNR (dB)SSIM

جرّب: ارفع σ وراقب σ̂ المقدَّر هل يتتبعها. بدّل Soft وHard وانظر خريطة الخطأ. بدّل Universal وBayesShrink وقارن نسبة المعاملات المصفَّرة. ثم اضغط «متوسط 10 تحقّقات» لأن تحقّقاً واحداً قد يضلّل. (BayesShrink مشتقّة أصلاً للعتبة اللينة [13]، فمزجها بالصلبة هنا للاستكشاف فقط.) لاحظ أيضاً أثر اختيار الويفلت: هل يتغير ترتيب الطرق؟ يُتوقَّع أن يتوقف الجواب على نوع الصورة، والمخطط المقياسي مثال مفيد لصورة ذات بنية مختلفة عن الفانتوم.
المختبر C

اكتشاف الحواف بالويفلت مقابل الطرق التقليدية

تكبر معاملات التفاصيل قرب الانقطاعات، وتقع الحواف عند القيم العظمى الموضعية لمقدار التحويل عبر المقاييس [14]، [8]. نستخدم التحويل غير المتناقص (SWT) لتفادي حساسية الإزاحة، ونجمع المقاييس بالوسط الهندسي لمقادير التفاصيل ثم نحذف غير القيم العظمى (NMS). هذا تنفيذ مبسّط لغرض العرض وليس تنفيذ Mallat–Zhong الكامل. في MATLAB: swt2 وedge [15]، [16].

Mj = √(Hj² + Vj²)    M = (∏j=1..J Mj)1/J    P = TP/(TP+FP)   R = TP/(TP+FN)   F1 = 2PR/(P+R)

الإعدادات

الدخل المشوّش
الحقيقة الأرضية للحواف (إن وُجدت)
مقدار الويفلت متعدد المقاييس (الداكن = أقوى)
Sobel
Canny مبسّط
ويفلت SWT
حافة صحيحة (ضمن بكسل واحد من الحقيقة)حافة كاذبةحافة حقيقية فائتة
الطريقة (عند العتبة الحالية)PrecisionRecallF1
جرّب: حرّك العتبة لترى موازنة الكشف الخاطئ والفقد، وارفع الضوضاء ولاحظ من يتدهور أولاً. غيّر عدد المقاييس من 1 إلى 3. ثم شغّل المقارنة: هي تختار لكل طريقة أفضل عتبة لها، فتكون مقارنة أعدل من عتبة واحدة ثابتة. النتيجة تخص هذه الصورة الاصطناعية ذات الحواف الحادة، ولا تعني تفوقاً عاماً لطريقة، فقد تنقلب الأفضلية بتغيّر الصورة أو الإعدادات، وCanny الكامل بعتبته المزدوجة غير منفَّذ هنا. بدّل ويفلت SWT من Haar إلى db2 أو db4 وراقب الحقيقة الأرضية: المرشحات الأطول لها مسند أوسع وقد ينخفض دقة التوطين عند الحواف الحادة، وهذا سبب اعتماد Haar افتراضياً في هذا المختبر.
المختبر D

من إشارة EEG اصطناعية إلى صورة (Scalogram)

نولّد إشارة من إيقاع ألفا 10Hz وثيتا 6Hz وانفجار بيتا قرب 22Hz عند 1.3 ثانية ووميض عين بطيء عند 0.45 ثانية وضوضاء بيضاء وتيار كهربائي 50Hz. ثم نحسب CWT بويفلت Morlet (ω₀=6) على 48 تردداً لوغاريتمياً بين 2 و60Hz، فتنتج الصورة ثنائية الأبعاد التي تُعالَج في B وC [5]. وحدة السعة اعتباطية. في MATLAB: cwt [17].

الإعدادات

الإشارة (1D): جهد مقابل الزمن — هذه هي الإشارة وليست الصورة.
الطيف (DFT): الخط المتقطع عند 50Hz.
الصورة 128×128 المُدخلة إلى المختبرين B وC بعد تغيير حجم المخطط المقياسي.
الصورة المشتقة (2D): مخطط مقياسي بمقياس dB لمدى 40 dB، المحور الرأسي تردد لوغاريتمي. الخطوط المتقطعة حدود الحزم δ/θ/α/β/γ. عند طرفي المحور الزمني قد تظهر آثار حدود لأن الإشارة مقطوعة.
جرّب: ارفع سعة 50Hz وشاهد الشريط الأفقي في الصورة والقمة في الطيف، ثم فعّل المرشح الثالم وقارن. بعدها أرسل الصورة إلى B: ستلاحظ أن شريطاً مستمراً عبر الزمن بنية منظَّمة قد لا تزيلها العتبة كما تزيل الضوضاء البيضاء، وهذا سبب معالجة 50Hz على الإشارة أولاً. تحقّق بنفسك بمقارنة الحالتين.
المختبر E

عائلات الويفلت وخصائصها

اختيار الويفلت موازنة بين قِصَر المسند وعدد عزوم التلاشي والتماثل والنعومة [18]، [19]. تُرسم الدالتان φ (المقياس) وψ (الويفلت) بخوارزمية التتالي من معاملات المرشح، وتُحسب خصائص المرشح رقمياً.

الإعدادات

φ(t) دالة المقياس
ψ(t) الويفلت
|H(ω)| تمرير منخفض و|G(ω)| تمرير عالٍ (ω/π)
منخفض h / φعالٍ g / ψ
الخاصية المحسوبةالقيمة
ما الذي تعنيه القيم؟ تعامد المرشح يعني Σh = √2 وΣh² = 1 وتعامد الإزاحات الزوجية، وهو ما يجعل التحويل يحفظ الطاقة ويُبقي الضوضاء البيضاء بيضاء. وعزوم التلاشي تعني أن g يُصفّر كثيرات الحدود ذات الدرجة الأقل، فتقل معاملات المناطق الملساء. قارن Haar بـ db4 في شكل ψ: الأول غير مستمر وأقصر مسنداً، والثاني أنعم وأطول.
MATLAB

المقابل في MATLAB

هذه هي النواة المكتوبة في البحث. راجعتُ أسماء الدوال وصيغها في توثيق MathWorks، لكن الشيفرة لم تُشغَّل عند كتابة البحث، فتُختبر قبل التسليم.

ما تراه في الصفحةالدالة في MATLAB
تحليل DWT لمستوى / عدة مستويات وإعادة البناءdwt2 · wavedec2 · waverec2
العتبة اللينة/الصلبةwthresh
تنقية جاهزة (طرق وعتبات متعددة)wdenoise2
ويفلت غير متناقص للحوافswt2
Sobel وCannyedge
المخطط المقياسيcwt
PSNR وSSIM وMSEpsnr · ssim · immse
الشيفرة المختصرة (تنقية بالويفلت + حواف SWT)
I  = im2double(imread('cameraman.tif'));   rng(0);
In = I + 0.05*randn(size(I));                  % known Gaussian noise
[C,S] = wavedec2(In, 3, 'sym4');               % 2D multilevel DWT
[~,~,D1] = detcoef2('all', C, S, 1);
sigHat = median(abs(D1(:)))/0.6745;            % noise estimate from HH1
lam    = sigHat*sqrt(2*log(numel(In)));        % universal threshold
nA = prod(S(1,:));                             % LL_J is not thresholded
Cs = C;  Cs(nA+1:end) = wthresh(C(nA+1:end), 's', lam);   % soft
Ch = C;  Ch(nA+1:end) = wthresh(C(nA+1:end), 'h', lam);   % hard
Isoft = waverec2(Cs, S, 'sym4');   Ihard = waverec2(Ch, S, 'sym4');
figure; subplot(1,3,1), imshow(I);  subplot(1,3,2), imshow(In,[]);  subplot(1,3,3), imshow(Isoft,[]);
for X = {In, Isoft, Ihard}
    fprintf('MSE %.4g  PSNR %.2f dB  SSIM %.4f\n', immse(X{1},I), psnr(X{1},I), ssim(X{1},I));
end
%% Edges with SWT (2^J must divide the image size)
[~,H,V,D] = swt2(I, 2, 'sym4');
M = 0;  for j = 1:2, M = M + mat2gray(sqrt(H(:,:,j).^2 + V(:,:,j).^2 + D(:,:,j).^2)); end
M = M/2;   BWw = bwmorph(imbinarize(M, graythresh(M)), 'thin', Inf);
figure; subplot(1,3,1), imshow(BWw);  subplot(1,3,2), imshow(edge(I,'sobel'));  subplot(1,3,3), imshow(edge(I,'canny'));
أسئلة متوقعة

أسئلة يُحتمل أن تُطرح

إجابات موجزة مبنية على المراجع، مع تمييز ما هو معروف نظرياً عمّا يحتاج اختباراً على البيانات.

لماذا نطبّق الويفلت الثنائي على صورة مشتقة وليس على الإشارة؟

الويفلت الأحادي البعد يُطبَّق على الإشارة مباشرة ويُستخدم كثيراً في EEG [20]، [21]. أما الصورة المشتقة (مخطط مقياسي أو طيفي) فتحوّل المسألة إلى معالجة صور، وهو ما تفعله أعمال التعلّم العميق على EEG [1]، [2]، [22]. يجب ألا يُخلط بين المستويين: بنية الصورة تعتمد على التحويل الذي أنتجها.

لماذا تُقسم على 0.6745 عند تقدير σ؟

الوسيط المطلق لعيّنة غاوسية متوسطها صفر يساوي تقريباً 0.6745σ، فالقسمة تجعل المقدّر متسقاً [7]. ويُستخدم الوسيط لأنه أقل تأثراً بمعاملات الحواف الكبيرة من الانحراف المعياري.

ما الفرق بين العتبة اللينة والصلبة؟

الصلبة تُبقي المعامل الكبير كما هو فتحفظ سعته لكنها قد تُنتج تذبذبات، واللينة تقلّصه بمقدار λ فتكون أنعم لكنها تُدخل انحيازاً [10]. جرّب الاثنتين في المختبر B وانظر خريطة الخطأ بنفسك.

لماذا SWT وليس DWT للحواف؟

DWT المتناقص ليس ثابتاً أمام الإزاحة، فإزاحة الصورة بكسلاً قد تغيّر المعاملات. SWT يحافظ على حجم الصورة عند كل مقياس فيخفف هذه الحساسية بثمن الذاكرة والزمن [15].

هل الويفلت أفضل من Canny؟

لا يصح الادعاء بأفضلية مطلقة. Canny من حيث المبدأ صيغة أحادية المقياس من التدرج المنعّم [23]، [8]، وما يضيفه الويفلت هو دمج عدة مقاييس. والأداء يتوقف على الصورة والضوضاء والعتبات والويفلت، ولذلك تُقاس الأطراف على حقيقة أرضية بمؤشرات Precision وRecall وF1 كما في المختبر C.

هل الأرقام المعروضة نتائج البحث؟

لا. هي محسوبة حياً بشيفرة JavaScript على صور اصطناعية وإشارة اصطناعية للتوضيح. أما نتائج MATLAB فتُنتج بتشغيل الملفات المرفقة على صورة قياسية، وتُذكر هي وحدها في قسم النتائج بعد تشغيلها فعلاً.

ما حدود هذا العمل؟

الإشارة اصطناعية وليست سريرية، والضوضاء غاوسية بيضاء وهو افتراض قد لا يصح في صور EEG الحقيقية، وتنفيذ الحواف مبسّط، وSSIM مبسّط، وDWT المتناقص غير ثابت أمام الإزاحة (يخففه Cycle Spinning أو الويفلت المعقد ثنائي الشجرة [24]). ومن الاتجاهات المستقبلية: بيانات EEG حقيقية مُجازة أخلاقياً، وقياس الأثر على مهمة تصنيف لاحقة، وتجربة ويفلتات أخرى.

ما مصدر أسماء الدوال وصياغة المؤشرات؟

وثائق MathWorks الرسمية للدوال [25]، [9]، [11]، [26]، [27]، ومرجع SSIM الأصلي [28]، والكتب الأساسية [29]، [30].

المراجع

المراجع (IEEE)

رُجعت المراجع من مصادرها؛ الأرقام في النص تشير إلى القائمة أدناه.

  1. P. Bashivan, I. Rish, M. Yeasin, and N. Codella, "Learning representations from EEG with deep recurrent-convolutional neural networks," in Proc. Int. Conf. Learn. Represent. (ICLR), 2016, arXiv:1511.06448. [Online]. Available: https://arxiv.org/abs/1511.06448
  2. A. Craik, Y. He, and J. L. Contreras-Vidal, "Deep learning for electroencephalogram (EEG) classification tasks: A review," J. Neural Eng., vol. 16, no. 3, Art. no. 031001, 2019, doi: 10.1088/1741-2552/ab0ab5.
  3. M. Teplan, "Fundamentals of EEG measurement," Meas. Sci. Rev., vol. 2, sec. 2, pp. 1–11, 2002. [Online]. Available: https://www.measurement.sk/2002/S2/p2.html
  4. J. A. Urigüen and B. Garcia-Zapirain, "EEG artifact removal—state-of-the-art and guidelines," J. Neural Eng., vol. 12, no. 3, Art. no. 031001, 2015, doi: 10.1088/1741-2560/12/3/031001.
  5. C. Torrence and G. P. Compo, "A practical guide to wavelet analysis," Bull. Amer. Meteorol. Soc., vol. 79, no. 1, pp. 61–78, Jan. 1998. [Online]. Available: https://journals.ametsoc.org/view/journals/bams/79/1/1520-0477_1998_079_0061_apgtwa_2_0_co_2.xml
  6. S. G. Mallat, "A theory for multiresolution signal decomposition: The wavelet representation," IEEE Trans. Pattern Anal. Mach. Intell., vol. 11, no. 7, pp. 674–693, Jul. 1989, doi: 10.1109/34.192463.
  7. D. L. Donoho and I. M. Johnstone, "Ideal spatial adaptation by wavelet shrinkage," Biometrika, vol. 81, no. 3, pp. 425–455, 1994, doi: 10.1093/biomet/81.3.425.
  8. S. Mallat and S. Zhong, "Characterization of signals from multiscale edges," IEEE Trans. Pattern Anal. Mach. Intell., vol. 14, no. 7, pp. 710–732, Jul. 1992, doi: 10.1109/34.142909.
  9. MathWorks, "wavedec2: Multilevel 2-D discrete wavelet transform," MATLAB Wavelet Toolbox Documentation. [Online]. Available: https://www.mathworks.com/help/wavelet/ref/wavedec2.html (Accessed: Sep. 19, 2026)
  10. D. L. Donoho, "De-noising by soft-thresholding," IEEE Trans. Inf. Theory, vol. 41, no. 3, pp. 613–627, May 1995, doi: 10.1109/18.382009.
  11. MathWorks, "wdenoise2: Wavelet image denoising," MATLAB Wavelet Toolbox Documentation. [Online]. Available: https://www.mathworks.com/help/wavelet/ref/wdenoise2.html (Accessed: Sep. 19, 2026)
  12. MathWorks, "wthresh: Soft or hard thresholding," MATLAB Wavelet Toolbox Documentation. [Online]. Available: https://www.mathworks.com/help/wavelet/ref/wthresh.html (Accessed: Sep. 19, 2026)
  13. S. G. Chang, B. Yu, and M. Vetterli, "Adaptive wavelet thresholding for image denoising and compression," IEEE Trans. Image Process., vol. 9, no. 9, pp. 1532–1546, Sep. 2000, doi: 10.1109/83.862633.
  14. S. Mallat and W. L. Hwang, "Singularity detection and processing with wavelets," IEEE Trans. Inf. Theory, vol. 38, no. 2, pp. 617–643, Mar. 1992, doi: 10.1109/18.119727.
  15. MathWorks, "swt2: Stationary wavelet transform 2-D," MATLAB Wavelet Toolbox Documentation. [Online]. Available: https://www.mathworks.com/help/wavelet/ref/swt2.html (Accessed: Sep. 19, 2026)
  16. MathWorks, "edge: Find edges in grayscale image," MATLAB Image Processing Toolbox Documentation. [Online]. Available: https://www.mathworks.com/help/images/ref/edge.html (Accessed: Sep. 19, 2026)
  17. MathWorks, "cwt: Continuous 1-D wavelet transform," MATLAB Wavelet Toolbox Documentation. [Online]. Available: https://www.mathworks.com/help/wavelet/ref/cwt.html (Accessed: Sep. 19, 2026)
  18. I. Daubechies, Ten Lectures on Wavelets. Philadelphia, PA, USA: SIAM, 1992.
  19. MathWorks, "Choose a wavelet," MATLAB Wavelet Toolbox Documentation. [Online]. Available: https://www.mathworks.com/help/wavelet/gs/choose-a-wavelet.html (Accessed: Sep. 19, 2026)
  20. H. Adeli, Z. Zhou, and N. Dadmehr, "Analysis of EEG records in an epileptic patient using wavelet transform," J. Neurosci. Methods, vol. 123, no. 1, pp. 69–87, Feb. 2003, doi: 10.1016/S0165-0270(02)00340-0.
  21. A. Subasi, "EEG signal classification using wavelet feature extraction and a mixture of expert model," Expert Syst. Appl., vol. 32, no. 4, pp. 1084–1093, 2007. [Online]. Available: https://www.sciencedirect.com/science/article/abs/pii/S0957417406000844
  22. Y. Roy, H. Banville, I. Albuquerque, A. Gramfort, T. H. Falk, and J. Faubert, "Deep learning-based electroencephalography analysis: A systematic review," J. Neural Eng., vol. 16, no. 5, Art. no. 051001, 2019, doi: 10.1088/1741-2552/ab260c.
  23. J. Canny, "A computational approach to edge detection," IEEE Trans. Pattern Anal. Mach. Intell., vol. PAMI-8, no. 6, pp. 679–698, Nov. 1986, doi: 10.1109/TPAMI.1986.4767851.
  24. I. W. Selesnick, R. G. Baraniuk, and N. G. Kingsbury, "The dual-tree complex wavelet transform," IEEE Signal Process. Mag., vol. 22, no. 6, pp. 123–151, Nov. 2005, doi: 10.1109/MSP.2005.1550194.
  25. MathWorks, "dwt2: Single-level discrete 2-D wavelet transform," MATLAB Wavelet Toolbox Documentation. [Online]. Available: https://www.mathworks.com/help/wavelet/ref/dwt2.html (Accessed: Sep. 19, 2026)
  26. MathWorks, "psnr: Peak signal-to-noise ratio (PSNR)," MATLAB Image Processing Toolbox Documentation. [Online]. Available: https://www.mathworks.com/help/images/ref/psnr.html (Accessed: Sep. 19, 2026)
  27. MathWorks, "ssim: Structural similarity (SSIM) index for measuring image quality," MATLAB Image Processing Toolbox Documentation. [Online]. Available: https://www.mathworks.com/help/images/ref/ssim.html (Accessed: Sep. 19, 2026)
  28. Z. Wang, A. C. Bovik, H. R. Sheikh, and E. P. Simoncelli, "Image quality assessment: From error visibility to structural similarity," IEEE Trans. Image Process., vol. 13, no. 4, pp. 600–612, Apr. 2004, doi: 10.1109/TIP.2003.819861.
  29. S. Mallat, A Wavelet Tour of Signal Processing: The Sparse Way, 3rd ed. Amsterdam, The Netherlands: Academic Press, 2009.
  30. R. C. Gonzalez and R. E. Woods, Digital Image Processing, 4th ed. New York, NY, USA: Pearson, 2018.