سؤال

أنا أستخدم 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);

يجب أن نرى شيئا من هذا القبيل:

enter image description here

الآن حان الوقت لإعادة بناء! ينفذ التعليمات البرمجية التالية إعادة إعمار "كامل" (باستخدام الكل من مصفوفات معامل التفاصيل المخزنة) وإعادة إعمار "جزئي" (باستخدام لا أحد منهم)، ثم يتأخر الصور:

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);

enter image description here

لاحظ أن الأصل الأصلي (أعلى اليسار) وإعادة الإعمار "الكامل" (أعلى اليمين) تبدو لا يمكن تمييزها، ولكن إعادة الإعمار "الجزئي" (السفلي اليسرى) هو مبكأة للغاية. لن يكون الفرق شديدا إذا طلبت خطوات تحلل أقل، مثل 1 أو 2 فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top