كيف يمكنني إعادة قياس النطاق الديناميكي للصورة في MATLAB؟

StackOverflow https://stackoverflow.com/questions/5984178

سؤال

أحتاج إلى إعادة تحديد النطاق الديناميكي للصورة بشكل موحد بناءً على تحويلات قيمة البكسل التالية:

Pixel Value: Quantized Value
0 - 64     : 31
65 - 128   : 95
129 - 192  : 159
193 - 255  : 223

أريد استبدال جميع قيم البكسل في النطاقات المذكورة أعلاه بالقيم الكمية.كيف يمكنني ترميز هذا في MATLAB؟

هل كانت مفيدة؟

المحلول

طريقة واحدة هي الاستخدام الفهرسة المنطقية.نظرا لمصفوفة الصورة img (والتي يمكن أن تكون تدرج رمادي ثنائي الأبعاد أو ثلاثي الأبعاد RGB)، وهذا سيحل محل جميع القيم الخاصة بك:

img(img >= 0 & img <= 64) = 31;
img(img >= 65 & img <= 128) = 95;
img(img >= 129 & img <= 192) = 159;
img(img >= 193 & img <= 255) = 223;

هناك خيار آخر يتمثل في إنشاء جدول بحث مكون من 256 عنصرًا واستخدام القيم الموجودة في صورتك كمؤشرات في هذا الجدول:

lookupTable = [31.*ones(1,65) 95.*ones(1,64) 159.*ones(1,64) 223.*ones(1,63)];
img = uint8(lookupTable(double(img)+1));

لاحظ أنه مع هذا الحل يجب أن تضع في اعتبارك فئة مصفوفة الصور الخاصة بك.العديد من الصور من الدرجة uint8, ، تمتد القيم من 0 إلى 255.لاستخدام هذه القيم كمؤشر، يجب عليك تحويلها إلى فئة يمكنها تخزين أعداد صحيحة أكبر (مثل double) لتجنب التشبع عند الحد الأقصى للقيمة 255، ثم قم بإضافة واحد لأنك تحتاج إلى فهرس من 1 إلى 256.قد ترغب بعد ذلك في تحويل مصفوفة الصورة الناتجة مرة أخرى إلى الفصل uint8.

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