تطبيق Matlab's IDWT2 عدة مرات
-
12-09-2019 - |
سؤال
أنا أستخدم MATLAB لتطبيق تحويل المويجات المنفصلة على صورة. أنا أطبق أنه عدة مرات (3) للحصول على تحويل المستوى 3. أنا أستخدم dwt2
وظيفة مقدمة من matlab من أجل ضغط و idwt2
لجعل الضغط. المشكلة هي أنني لا أعرف كيفية إلغاء ضغط عدة مرات، كما هو الحال في التطبيق idwt2
عدة مرات إلى الإخراج السابق المستلم، لأنه يعيد مصفوفة. خذ هذا المثال:
x = idwt2(scaled3, vertical3, horizontal3, diagonal3, Lo_R, Ho_R);
كيف ينبغي idwt2
أن تطبق على X؟
المحلول
النظر في الوثائق ل dwt2
و idwt2
, ، يبدو أن لديك خيارين عامين لإعادة بناء صورك المتحللة المتضاربة:
- قم بتخزين جميع مصفوفات معامل المعاملات الأفقية والرأفية والقطئية من كل خطوة تحلل واستخدامها في إعادة الإعمار.
- أدخل مصفوفة فارغة (
[]
) لأي مصفوفات معامل التفاصيل التي لم تقم بها من خطوات التحلل السابقة.
لأنه كان يوما بطيئا، إليك بعض التعليمات البرمجية التي تظهر كيفية القيام بذلك وما تبدو النتائج لكل حالة ...
أولا، قم بتحميل صورة عينة وتهيئة بعض المتغيرات:
load woman; % Load image data
nLevel = 3; % Number of decompositions
nColors = size(map, 1); % Number of colors in colormap
cA = cell(1, nLevel); % Approximation coefficients
cH = cell(1, nLevel); % Horizontal detail coefficients
cV = cell(1, nLevel); % Vertical detail coefficients
cD = cell(1, nLevel); % Diagonal detail coefficients
الآن، قم بتطبيق التحلل (في هذه الحالة 3) وتخزين مصفوفات معامل التفاصيل من كل خطوة في صفيف خلية:
startImage = X;
for iLevel = 1:nLevel,
[cA{iLevel}, cH{iLevel}, cV{iLevel}, cD{iLevel}] = dwt2(startImage, 'db1');
startImage = cA{iLevel};
end
لمعرفة ما تبدو الصورة المتحللة النهائية، إلى جانب جميع مصفوفات معامل التفاصيل على طول الطريق، قم بتشغيل التعليمات البرمجية التالية (التي تستفيد منها wcodemat
):
tiledImage = wcodemat(cA{nLevel}, nColors);
for iLevel = nLevel:-1:1,
tiledImage = [tiledImage wcodemat(cH{iLevel}, nColors); ...
wcodemat(cV{iLevel}, nColors) wcodemat(cD{iLevel}, nColors)];
end
figure;
imshow(tiledImage, map);
يجب أن نرى شيئا من هذا القبيل:
الآن حان الوقت لإعادة بناء! ينفذ التعليمات البرمجية التالية إعادة إعمار "كامل" (باستخدام الكل من مصفوفات معامل التفاصيل المخزنة) وإعادة إعمار "جزئي" (باستخدام لا أحد منهم)، ثم يتأخر الصور:
fullRecon = cA{nLevel};
for iLevel = nLevel:-1:1,
fullRecon = idwt2(fullRecon, cH{iLevel}, cV{iLevel}, cD{iLevel}, 'db1');
end
partialRecon = cA{nLevel};
for iLevel = nLevel:-1:1,
partialRecon = idwt2(partialRecon, [], [], [], 'db1');
end
figure;
imshow([X fullRecon; partialRecon zeros(size(X))], map, ...
'InitialMagnification', 50);
لاحظ أن الأصل الأصلي (أعلى اليسار) وإعادة الإعمار "الكامل" (أعلى اليمين) تبدو لا يمكن تمييزها، ولكن إعادة الإعمار "الجزئي" (السفلي اليسرى) هو مبكأة للغاية. لن يكون الفرق شديدا إذا طلبت خطوات تحلل أقل، مثل 1 أو 2 فقط.